KubeEdge 超详细部署记录&问题记载6.28
KubeEdge 部署记录(2020.4.13)需要组件云端:kubernetes V1.16, kubectl, kubelet, kubeadm, docker, gcc, make, golang, keadm边端:golang 1.16, docker 19.03, keadmV1.16PS:Kubeedge安装最重要的是各组件版本必须相互对应,或者采用低版本,很多问题都是因为版本不对造成
KubeEdge 部署记录(2020.4.13)
需要组件
云端:kubernetes V1.16, kubectl, kubelet, kubeadm, docker, gcc, make, golang, keadm
边端:golang 1.16, docker 19.03, keadmV1.16
PS:Kubeedge安装最重要的是各组件版本必须相互对应,或者采用低版本,很多问题都是因为版本不对造成的
kubernetes 部署(必须)
关闭防火墙和自启动
sudo systemctl stop ufw
sudo systemctl disable ufw
禁用SELinux
编辑文件/etc/selinux/config,将SELINUX修改为disabled,如下:
官网1.3 上说这样能关,但是我的系统上没有这个文件,我就没管它,后面好像也没报错
关闭系统Swap
在 /etc/fstab 中将swap那一行注释掉
sed -i 's/.*swap.*/#&/' /etc/fstab
sudo swapoff -a
通过free -m 看到swap的确被关闭了
安装docker(docker版本一定要对齐!)
卸载旧版本
sudo apt-get remove docker docker-engine docker.io
安装相关软件
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
curl gnupg-agent software-properties-common
增加软件源GPG密钥
增加软件源GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add
添加软件源(unbuntu 是amd、树莓派是arm)
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
安装
安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker换源阿里云
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
sudo reboot
cloud节点部署k8s
由于kubeedge是基于kubernetes组件的,所以在云端部署上,kubenertes是必须的;
安装kubeadm、kubeadm、kubectl
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
配置内核参数
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
在准备工作全部完成后,就可以在主节点上使用kubeadm init命令,不过这里还要加三个参数,–image-repository指定了阿里云镜像,–pod-network-cidr指明pod网络可以使用的IP地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配CIDRs,–kubernetes-version指明k8s的版本:
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5
Q1:这里当时我改动了hostname 结果造成了整个yaml文件都错误了,花了2个小时愣是没弄明白怎么回事,最后用了kubeadm reset,因为他整个配置都是写在yaml文件里的,所以hostname的改动就会影响到配置问题!
Q2:第二个出现的问题是kubectl一直都处在6443端口占用且IP地址不对其的情况,这是因为 kubernetes创建以后,$HOME/.kube 这个文件里的config文件配置不正确,而且会一直影响,哪怕你卸载重装kubectl都没用!
解决办法:
kubeadm join 192.168.14.138:6443 --token scrncy.jyjcdkki0d0n6nun --discovery-token-ca-cert-hash sha256:1d48ef921c67522537b4c9c31dc8281308d7454ad3d8cbbffcbc9e2dabbfd652
配置完成以后一定要执行脚本文件~
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这样可以主动覆盖之前没改动过的cinfig文件(因为之前kubeadm reset的时候所有配置都变动了)
配置Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看
kubectl get nodes
kubectl get pods --all-namespaces
创建POD验证
kubeedge Cloud端部署
安装golang(左栏跳转)
wget https://golang.google.cn/dl/go1.15.6.linux-amd64.tar.gz
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
安装make,gcc
sudo apt-get install make gcc
如果报错显示
Depends: *** (= 4:9.3.0-1ubuntu2) but 4:10.2.0-1ubuntu1 is to be installed
可以尝试通过 sudo apt purge *** 然后重新安装
如果sudo apt purge ***不被允许,可以尝试将ubuntu换回原来的国外源,重新安装
下载源码
git clone https://gitee.com/ly10208/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
编译keadm
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=keadm
#若make报错没有权限可以考虑 在前面加上sudo
创建cloud节点
./_output/local/bin/keadm init
If 无法连接网络可以添加一段:
wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha1_device.yaml
wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/router/router_v1_rule.yaml
wget -k --no-check-certificate --progress=bar:force https://github.com/kubeedge/kubeedge/releases/download/v1.6.1/kubeedge-v1.6.1-linux-amd64.tar.gz
wget https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.6/build/tools/edgecore.service
然后就可以下载了
查看cloudcore状态
/var/log/kubeedge/cloudcore.log 查看运行情况
运行正常即可
获取token
./_output/local/bin/keadm gettoken
#输出
13b4a17d7f1d66c50bc5367d03c0faa948aa862f032745f1f50ba6aeacb06907.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzMjc4NzZ9.e7Wcst1k0CrTinv7hO84bN2J3QIOQGz-PdMzvpW0bh0
kubeedge Edge端部署
安装golang(左栏跳转到下面)
下载 https://golang.google.cn/dl/go1.15.6.linux-armd64.tar.gz 并上传到树莓派上,注意树莓派是arm架构的cpu,需要下载arm版本的压缩包
安装 make、gcc
一模一
部署edgecore
下载源码,并编译
同上
创建edge节点
cd $GOPATH/src/github.com/kubeedge/kubeedge
./_output/local/bin/keadm join --cloudcore-ipport="192.168.14.138:10000" --token=13b4a17d7f1d66c50bc5367d03c0faa948aa862f032745f1f50ba6aeacb06907.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjEzMjc4NzZ9.e7Wcst1k0CrTinv7hO84bN2J3QIOQGz-PdMzvpW0bh0
查看边缘节点运行记录
systemctl status edgecore
查看运行情况
journalctl -u edgecore -n 100
查看日志
journalctl -u edgecore.service -b
至此edge node节点已经成功加入
其他问题
-IP虚拟机地址漂移问题
背景信息:
在Vmware中安装Ubuntu后(NAT方式),使用期间,IP地址会无规则变化(末位加1或减1),导致Xshell连接总是需要重新配置,为此将IP配置为固定IP,使该问题得到解决。
windows
1.ipconfig
记住自己的gateway地址,很重要
2.windows 的网络连接,选择
- 【属性】-【IPv4】-【使用下面的IP地址】
VMware workstation Pro
4.【编辑】-【虚拟网络编辑器】
5.【DHCP设置】
IP范围192.168.63.128-192.168.63.254
6.【NAT设置】
【DNS设置】
7.终端
sudo vi /etc/network/interfaces
auto ens33
iface ens33 inet static
address 192.168.14.138
netmask 255.255.255.0
gateway 192.168.14.2
dns-nameserver 114.114.114.114 202.96.128.143
sudo vi /etc/resolv.conf
nameserver 114.114.114.114
nameserver 202.96.128.143
IP范围192.168.63.128-192.168.63.254;网关为上图中的;nameserver为上图中的
/etc/init.d/networking restart
8.ping www.baidu.com
–IP方案2
ubuntu 20.04 设置静态ip方法
2. 确认你要修改的网卡号
先确认你要修改的网卡号,假设你的服务器有多张网卡:
ubuntu2004:~$ ip addr
我的服务器配置如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN ``group` `default` `qlen 1000``link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00``inet 127.0.0.1/8 scope host lo``valid_lft forever preferred_lft forever``inet6 ::1/128 scope host``valid_lft forever preferred_lft forever``2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP ``group` `default` `qlen 1000``link/ether 00:0c:29:f1:b5:e1 brd ff:ff:ff:ff:ff:ff``inet 172.16.87.140/24 brd 172.16.87.255 scope global dynamic ens33``valid_lft 1500sec preferred_lft 1500sec``inet6 fe80::20c:29ff:fef1:b5e1/64 scope link``valid_lft forever preferred_lft forever
3. 默认的网卡配置文件
默认情况下,网络使用DHCP
ubuntu1804:~$ cat /etc/netplan/50-cloud-init.yaml``配置文件内容如下` `network:`` ``ethernets:`` ``ens33:`` ``dhcp4: yes`` ``addresses: []` ` ``version: 2
4. ubuntu20.04设置静态IP
需要把配置文件修改为以下内容:
ubuntu1804:~$ sudo vi /etc/netplan/50-cloud-init.yaml
假设IP地址修改为192.168.1.100,子网掩码24位即255.255.255.0,网关设置为192.168.1.1,DNS1:223.5.5.5,DNS2:223.6.6.6
network:`` ``ethernets:`` ``ens33:`` ``dhcp4: no`` ``addresses: [192.168.1.100/24]`` ``optional: ``true`` ``gateway4: 192.168.1.1`` ``nameservers:`` ``addresses: [223.5.5.5,223.6.6.6]` ` ``version: 2
5. 应用新配置
ubuntu1804:~$ sudo netplan apply
使用ip addr
检查新地址
ubuntu2004:~$ ip addr
6. 测试网络连通性
ubuntu1804:~$ ping 192.168.1.100
-Golang 安装
安装
首先,可以直接用命令行来安装最新版本的go:
apt install golang
apt-get install golang-go
这样安装版本可能过低。
go version
查看版本为 1.6.2。
apt-get 卸载此版本重新安装
重新安装
-
- 去官网查看最新版链接 https://studygolang.com/dl
比如我要下的是 https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz
- 去官网查看最新版链接 https://studygolang.com/dl
-
- 下载
wget https://studygolang.com/dl/golang/go1.16.3.linux-amd64.tar.gz
- 下载
-
- 解压缩
tar -zxvf go1.11.linux-amd64.tar.gz -C /usr/lib
- 解压缩
-
- 设置添加环境变量
vi /etc/profile
在最后面添加如下配置
- 设置添加环境变量
export GOPATH=/opt/gopath
export GOROOT=/usr/lib/go
export GOARCH=386
export GOOS=linux
export GOTOOLS=$GOROOT/pkg/tool
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
-
- 执行
source /etc/profile
- 执行
-
- 查看版本
go version
结果go version go1.11 linux/amd64
- 查看版本
测试
配置完后,测试能够正常编译go文件,首先创建helloworld包和对应go源文件:
$ mkdir -p go/src/helloworld
$ cd go/src/helloworld
$ touch helloworld.go
向源文件写入代码:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
之后开始编译:
$ cd $HOME/go/src/helloworld
$ go build
此时可能会出现权限报错can’t load package:…permission denied
需要为目录添加权限:
chmod 755 -R $HOME/go
编译通过后会生成对应可执行文件
$ cd $HOME/go/src/helloworld
$ go build
$ ls
helloworld helloworld.go
$ ./helloworld
hello, world
编译通过能够正常打印。
-安装指定docker版本
卸载docker旧版本
$ sudo apt-get remove docker docker-engine docker-ce docker.io
$ sudo apt-get update
安装包以使得apt可以通过HTTP使用存储库
田间Docker官方的GPC密钥
$ sudo apt-get install -y apt-transport-
使用下面的命令来设置stable存储库:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"https ca-certificates curl software-properties-common
再更新一下apt包索引:
$ sudo apt-get update
安装最新版本的Docker CE:
$ sudo apt-get install -y docker-ce
在生产系统上,可能会需要应该安装一个特定版本的Docker CE,而不是总是使用最新版本:
列出可用的版本:
$ apt-cache madison docker-ce
选择要安装的特定版本,第二列是版本字符串,第三列是存储库名称,它指示包来自哪个存储库,以及扩展它的稳定性级别。要安装一个特定的版本,将版本字符串附加到包名中,并通过等号(=)分隔它们:
$ sudo apt-get install docker-ce=<VERSION>
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce=18.03.1~ce-0~ubuntu
验证docker
若未启动,则启动docker服务:
$ sudo systemctl start docker
经典的hello world:
$ sudo docker run hello-world
5、docker命令使用
1 docker查看信息#docker info
2 docker查看镜像# docker images
3 docker 列出run的容器:#docker ps -a
4 pull docker镜像:#docker pull xxxxx
5 运行docker 容器
docker run xxxxx
docker run -p 8080:80 --name 自定义名称 -it 镜像名称 /bin/bash
6 退出docker 容器但不停止运行:Ctrl+P+Q
7 停止docker 容器运行:#docker stop CONTAINERID
8 删除docker 容器#docker rm CONTAINERID
9 删除docker镜像:#docker rmi imageID
10 启动docker容器:#docker start CONTAINERID
-ubuntu下修改IP地址
1、打开文件
sudo vim /etc/network/interfaces
注释auto lo和iface lo inet loopback两段代码添加以下代码
auto ens33
iface ens33 inet static
address 192.168.1.244 #ip地址
netmask 255.255.255.0 #子网掩码
gateway 192.168.1.1 #网关
dns-nameserver 114.114.114.114 #dns服务器
:wq保存退出
2、重启网络:sudo /etc/init.d/networking restart
-显示当前主机名(hostname)
要查看当前主机名(hostname),请在hostnamectl
不使用任何参数的情况下调用命令:
hostnamectl
在此示例中,当前主机名(hostname)设置为ubuntu2004.localdomain
。
更改系统主机名(hostname)
更改系统主机名(hostname)是一个简单的过程。语法如下:
sudo hostnamectl set-hostname host.example.com
sudo hostnamectl set-hostname "Your Pretty HostName" --pretty
sudo hostnamectl set-hostname host.example.com --static
sudo hostnamectl set-hostname host.example.com --transient
例如,要将系统静态主机名(hostname)更改为www.iplayio.cn
,可以使用以下命令:
sudo hostnamectl set-hostname www.iplayio.cn
您也可以选择设置漂亮的主机名(hostname):
sudo hostnamectl set-hostname "IPlayIO's laptop" --pretty
hostnamectl
不产生输出。成功时,返回0,否则返回非零失败代码。
静态主机名(hostname)存储在中/etc/hostname
,漂亮主机名(hostname)存储在/etc/machine-info
file中。
您不应该在同一网络中的两台不同计算机上使用相同的主机名(hostname)。
在大多数系统上,主机名(hostname)映射到127.0.0.1
中/etc/hosts
。打开文件,将旧的主机名(hostname)更改为新的主机名(hostname)。
127.0.0.1 localhost
127.0.0.1 www.iplayio.cn
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
如果在云实例上运行Ubuntu,并且cloud-init
已安装软件包,则还需要编辑该/etc/cloud/cloud.cfg
文件。通常,该软件包通常默认安装在云提供商提供的映像中,并且用于处理云实例的初始化。
如果系统上存在该文件,请打开它:
sudo nano /etc/cloud/cloud.cfg
搜索preserve_hostname
,并将值从更改false
为true
:
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true
保存文件并关闭编辑器。
-验证更改
要验证主机名(hostname)是否已完全更改,请输入以下hostnamectl
命令:
hostnamectl
您的新主机名(hostname)将显示在终端上:
Static hostname: www.iplayio.cn
Pretty hostname: IPlayIO's desktop
Icon name: computer-vm
Chassis: vm
Machine ID: a04e3543f3da460294926b7c41e87a0d
Boot ID: aa31b274703440dfb622ef2bd84c52cb
Virtualization: oracle
Operating System: Ubuntu 20.04 LTS
Kernel: Linux 5.4.0-26-generic
Architecture: x86-64
结论
我们已向您展示了如何在Ubuntu 20.04安装上轻松更改主机名(hostname)而不重启机器。
有多种原因可能导致您需要更改主机名(hostname)。最常见的是在创建实例后自动设置主机名(hostname)的情况
-解决get不到集群的方法
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-过期tokkent重新获得指令
当你的token忘了或者过期,解决办法如下:
1.先获取token
#如果过期可先执行此命令
kubeadm token create #重新生成token
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
2.获取CA公钥的哈希值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
3.从节点加入集群
kubeadm join 192.168.40.8:6443 --token token填这里 --discovery-token-ca-cert-hash sha256:哈希值填这里
-向Kubernetes集群添加/移除Node
-
Minion Node操作前准备
#关闭防火墙 systemctl stop firewalld #禁止防火墙开机启动 systemctl disable firewalld #检查selinux getenforce Disabled #端口检查 #关闭防火墙 systemctl disable firewalld systemctl stop firewalld systemctl status firewalld
-
Kubernetes集群中添加Node
在kubeadm init初始化操作完成时,系统最后给出了将节点加入集群的命令:
kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e655641573b2ee51c 77a212f194e20a307cb459e5f77c8
说明:这条命令一定保存好,因为后期没法重现的!!
在swarm1(Minion Node)上操作:kubeadm join 10.0.0.39:6443 --token 4g0p8w.w5p29ukwvitim2ti --discovery-token-ca-cert-hash sha256:21d0adbfcb409dca97e655641573b2ee51c 77a212f194e20a307cb459e5f77c8
在swarm2(Master)上操作:
kubectl get nodes NAME STATUS ROLES AGE VERSION swarm1 Ready <none> 3h v1.10.0 swarm2 Ready master 3h v1.10.0
swarm1加入集群很是顺利!
-
Kubernetes集群中移除Node
在master节点上执行:
kubectl drain edge1 --delete-local-data --force --ignore-daemonsets kubectl delete node edge1
在node2上执行:
kubeadm reset
-
添加Node出现的问题
#Minion Node一直处于notReady状态,如:kubectl get nodes NAME STATUS ROLES AGE VERSION swarm1 NotReady <none> 3h v1.10.0 swarm2 Ready master 3h v1.10.0
#原因
(1)启动kubelet的时候,会pull以下两个镜像(gcr.io/**),因为天朝网络一般翻不了墙,不能成功pull,所以要自己找到这两个docker镜像。点击images自行下载使用!k8s.gcr.io/kube-proxy-amd64 v1.10.0 6e6237849607 3 weeks ago 97.1 MB k8s.gcr.io/pause-amd64 3.1 da86e6ba6ca1 4 months ago 742 kB
(2)使用Kubeadm工具搭建的Kubernetes集群,已经默认集成了安全策略,所以要将Master Node节点/etc/kubernetes/pki下的所有文件复制到Minion Node相同目录下一份。所以在Master Node上执行:
scp /etc/kubernetes/pki/* root@{minion-ip}:/etc/kubernetes/pki
更多推荐
所有评论(0)