摘要:的设计初衷就是为了能让像树莓派一样的低资源计算平台更容易安装和维护。运行以下命令在上运行节点首先,我们需要为树莓派准备一些初始步骤。首先,使用以下命令来禁用然后,将以下文本附加到的第一行然后,树莓派。
城市的街道因为汽车数量的增长越来越繁忙,对于驾车一族而言,在热门区域寻找停车场更是无比头痛的事情。然而与此同时,其实也许很多办公楼、住宅楼、酒店和公共车库中仍有许多付费停车的资源未被充分利用。
ParkBee就是这样一家为城市提供智能停车解决方案的公司。ParkBee平台上显示着每位车主定位附近的可使用的停车场,停车价格、停车位的空余情况等都是实时更新。ParkBee“打开”了城市中的所有停车场,解决了停车难题,既节约车主时间,又帮助停车场最大限度创收。
ParkBee近期开始尝试在边缘位置进行容器部署。因为ParkBee的整体业务的一个重要部分就是大量的停车场,与ParkBee合作的停车场有6000多家,截至目前我们已服务于80万次停车服务。我们必须确保每一个停车场的容器都能按预期工作,因此部署包含业务逻辑的应用程序至关重要。
ParkBee目前使用Kops部署Kubernetes,公有云选择的是AWS。虽然这种方法适用于我们的基于云的服务,但对于我们的边缘部署而言,事情却并不是那么简单。我们的理想目标是:在ParkBee合作的每一个停车场上都有一个Kubernetes集群,集群中包含停车点位置的边缘Kubernetes节点以及AWS中的Kubernetes主节点。
半个月前,Rancher Labs发布了K3s——一个被认为是史上最轻量的Kubernetes发行版。K3s的设计初衷就是为了能让像树莓派一样的低资源计算平台更容易安装和维护Kubernetes。
本质上讲,K3s有望成为一个轻量级的、易于使用、只使用一个二进制文件的Kubernetes provisioner。K3s的发布公告里写到它的主要功能包括:
生产级Kubernetes:K3s是一个符合标准的、已获CNCF官方认证的Kubernetes发行版。
一个没有主机依赖的二进制文件:在任何设备上安装Kubernetes所需的一切都包含在这一个40MB的二进制文件当中,不需要像KuberSpray、KubeADM或者RKE这样的外部安装程序。只需要一个命令,用户就可以配置或者升级单节点K3s集群。
一条命令,向集群添加节点:若想向集群添加其他节点,管理员只需在新节点上运行一条命令,指向原始服务器,通过安全token传递即可。
自动生成证书:集群启动时,在Kubernetes主服务器和节点之间建立TLS所需的所有证书都会被自动创建,还会自动创建服务账号的加密密钥。
准备工作
在这篇文章中,我将使用K3s的第一个版本v0.1.0。如果你想要按照我的文章来尝试一样的操作,你需要准备:
Raspberry Pi 3 B+型号,带有闪存了Raspbian Stretch Lite 的microSD卡。
本地网络:为了方便起见,我将在家里使用自己的局域网。
在你的笔记本电脑本地安装的Vagrant:也可以使用Docker for Mac,不过本质上来说,K3s二进制文件还是为了Linux、arm64和armhf架构而构建的。
Vagrant
如果您正在使用Vagrant,则可以在test目录中使用以下内容创建一个Vagrantfile:
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANT_API = 2 Vagrant.configure(VAGRANT_API) do |config| config.vm.box = "bento/ubuntu-18.04" config.vm.box_check_update = false config.vm.network "forwarded_port", guest: 6443, host: 6443, host_ip: "0.0.0.0" config.vm.provider "virtualbox" do |vb| vb.cpus = 1 vb.gui = true vb.memory = "2048" vb.name = "k3s-master" end config.vm.provision :docker config.vm.provision "shell", inline: <<-SHELL sudo modprobe vxlan curl -sfL https://get.k3s.io | sh - hostnamectl set-hostname k3s-master SHELL end
至此,你将安装好了Docker以及K3s二进制文件。安装脚本也可以方便地将kubectl二进制文件符号链接到K3s,因为它是内置的。
防火墙
小提示:Raspberry Pi需要连接到LAN中的本地计算机。在macOS中,确保转到设置=>安全和隐私=>防火墙,然后单击“关闭 ”按钮。
对于Windows,您可以参考Lifewire关于在Windows中关闭防火墙的文章:
https://www.lifewire.com/how-...
运行K3s主节点
我们将先使用Vagrant机器作为K3s主节点; 一旦它开始正常工作,我们将尝试将Raspberry Pi连接到本地LAN上的K3s主节点。
与任何Vagrant机器一样,只需运行vagrant up,一切就开始启动了。Vagrant将运行K3s自动安装脚本,打开本地计算机上的6443端口,以便K3s节点加入,并创建稍后所需的连接令牌。
首先,验证主节点安装是否成功:
root@k3s-master:~# kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready4m51s v1.13.3-k3s.6
默认情况下,K3s安装脚本不会将k3s-master标记为主节点;但因为我们已经预先安装好了kubectl二进制文件,我们现在可以解决这个问题:
root@k3s-master:~# kubectl label node k3s-master kubernetes.io/role=master node/k3s-master labeled root@k3s-master:~# kubectl label node k3s-master node-role.kubernetes.io/master="" node/k3s-master labeled
K3s安装也不会污染NoSchedule的主节点。在此次测试中,我们希望确保Raspberry Pi能够接收测试部署,因此使用以下方法污染主节点:
root@k3s-master:~# kubectl taint nodes k3s-master node-role.kubernetes.io/master=effect:NoSchedule node/k3s-master tainted
接下来,我们需要token,来将K3s节点连接到新主节点。该k3s server命令应该已经为您创建了这个/var/lib/rancher/k3s/server/node-token。运行以下命令:
root@k3s-master:~# cat /var/lib/rancher/k3s/server/node-token
在Raspberry Pi上运行K3s节点
首先,我们需要为树莓派准备一些初始步骤。首先,使用以下命令来禁用swap:
dphys-swapfile swapoff && dphys-swapfile uninstall && update-rc.d dphys-swapfile remove
然后,将以下文本附加到/boot/cmdline.txt的第一行:
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
然后,reboot树莓派。返回时,重新登录,然后运行以下命令下载k3s二进制文件。
curl -fSL "https://github.com/rancher/k3s/releases/download/v0.1.0/k3s-armhf" -o /usr/local/bin/k3s && chmod +x /usr/local/bin/k3s
因为K3s已经不使用containerd了,因此我们无需安装Docker ,但最好还是验证一下是不是所有pod都在正常运行。通过运行以下命令可以快速安装Docker:
curl -fsSL https://get.docker.com | sh - && usermod -aG docker pi
获取从主服务器创建的token,并将其导出为环境变量:
export NODE_TOKEN=""
最后,运行k3s agent命令以启动代理程序,然后加入主节点。在我的这次使用中,192.168.0.10是我网络中本地笔记本电脑上运行的Vagrant机器的地址。记得务必使用适当的地址替换该值。
k3s agent --docker --server https://192.168.0.10:6443 --token ${NODE_TOKEN} > /root/logs.txt 2>&1 &
与K3s主节点类似,这次安装不会使用正确的节点标签标记Raspberry Pi。在k3s-master上,在Raspberry Pi加入集群后运行以下命令:
root@k3s-master:~# kubectl label node raspberrypi kubernetes.io/role=node node/raspberrypi labeled root@k3s-master:~# kubectl label node raspberrypi node-role.kubernetes.io/node="" node/raspberrypi labeled
如果Raspberry Pi成功加入,则在主服务器上运行该命令时应该会看到类似以下内容:
root@k3s-master:~# kubectl get nodes NAME STATUS ROLES AGE VERSION raspberrypi Ready node 2m v1.13.3-k3s.6 k3s-master Ready master 20m v1.13.3-k3s.6
部署一个测试NGINX容器
为了确保K3s集群能真正正常工作,我们可以部署一个测试NGINX pod和NodePort服务,以确保Raspberry Pi创建了pod,并成功打开了端口。
在K3s主Vagrant机器上,使用以下内容在/root/nginx-test.yaml上创建一个文件:
--- apiVersion: v1 kind: Service metadata: name: nginx-unprivileged-test namespace: default spec: type: NodePort selector: app: nginx-unprivileged-test ports: - protocol: TCP nodePort: 30123 port: 8080 name: http targetPort: 8080 --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-unprivileged-test namespace: default spec: replicas: 1 template: metadata: labels: app: nginx-unprivileged-test spec: containers: - image: nginxinc/nginx-unprivileged name: nginx-unprivileged-test ports: - containerPort: 8080 name: http livenessProbe: httpGet: path: / port: http initialDelaySeconds: 3 periodSeconds: 3
然后最终将其部署到集群:
root@k3s-master:~# kubectl apply -f /root/nginx-test.yaml service/nginx-unprivileged-test created deployment.extensions/nginx-unprivileged-test created
因为这是一项NodePort服务,K3s将在Raspberry Pi上打开一个端口30123。在我的本地网络上,Raspberry Pi位于192.168.0.43。
结 语
在我使用K3s的过程中注意到了一些事项,在此想要提醒:
在部署NGINX测试容器时,我最初使用了Docker Hub中的常规nginx:latest镜像。但是,似乎K3s还不支持低于1024的端口。在默认情况下,nginx镜像会尝试在容器内打开端口80,而这会导致一些问题。
本文中提到过,通常Kubernetes发行版中都包含label和taint,但K3s暂时没有完全实现这一点。
K3s将极大地促进Kubernetes在边缘计算场景的使用,对这一点我充分相信。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/32924.html
摘要:对于采取边缘计算的企业来说,制定全面战略的五个主要组成部分如下确定目标和要求,包括业务目标驱动因素以及品牌,客户和投资回报要求。 像大多数新的IT技术发展一样,边缘计算并不是一场革命,相反,它更像是一个进化。边缘计算的根源在于早期的内容交付和点对点网络以及网格计算。然而,随着网络,计算和分析技术能力的提高以及...
摘要:对于采取边缘计算的企业来说,制定全面战略的五个主要组成部分如下确定目标和要求,包括业务目标驱动因素以及品牌,客户和投资回报要求。 像大多数新的IT技术发展一样,边缘计算并不是一场革命,相反,它更像是一个进化。边缘计算的根源在于早期的内容交付和点对点网络以及网格计算。然而,随着网络,计算和分析技术能力的提高以及大规模数据增长的需求,意味着计算对于IT管理人员而言将变得越来越重要。 随着大量数据...
摘要:中国联通对边缘云的实践在国内运营商中比较领先。目前,中国联通在天津建成了全国最大的边缘云测试床,验证边缘云相关技术能力。自研平台是目前中国联通边缘云的重要任务。目前,中国联通平台已商用部署于天津宝坻上京顺园边缘机房。5G网路与云计算、大数据、虚拟增强现实、人工智能等技术的深入融合,将使万物实现互联,成为各行业数字化转型的关键基础设施。而uRLLC(超可靠低时延)作为5G三大应用场景之一,也使...
摘要:公司和谷歌公司也发布了类似的声明。持久性存储器英特尔公司最近宣布推出持久性存储器,它看起来像标准内存,但可以存储级数据,甚至可以在电源中断时保留数据。人们经常会看到一些科技行业炒作周期的兴衰,其中包括网络时代、云计算、大数据,以及最近的人工智能(AI)和区块链的出现。回顾过去,很明显这些重大变化中的每一个都是附加的,或者在某种程度上与之前发生的技术颠覆有关。例如,如果没有大数据,人工智能就不...
摘要:如今,无论是阿里云的驱动数字中国腾讯云的产业互联网,还是金山云的企业级市场,都指向了一片尚待开垦的沃土,即政企云化为主导的云计算下半场,此处我们略去不表产业发展,主要从技术应用演进的角度,来盘点年云计算市场现状,探讨未来技术发展态势。在2018年初,一位云计算从业者写下了这样一段话:2018年,最大的变局就是今年可能会成为中国IT产业全面变革的分水岭,基于云计算的全产业信息化在今年会正式拉开...
阅读 2572·2021-11-02 14:39
阅读 4298·2021-10-11 10:58
阅读 1388·2021-09-06 15:12
阅读 1802·2021-09-01 10:49
阅读 1292·2019-08-29 18:31
阅读 1859·2019-08-29 16:10
阅读 3298·2019-08-28 18:21
阅读 837·2019-08-26 10:42