Draft
Draft 是微软 Deis 团队开源(见 https://github.com/azure/draft)的容器应用开发辅助工具,它可以帮助开发人员简化容器应用程序的开发流程。
Draft 主要由三个命令组成
    draft init:初始化 docker registry 账号,并在 Kubernetes 集群中部署 draftd(负责镜像构建、将镜像推送到 docker registry 以及部署应用等)
    draft create:draft 根据 packs 检测应用的开发语言,并自动生成 Dockerfile 和 Kubernetes Helm Charts
    draft up:根据 Dockfile 构建镜像,并使用 Helm 将应用部署到 Kubernetes 集群(支持本地或远端集群)。同时,还会在本地启动一个 draft client,监控代码变化,并将更新过的代码推送给 draftd。

Draft 安装

由于 Draft 需要构建镜像并部署应用到 Kubernetes 集群,因而在安装 Draft 之前需要
    部署一个 Kubernetes 集群,部署方法可以参考 kubernetes 部署方法
    安装并初始化 helm(需要 v2.4.x 版本,并且不要忘记运行 helm init),具体步骤可以参考 helm 使用方法
    注册 docker registry 账号,比如 Docker HubQuay.io
    配置 Ingress Controller 并在 DNS 中设置通配符域 * 的 A 记录(如 *.draft.example.com)到 Ingress IP 地址。最简单的 Ingress Controller 创建方式是使用 helm:
1
# 部署 nginx ingress controller
2
$ helm install stable/nginx-ingress --namespace=kube-system --name=nginx-ingress
3
# 等待 ingress controller 配置完成,并记下外网 IP
4
$ kubectl --namespace kube-system get services -w nginx-ingress-nginx-ingress-controller
Copied!
minikube Ingress Controller
minikube 中配置和使用 Ingress Controller 的方法可以参考 这里
初始化好 Kubernetes 集群和 Helm 后,可以在 这里 下载 draft 二进制文件,并配置 draft
1
# 注意修改用户名、密码和邮件
2
$ token=$(echo '{"username":"feisky","password":"secret","email":"[email protected]"}' | base64)
3
# 注意修改 registry.org 和 basedomain
4
$ draft init --set registry.url=docker.io,registry.org=feisky,registry.authtoken=${token},basedomain=app.feisky.xyz
Copied!

Draft 入门

draft 源码中提供了很多应用的 示例,我们来看一下怎么用 draft 来简化 python 应用的开发流程。
1
$ git clone https://github.com/Azure/draft.git
2
$ cd draft/examples/python
3
$ ls
4
app.py requirements.txt
5
6
$ cat requirements.txt
7
flask
8
$ cat app.py
9
from flask import Flask
10
app = Flask(__name__)
11
12
@app.route('/')
13
def hello_world():
14
return "Hello, World!\n"
15
16
if __name__ == '__main__':
17
app.run(host='0.0.0.0', port=8080)
Copied!
Draft create 生成 Dockerfile 和 chart
1
$ draft create
2
--> Python app detected
3
--> Ready to sail
4
$ ls
5
Dockerfile app.py chart draft.toml requirements.txt
6
$ cat Dockerfile
7
FROM python:onbuild
8
EXPOSE 8080
9
ENTRYPOINT ["python"]
10
CMD ["app.py"]
11
$ cat draft.toml
12
[environments]
13
[environments.development]
14
name = "virulent-sheep"
15
namespace = "default"
16
watch = true
17
watch_delay = 2
Copied!
Draft Up 构建镜像并部署应用
1
$ draft up
2
--> Building Dockerfile
3
Step 1 : FROM python:onbuild
4
onbuild: Pulling from library/python
5
10a267c67f42: Pulling fs layer
6
....
7
Digest: sha256:5178d22192c2b8b4e1140a3bae9021ee0e808d754b4310014745c11f03fcc61b
8
Status: Downloaded newer image for python:onbuild
9
# Executing 3 build triggers...
10
Step 1 : COPY requirements.txt /usr/src/app/
11
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
12
....
13
Successfully built f742caba47ed
14
--> Pushing docker.io/feisky/virulent-sheep:de7e97d0d889b4cdb81ae4b972097d759c59e06e
15
....
16
de7e97d0d889b4cdb81ae4b972097d759c59e06e: digest: sha256:7ee10c1a56ced4f854e7934c9d4a1722d331d7e9bf8130c1a01d6adf7aed6238 size: 2840
17
--> Deploying to Kubernetes
18
Release "virulent-sheep" does not exist. Installing it now.
19
--> Status: DEPLOYED
20
--> Notes:
21
22
http://virulent-sheep.app.feisky.xyzto access your application
23
24
Watching local files for changes...
Copied!
打开一个新的 shell,就可以通过子域名来访问应用了
1
$ curl virulent-sheep.app.feisky.xyz
2
Hello, World!
Copied!
最近更新 1mo ago
复制链接