Kubernetes 草案 - 原型设计工具

导航至

概述

Draft for Kubernetes Draft for Kubernetes 是一个工具,用于帮助原型设计微服务并将其公开在公共可用的域上。这使得快速迭代诸如 Webhook 或 API 之类的东西变得快速而轻松。Draft 利用 Docker,HelmKubernetes Ingress Controllers 使您的“草案”能够快速公开可用。在底层,它为您的应用程序生成通用的 Dockerfile 和 Helm Chart,以使您快速启动并运行。Helm Chart 创建一个 Ingress 资源以在 URL 上公开您的 Chart。您将需要运行以下内容才能完成本演练

  1. Kubernetes 集群
  2. 您可以向其添加 A 或 CNAME 记录的域名
  3. quay.io 或 hub.docker 的帐户
  4. 可用的 Helm 安装
    • 安装说明可以在 这里找到。
  5. golang 开发环境
    • Draft 还支持基本的 Python、Ruby、PHP、Node 和 Java 应用程序。

在本演练中,我们将首先安装 Draft 的依赖项,然后创建我们的示例应用程序,安装 Draft 并部署我们的应用程序。

安装 Draft 依赖项

Ingress Controller 创建一个带有公共 IP(或 AWS 上的 CNAME 记录)的 loadBalancer,以将您的应用程序公开到互联网。它是将流量路由到集群上运行的应用程序的快速而安全的抽象。要安装 Ingress Controller,请使用 Helm 提供的 Nginx Ingress

# Install Ingress Controller
$ helm install stable/nginx-ingress --namespace=kube-system --name=nginx-ingress
# Wait for load balancer to have IP
$ kubectl --namespace kube-system get services -w nginx-ingress-nginx-ingress-controller

# If you have an existing ingress controller find its IP 
echo $(kubectl get svc --namespace kube-system nginx-ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

获得 IP 或 CNAME 后,您可以创建适当的 DNS 记录。将其设置为类似 *.draft.mydomain.mytld 的内容。执行此操作的步骤将因您的域名注册位置而异。我使用 What’s My DNS 来检查传播。一旦您看到更改已传播,您应该从 curl 获得以下响应

$ curl foo.draft.mydomain.mytld
default backend - 404
注意:如果您想了解有关默认后端的更多信息,我发现 这篇文章 非常精彩。

准备 Golang 应用程序

创建一个新的项目目录并创建一个 Golang 应用程序。我使用了一个简单的服务器

// main.go
 package main

import (
  "log"
  "net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
  message := "hello world\n"
  w.Write([]byte(message))
}

func main() {
  http.HandleFunc("/", sayHello)
  err := http.ListenAndServe(":8080", nil)
  if err != nil {
    log.Fatal("ListenAndServe: ", err)
  }
}

您还需要为您的应用程序添加某种类型的依赖项管理。这是因为 Draft 用于检测不同应用程序类型的脚本。golang 包会查看您的项目中是否存在 glide.yamlGodeps/Godeps.jsonvendor/vendor.json 文件。如果您正在使用 glide,则简单的 glide create 将满足此要求。

安装 Draft

下载适用于您操作系统的 draft 二进制文件,并将其移动到您的路径中。之后,您将需要运行带有某些参数的 draft init

draft init --set
 registry.url=docker.io,
 registry.org=mydockerorg,
 registry.authtoken=$(echo '{"username":"myDockerUsername","password":"myDockerPassword","email":"[email protected]"}' | base64),
 basedomain=mydomain.mytld
注意:请确保在一行上运行上述命令,并且不同的 key=value 对之间没有空格!另外,我在 使 Google Container Registry 工作 方面遇到了一些麻烦,但它似乎是受支持的。

这会在您的 kube-system 命名空间中启动 draftd 部署和一些 draft Pod。这些有助于管理与 Docker 镜像仓库的连接。

部署您的应用程序!

呼!那是大量的设置!现在完成之后,是时候使用 Draft 了!要运行的第一个命令是 draft create。这将搭建您的 Helm Chart (/chart) 和 /Dockerfile。它还将创建一个 draft.toml,您可以使用它来控制应用程序的不同环境以及它在集群中的安装位置。要为您的应用程序命名(默认名称也可以!),请编辑 draft.toml

[environments]
  [environments.development]
    name = "cool-beans"
    namespace = "draft"
    watch = true
    watch_delay = 2

然后运行 draft up 并观看奇迹发生

$ draft up
 --> Building Dockerfile
 Step 1 : FROM golang:onbuild
 # Executing 3 build triggers...
 Step 1 : COPY . /go/src/app
 Step 1 : RUN go-wrapper download
 ---> Running in 825771ecaf59
 ...
 # Some docker output...
 ...
 --> Deploying to Kubernetes
 --> Status: DEPLOYED
 --> Notes:
http://cool-beans.mydomain.mytld to access your application

Watching local files for changes...

这将构建您的 Docker 镜像,将您的 Docker 镜像推送到 {{ .environments.development.name }} 仓库下的配置容器注册表,并在 repo 的根目录上运行 helm install 在预配置的 Helm Chart 上!所有资源启动并运行以及 Ingress 注册您的新应用程序可能需要一秒钟,但是您将能够在该地址 curl 您的应用程序

$ curl http://cool-beans.mydomain.mytld
 hello world

但是,要看到真正的魔力,请对您的应用程序进行更改

// main.go

func sayHello(w http.ResponseWriter, r *http.Request) {
  message := "I don't know Margo...\n"
  w.Write([]byte(message))
}

Draft 将重建您的镜像,并通过 helm upgrade 将这些更改实时推送

$ curl http://cool-beans.mydomain.mytld
 I don't know Margo...

现在,连接数据源或执行更高级的操作只需编辑处理程序即可!