一、解决了什么问题?
开发人员如何专注于代码编写,怎么让他们可以完全忽略k8s基础设施并且和以前在本地Run一个应用一样的体验。
从源码构建一个容器程序
二、解决方案
Introduction | Epinio docs
三、Epinio 的 Kubernetes 的应用程序开发引擎 by Rancher
话不多说,直接看Demo.
一、部署Epinio
1、前提
1、你有一个K8S集群。
2、你有一个默认的存储类以及默认的入口类。
3、Cert Manager
2、Helm
2、部署步骤
1、部署入口类
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update
helm upgrade --install nginx-ingress --namespace nginx-ingress nginx-stable/nginx-ingress \
--set controller.setAsDefaultIngress=true \
--create-namespace
2、部署存储类(local-path为例)
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
3、部署Cert Manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm upgrade --install cert-manager jetstack/cert-manager --namespace cert-manager \
--set installCRDs=true \
--set extraArgs={--enable-certificate-owner-ref=true} \
--create-namespace
4、部署Epinio
helm repo add epinio https://epinio.github.io/helm-charts
helm repo update
helm upgrade --install epinio epinio/epinio --namespace epinio --create-namespace \
--set global.domain=myepiniodomain.org
二、使用Epinio Cli工具
1、下载、安装以及测试
curl -o epinio -L https://github.com/epinio/epinio/releases/download/v1.11.0/epinio-linux-x86_64
mv epinio-linux-x86_64 epinio
chmod +x epinio
cp epinio /usr/bin
epinio version
2.使用Cli工具访问Epinio-api server
epinio login -u admin <Your domian>
后面的<Your domian> 是你部署Epino的域名哦,默认会加epinio前缀。
3.找到官网提供的测试php应用
git clone https://github.com/epinio/epinio.git
cd epinio/assets/
这个目录下就一个index.php的文件,demo就会使用这个文件直接从源代码Run一个容器来访问。
推送你的应用到Epinio来帮你保存和构建。
epinio push --name sample --path sample-app
*因为我们已经login了,就可以直接push到API server.(和Git非常类似)
*接着我们 --name 是应用到名称 app.name
*--path 为你存放源代码的目录位置
*默认的运行的pod会在创建的workplace.
4.执行推送和构建
*解释一下Routes 就是你部署这个应用默认会有一个访问URl的规则,为app.name+domain
例如 这个sample的部署的路由为 sample.
5.执行完毕后Epinio 发送了什么?
1.他会把你的选择的path进行压缩打包,格式为zip,tar等等,然后传送给epinio api server.
2.api server 会更新这个程序的状态并且把上传的压缩文件存储到自带安装到S3存储中。
3.上传完毕会S3 存储会通知 epinio api server 我存完毕了,并给出blobUID。
4.Epinio api server 拿到了这个blobUID,会创建一个job,这个job会下载存储在s3的源码,然后从base镜像开始沟通你的容器。
(基本逻辑就是这样哈,官网的太绕了。)
6.构建过程的日志
*这个日志是不是特别像你通过什么ide,vscode之类的工具编译代码的日志以及启动日志
*底层容器逻辑还是需要制作一个容器镜像,只是因为不同的语言依赖的环境不一样,而Epinio 做的好的一点就是他可以自动识别大部分主流高级开发语言,直接匹配base镜像。
7.构建完成展示
8.直接访问这个Routes地址镜像访问。
9.Demo演示完成,再来看看k8s的基础设施层面
1、首先在Epinio的system 命名空间
这个job就是帮助你下载,打包你应用镜像的主要pod.运行完毕就推出。
10.接着我们看实际运行我们应用的命名空间 worksplace.
*名称多了一个r ,是因为这是我写博客又做了一遍,他显示为rebuild的意思。
*看后面的后缀也就知道这是一个deployment.
*
*同时上面哪个比较难理解的Route,下面这图就非常容易理解了。
*没错,就是使用Route的默认规则帮你搞了一个ingress.
总结:
1、Epinio是一个非常非常好的项目。请大家支持。
2、它不仅支持CLI也支持UI。(明天更新UI)
3、支持大多数主流开发语言:(go,java,php等等)
4、直接让你的iaas平台变成paas.