云原生开发环境初探

在上一篇“云原生的不同解释及正确含义”里,我们讲到了云原生的引申含义,就是开发环境也是云环境,这样就能保证开发环境和生产环境的一致性,使最终的部署顺利进行。本文就通过具体的例子来探讨云原生的开发环境。开发流程主要包括编写代码,程序部署和调试几个环节。每一个环节都需要相应的工具来帮助你提高效率。下面我们就来看一下如何搭建开发的云环境以及那些工具能帮你在云环境里提高开发效率。

开发IDE

以前的IDE只支持应用程序的开发,但云原生需要同时进行开发环境(容器)的开发,理想的情况是一个IDE能同时支持两者。我用的是Go语言,选择的IDE是Goland(也就是IDEA IntelliJ),它本身是支持k8s的,你只要下载一个插件就行。它支持k8s的自动完成(Auto-complete)等功能。如下图所示,这样你就拥有了同时支持应用程序和k8s的IDE。

file

但我不得不说它对k8s的支持很初级,它不能理解k8s对象之间的内在联系。另外,k8s配置文件对格式要求很严,如果空格不对,或格式没有对齐,在部署时会报错。Goland有检查格式的功能,出了问题会报错,但并不是每个错误它都能发现。也就是说当它没有报错时也不能肯定格式就是对的。这已经发生好几次了,IDE没有报错,但部署时有问题。

关于IntelliJ对k8s的支持功能,请参见IntelliJ IDEA 2018.1: Kubernetes support

环境搭建

调式k8s是在Minikube上进行的,而Minikube是安装在Linux虚机上的。这就需要开发环境的宿主机和虚机之间能够共享文件,这样才能方便调试。我的开发环境是Windows,然后在Windows上装了VirtualBox虚拟机,另外还安装了Vagrant(它是管理虚拟机的一个软件)作为界面来管理VirtualBox。

程序共享

我的Go应用程序是在Windows上的“C:codesrcgithub.comjfeng45k8sdemo”目录下,通过Vagrant可以把宿主机的目录挂载到虚机上,这样每次在IDE上修改了k8s的配置文件,在虚机上可以直接取到,不需要另外同步。

在Vagrant中的配置是这样的:

config.vm.synced_folder "C:/code/src/github.com/jfeng45", "/home/vagrant/jfeng45", id: "jfeng45"
网络共享

就是实现宿主机(笔记本)和虚机之间的互相访问,主要是从宿主机访问虚机。我用的是Vagrant, 因此要在Vagran的配置文件(Vagrantfile)里进行配置。网络的配置有不同方式,我配置的是私有网络,这是一种很灵活的方式。它的配置方法是给宿主机和虚机各自设定一个固定的IP地址,这样可以双向互访。

Vagrant的配置命令:

“config.vm.network “private_network”, ip: "192.168.50.4”

数据库共享

在配置k8s时,一般会把数据库设置成一个服务。如果能在宿主机上访问k8s数据库,就能提前测试数据库,尽早发现数据库的问题。一旦把虚机和宿主机之间的网络联通了,是可以从宿主机直接访问数据库。

有关环境配置的详情,详情请参阅“通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷”.

开发流程

开发流程通常是这样的。你先在本地的IDE上编写代码(包括应用程序和k8s代码),代码是存储在本地硬盘上的。完成之后,你进入虚机环境,部署k8s集群和应用程序代码,再在k8s集群上运行代码,测试结果。如此反复循环。

流程示例

我们通过一个例子来讲解流程。在本地编写完代码之后,就要调试k8s程序。先用Vagrant启动虚机,然后启动Minikube:

sudo minikube start
程序结构

file

上面是程序的目录结构。“cmd”目录里是主程序,“config”目录是负责程序配置的,“dataservice”是数据访问层,“model”是域模型层,“logs”目录是存储日志的。“script”包含了所有与程序部署相关的文件。其中“database”里面是数据库脚本,“kubernetes”是k8s的所有配置文件,一回儿还会详细讲解。

file

上面就是k8s的配置文件目录结构,最外面有两个文件“k8sdemo-config.yaml”和"k8sdemo-secret.yaml"是共享文件,因此放在最外层。里面主要有两个子目录“backend”和“database”分别存后端程序和数据库的配置文件。内部的结构是类似的,都有三个“yaml”文件,“backend-deployment.yaml”是部署配置文件, "backend-service.yaml"是服务配置文件, "backend-volume.yaml"是持久卷配置文件. ".sh"是k8s命令,用来创建k8s对象。“backend”目录还多了一个“docker”子目录用来存储backend应用的Docker镜像,database的镜像文件是直接从Docker的库中取得,因此不需要另外生成镜像文件。

关于k8s的核心概念,请参阅“通过实例快速掌握k8s(Kubernetes)核心概念”.

部署和调试应用程序及k8s

我们的程序有两个服务“k8sdemo-database-service”和“k8sdemo-backend-service”,先要部署“k8sdemo-database-service”,因为它不依赖于其它服务。不过还有些对象是共享的需要先进行调试。有一点需要注意的是由于k8s对象之间是有依赖关系的,在你创建时是需要按照顺序来创建。顺序的部署次序是这样的Secret->ConfigMap->Volume->Deployment->Service。

部署共享对象:

cd /
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值