kubeedge1.3.0 安装过程

前言:本文包含了docker和k8s的安装过程,适用于新接触这部分的同学安装,同时也实现了kubeedge1.3的新版本特性,kubectl logs 边缘节点pod。第一次写博客,可能会有纰漏之处,欢迎大家指正,同时也欢迎大家留言交流!
-------------------------------------------------------2020.8.7更新-----------------------------------------
不知什么缘故,kubeedge1.3.*按照原来的安装步骤会报错,在启动cloudcore和edgecore的时候会报错证书不存在,需要把cloudcore.yaml中modules. cloudStream和edgecore.yaml中modules. edgeStream改成false。这样做唯一的影响是云端无法查看边缘端pod的日志。此外,注意到kubeedge社区发布了1.4.0-beta版本,可能近期1.4正式版本就要正式发布了,期待有一些支持logs更好的解决办法。看到官网的趋势是用keadm来部署kubeedge,后期争取出个教程。
-------------------------------------------------------------------end------------------------------------------
本文参考了如下内容:
https://blog.csdn.net/subfate/article/details/106463852
https://docs.kubeedge.io/en/latest/configuration/kubeedge.html

安装说明:
安装方式:源码编译
操作系统:ubuntu16.04 系统架构:amd64(X86架构)
云节点:192.168.17.50 处理器内核总数4 4G内存 40G硬盘
边缘节点:192.168.17.60 处理器内核总数4 4G内存 40G硬盘

版本说明:
Docker版本:docker-ce19.03
K8S版本:kubernetes v1.17.5
GO版本:go1.12.5

注:本文全程使用root权限,若使用普通用户权限,有些命令可能没有运行权限,需在前面加上sudo,若已切换至root权限,命令前sudo可省略。另,本文中涉及到具体的文件、节点名称、IP时,请依据自身情况进行替换。

# 切换至root权限
sudo -s

一、kubeedge版本依赖

1. k8s版本依赖

在这里插入图片描述
需要注意的是,k8s和docker版本之间也有对应关系,具体对应关系请查看k8s更新日志中的说明:
https://github.com/kubernetes/kubernetes/blob/release-1.17/CHANGELOG/CHANGELOG-1.17.md

2. go版本依赖

在这里插入图片描述

二、ubuntu设置(在云端和边缘端都设置)

1. 固定IP(desktop版)

点击设置→网络→有线→选项→IPv4设置→方法选择手动→设置(设置参考图1)后保存,重启网卡(点击图2标注处可进行重启),使用ifconfig命令查看IP是否更改(如图3所示)。
图1
图1
图2
图2
图3
图3

2. 关闭防火墙

sudo ufw disable

防火墙在系统启动时自动禁用
// 查看防火墙状态

sudo ufw status

状态:不活动

3. 关闭交换分区

//临时关闭

sudo swapoff -a

// 永久关闭

sudo sed -i 's/.*swap.*/#&/' /etc/fstab

4. 修改主机名(可选)

// 各个节点的主机名不要相同,若两个节点的主机名不同则无需修改,注意主机名命名规范:

// 主机名字允许包括:大小写字母、数字、连字符,但是不能包含下划线、不能以数字开头。

hostnamectl set-hostname edgenode

// 同时在/etc/host中将原来主机名替换,否则用sudo命令时会报错

vim /etc/hosts

// 修改保存后重启或者重新登陆即可,查看主机名

hostname

三、先决条件

下载并安装搭建kubeedge所需要的前提条件。

1. 云侧

1.1 安装goland(以go1.12.5为例)

// 下载安装包

sudo wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz

// 解压到/usr/local/文件下

sudo tar zxvf go1.12.5.linux-amd64.tar.gz -C /usr/local/

// 将go添加至环境变量

sudo cp /usr/local/go/bin/go /usr/local/bin/go

// 查看go是否安装成功

go version

go version go1.12.5 linux/amd64

1.2 安装docker (以docker-ce19.03为例)

// step 1: 安装必要的一些系统工具

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

// step 2: 安装GPG证书

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

// Step 3: 写入软件源信息

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

// Step 4: 更新并安装Docker-CE

sudo apt-get -y update
apt-get -y install docker-ce=5:19.03.2~3-0~ubuntu-xenial
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

1.3 安装kubernetes(以kubernetes v1.17.5为例)

// 下载必要工具

apt-get update && apt-get install -y apt-transport-https

// 安装证书

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 

// 添加源信息

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

// 更新源

apt-get update

// 下载并安装kubernetes

apt-get install "kubeadm=1.17.5*" "kubelet=1.17.5*" "kubectl=1.17.5*"

1.4 创建kubernetes集群

// 查看当前版本kubernetes所需要的镜像

kubeadm config images list

// 或者查看指定版本的kubernetes镜像

kubeadm config images list --kubernetes-version=v1.17.5

k8s.gcr.io/kube-apiserver:v1.17.5
k8s.gcr.io/kube-controller-manager:v1.17.5
k8s.gcr.io/kube-scheduler:v1.17.5
k8s.gcr.io/kube-proxy:v1.17.5
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.2

// 镜像拉取脚本
// 首先创建一个.sh文件,并添加可执行权限

sudo touch pull.sh
sudo chmod 755 pull.sh

// 将以下内容放入该文件中,根据当前k8s版本需要的镜像修改pull.sh文件中对应的镜像版本

#!/bin/bash
KUBE_VERSION=v1.17.5
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.2.24
DNS_VERSION=1.2.2
username=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
    )

for image in ${images[@]}
do
    docker pull ${username}/${image}
    docker tag ${username}/${image} k8s.gcr.io/${image}
    #docker tag ${username}/${image} gcr.io/google_containers/${image}
    docker rmi ${username}/${image}
done

// 执行脚本

sudo ./pull.sh

// 初始化集群

sudo kubeadm init    --kubernetes-version=v1.17.5  --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

// 为了允许在master上运行pod,取消污点

kubectl taint nodes --all node-role.kubernetes.io/master-

node “test-01” untainted

taint “node-role.kubernetes.io/master:” not found

// 查看节点的tanit,注意替换节点名称

kubectl describe nodes 节点名称 |grep -E '(Roles|Taints)'

Roles: master
Taints: node.kubernetes.io/not-ready:NoSchedule

Roles: master
Taints:

// 添加pod网络插件

--------------------------以下内容是可选内容,可不执行---------------------------------
注: 在kubeedge1.3版本安装成功后,会在边缘节点也安装网络插件,但是由于edgecore没有注入APIserver环境变量,pod状态会变成Init:error,手动在calico.yaml文件中注入环境变量后解决此问题。边缘节点网络插件状态异常不会影响kubectl logs边缘节点pod,可跳过此步

wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
vim calico.yaml

// 在每个镜像的环境变量中添加如下内容,注意替换自己的cloudcoreIP

    - name: KUBERNETES_SERVICE_HOST
      value: "192.168.17.50"
    - name: KUBERNETES_SERVICE_PORT
      value: "6443"
    - name: KUBERNETES_SERVICE_PORT_HTTPS
      value: "6443"
    - name: KUBERNETES_NODE_NAME

// 4个镜像一共5处,镜像命名分别为:upgrade-ipam、install-cni、flexvol-driver、calico-node、calico-kube-controllers,第三处没有环境变量,我们手动添加即可,如下所示

- name: flexvol-driver
  image: calico/pod2daemon-flexvol:v3.14.1
  env:
    - name: KUBERNETES_SERVICE_HOST
      value: "192.168.17.50"
    - name: KUBERNETES_SERVICE_PORT
      value: "6443"
    - name: KUBERNETES_SERVICE_PORT_HTTPS
      value: "6443"

// 修改后保存退出,并运行修改过的calico.yaml

kubectl apply -f calico.yaml

----------------------------------------可选内容结束-------------------------------------------

// 若选择不修改calico.yaml,则运行

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

// 查看pod运行状态

kubectl get pod --all-namespaces

在这里插入图片描述
// 查看节点状态

kubectl get node

在这里插入图片描述

2. 边缘侧

2.1 安装goland

同上述云侧安装步骤1.1

2.2 安装docker

同上述云侧安装步骤1.2

2.3 安装mosquitto

// 添加源

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

// 更新软件

sudo apt-get update

// 下载并安装

sudo apt-get install mosquitto

四、安装kubeedge

// 在云端和边缘端都下载git工具

sudo apt-get install git

// 在云端和边缘端设置环境变量

// 首先编辑文件~/.bashrc

vim ~/.bashrc

// 其次在文件最后添加

export GOPATH=$HOME/go

// 最后使更改生效

source ~/.bashrc

// 在云端和边缘端都下载kubeedge源码

git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge

1. 设置kubeedge

此部分主要为生成证书以及编译cloudcore、edgecore

1.1 设置云节点

// 如果之前安装过kubeedge,首先清理证书/etc/kubeedge/ca和/etc/kubeedge/certs,然后删除secret

rm -rf /etc/kubeedge/ca
rm -rf /etc/kubeedge/certs
kubectl delete secret casecret -nkubeedge
kubectl delete secret cloudcoresecret -nkubeedge

// 生成支持kubectl logs命令的证书

// 首先,在/etc/kubernetes/pki/目录中确保有kubernetes的ca.crt和ca.key文件

// 其次,设置CLOUDCOREIPS环境变量,设置环境变量以指定所有cloudcore的IP地址,可以设置设置多个IP地址,中间用空格隔开即可

export CLOUDCOREIPS="192.168.17.50"

// 第三,生成证书

mkdir -p  /etc/kubeedge/ca
mkdir -p  /etc/kubeedge/certs
$GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh stream

// 第四,设置NAT端口转发

iptables -t nat -A OUTPUT -p tcp  --dport 10350 -j DNAT --to 192.168.17.50:10003

// 编译cloudcore

// 先检测gcc是否已安装,若未安装则自行安装

gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

// 编译cloudcore

cd $GOPATH/src/github.com/kubeedge/kubeedge/
make all WHAT=cloudcore
注:编译可能需要科学上网,可直接下载kubeedge-v1.3.0-linux-amd64.tar.gz,里面包含cloudcore
编译edgecore时也相同,下面不再说明

# kubeedge-v1.3.0-linux-amd64.tar.gz下载地址:
wget https://github.com/kubeedge/kubeedge/releases/download/v1.3.0/kubeedge-v1.3.0-linux-amd64.tar.gz

// 创建设备模块和设备CRD

cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices
kubectl create -f devices_v1alpha1_devicemodel.yaml
kubectl create -f devices_v1alpha1_device.yaml

// 创建用于可靠消息传递的ClusterObjectSync和ObjectSync CRD

cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/reliablesyncs
kubectl create -f cluster_objectsync_v1alpha1.yaml
kubectl create -f objectsync_v1alpha1.yaml

// 复制Coudcore二进制文件

mkdir ~/kubeedge/
cp $GOPATH/src/github.com/kubeedge/kubeedge/_output/local/bin/cloudcore ~/kubeedge/

1.2 设置边缘节点

// 如果边缘节点之前安装过kubeedge,删除其证书

rm -rf /etc/kubeedge/ca
rm -rf /etc/kubeedge/certs

// 先检测gcc是否已安装,若未安装则自行安装

gcc –version

// 编译edgecore

cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=edgecore

// 复制Edgecore二进制文件

mkdir ~/kubeedge/
cp $GOPATH/src/github.com/kubeedge/kubeedge/_output/local/bin/edgecore ~/kubeedge/

2. 配置kubeedge

此部分主要修改配置文件cloudcore.yaml和edgecore.yaml

2.1 配置云节点

// 创建/etc/kubeedge/config文件夹

mkdir -p /etc/kubeedge/config/

// 生成完整配置

~/kubeedge/cloudcore --defaultconfig > /etc/kubeedge/config/cloudcore.yaml

// 修改配置文件

vim /etc/kubeedge/config/cloudcore.yaml

// 首先,更正kubernetes配置文件路径,确定其路径是/root/.kube/config还是
/home/lz/.kube/config,并且在kubeConfig:所在行进行修改。本文将其修改为/home/lz/.kube/config

// 其次,设置advertiseAddress为cloucore IP

modules:
  cloudHub:
    advertiseAddress:
    - 192.168.17.50

// 最后,设置支持kubectl logs边缘节点pod,修改modules. cloudStream. enable为true(若启动cloudcore报错rootCA.server等证书不存在,需将此处改成false)

modules:
  cloudStream:
    enable: true

2.2 配置边缘节点

// 创建/etc/kubeedge/config文件夹

mkdir -p /etc/kubeedge/config/

// 生成完整配置文件

~/kubeedge/edgecore --defaultconfig > /etc/kubeedge/config/edgecore.yaml

// 修改配置文件

vim /etc/kubeedge/config/edgecore.yaml

// 首先,将申请证书地址modules.edgehub.httpServer修改为cloudcore的IP地址和端口

modules:
  edgeHub:
    httpServer: https://192.168.17.50:10002

// 其次,修改modules.edgehub.websocket.server的地址为cloudcore的ip地址和端口

modules:
  edgeHub:
    websocket:
      server: 192.168.17.50:10000

// 第三,修改modules.edgehub.quic.server的地址为cloudcore的ip地址和端口

modules:
  edgeHub:
    quic:
      server: 192.168.17.50:10001

// 第四,设置支持kubectl logs边缘节点pod,修改modules. edgeStream
// (1)将enable由false改为true(若启动edgecore报错证书无法获取,需将此处改成false)

modules:
  edgeStream:
    enable: true

// (2)将server改为cloucoreIP:10004

modules:
  edgeStream:
    server: 192.168.17.50:10004

// 第五,使用命令ifconfig查看网卡名称,并在moudules.edged. interfaceName处修改,我的网卡名为ens33,如本文开始处的图2所示

modules:
  edged:
    interfaceName: ens33

// 第六,修改(确认)podSandboxImage,X86平台为podSandboxImage: kubeedge/pause:3.1(默认),ARM 平台根据位数不同,可设为kubeedge/pause-arm:3.1或kubeedge/pause-arm64:3.1

// 最后,配置令牌

// (1)在云侧运行cloudcore

~/kubeedge/cloudcore

// (2)在云侧获取secret

kubectl get secret tokensecret -n kubeedge -oyaml
apiVersion: v1
data:
  tokendata: NzZkMjYzMjI4MTRhNzMxMTU3ZmE0ZjMwYTE2NGE2MTMzMzFmMDA4ZDhiYTgyZTU3ZDI2ZDk4ZGVmNzFhMGJjMy5leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUxT1RFMk9ETXhOVGQ5LmpXaHpld1BybHJCZ0xBVFZrdUZsX0UtSl9hakdiNU1Va09pOVUxTXlFWGs=
kind: Secret
metadata:
  creationTimestamp: "2020-06-08T06:12:37Z"
  name: tokensecret
  namespace: kubeedge
  resourceVersion: "78415"
  selfLink: /api/v1/namespaces/kubeedge/secrets/tokensecret
  uid: 9731a7f5-ec1f-4ac4-85c5-d7c1e499732f
type: Opaque

// (3)在云侧通过base64解码tokendata字段

echo NzZkMjYzMjI4MTRhNzMxMTU3ZmE0ZjMwYTE2NGE2MTMzMzFmMDA4ZDhiYTgyZTU3ZDI2ZDk4ZGVmNzFhMGJjMy5leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKbGVIQWlPakUxT1RFMk9ETXhOVGQ5LmpXaHpld1BybHJCZ0xBVFZrdUZsX0UtSl9hakdiNU1Va09pOVUxTXlFWGs= |base64 -d

76d26322814a731157fa4f30a164a613331f008d8ba82e57d26d98def71a0bc3.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTE2ODMxNTd9.jWhzewPrlrBgLATVkuFl_E-J_ajGb5MUkOi9U1MyEXk

// (4)将解码后的字符串复制到边缘侧edgecore.yaml中的modules.edgeHub.token字段,如下图所示
在这里插入图片描述

3. 运行

为了方便查看运行日志,我选择直接运行,若需要其他的运行方式,请参考文首参考内容的第一个网址

// 运行cloudcore

~/kubeedge/cloudcore

// 运行edgecore

~/kubeedge/edgecore

// 验证是否安装成功,在云节点查看当前集群中有哪些节点

kubectl get node

NAME       STATUS   ROLES        AGE   VERSION
edgenode   Ready    agent,edge   46s   v1.17.1-kubeedge-v1.4.0-alpha.0.21+0be95b853ab879
kubeedge   Ready    master       17h   v1.17.5

至此,kubeedge安装成功!

五、测试kubectl logs

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/deployment.yaml

// 查看pod状态

kubectl get pod --all-namespaces -owide
NAMESPACE     NAME                                      READY    STATUS    RESTARTS     AGE    IP               NODE       
default        nginx-deployment-77698bff7d-wb8pt         1/1     Running     0          8h    172.17.0.3      edgenode                  
kube-system   calico-kube-controllers-5ddf645df5-c87jj   1/1     Running     1          39h   10.217.20.68    kubeedge          
kube-system   calico-node-kftsm                          1/1     Running     1          39h   192.168.17.60   edgenode         
kube-system   calico-node-vbttt                          1/1     Running     1          39h   192.168.17.50   kubeedge    
kube-system   coredns-5644d7b6d9-jvhd2                   1/1     Running     7          10d   10.217.20.66    kubeedge   
kube-system   coredns-5644d7b6d9-snrd4                   1/1     Running     7          10d   10.217.20.67    kubeedge    
kube-system   etcd-kubeedge                              1/1     Running     4          10d   192.168.17.50   kubeedge   
kube-system   kube-apiserver-kubeedge                    1/1     Running     6          10d   192.168.17.50   kubeedge   
kube-system   kube-controller-manager-kubeedge           1/1     Running     9          10d   192.168.17.50   kubeedge    
kube-system   kube-proxy-gbt7p                           1/1     Running     4          10d   192.168.17.50   kubeedge   
kube-system   kube-scheduler-kubeedge                    1/1     Running     9          10d   192.168.17.50   kubeedge  

// 查看边缘节点pod上的日志

kubectl logs nginx-deployment-77698bff7d-wb8pt

在这里插入图片描述

// 注:若安装且运行成功后无法logs边缘pod,可再执行一次输出端口重定向命令后尝试

iptables -t nat -A OUTPUT -p tcp  --dport 10350 -j DNAT --to cloudcoreIP:10003
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值