手把手教您用 Docker Compose 将应用程序部署到 Kubernetes (附完整代码)
出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散
说在前面
在2017年 DockerCon 欧洲大会上, Wordsmith 作为一个演示项目呈现在众多观众面前。同时, Docker 公司也宣布将 Kubernetes 集成到 Docker 平台。今天,我将带大家一起用 Docker Compose 将应用程序部署到 Kubernetes ,文中所有的代码都可以点击文尾处“阅读原文”获取。
用于演示的应用程序跨三个容器运行,分别是:
-
db 容器 —— 用于存储“words”的数据库;
-
words 容器 —— 用于从数据库中读取“words”的 Java REST API ;
web 容器 —— 一个 Go web 应用程序,它用于调用 API 并将“words”构建成句子;
构 建
从源码到构建和运行这款应用程序唯一要用到的就是 Docker 。克隆这个镜像仓库,然后使用 Docker Compose 来构建全部镜像,如下所示:
cd k8s-wordsmith-demo
docker-compose build
注:或者,您可以使用 “docker-compose pull”命令从 Docker Hub 中下载预构建镜像。
部署到 Docker 应用栈
最新版本的 Docker for Mac 内置了 Kubernetes 。
Docker 允许您使用简单的 Docker Compose 文件格式将复杂的应用程序部署到 Kubernetes 。这意味着,您可以使用“docker-compose.yml”文件将 wordsmith 应用程序部署到本地的 Kubernetes 集群。
首先利用 docker 版本(Docker for Mac同时支持 Kubernetes 和 Docker Swarm 编排工具)来检查 Docker 是否将 Kubernetes 或 Docker Swarm 作为编排工具运行,输入以下命令:
docker version -f '{{ .Client.Orchestrator }}'
注:您可以使用 DOCKER_ORCHESTRATOR 环境变量来切换编排工具,将其设置为 kubernetes 或 swarm 。
使用 compose 文件将该应用程序部署到 Kubernetes 应用栈中,操作如下所示:
export DOCKER_ORCHESTRATOR=kubernetes
docker stack deploy wordsmith -c docker-compose.yml
Docker for Mac 包含了“kubectl”命令行,因此您可以直接使用 kubernetes 集群。检查该服务是否成功启动,你应该看到以下内容:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP None <none> 55555/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 38d
web LoadBalancer 10.107.215.211 <pending> 8080:30220/TCP 2m
words ClusterIP None <none> 55555/TCP 2m
检查 Pod 是否正在运行。您应该可以看到(如下所示)用于数据库和 web 组件的 Pod ,以及专门用于“words” API 的5个 Pod (在 compose 文件中,它被指定为副本计数) 。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
db-8678676c79-h2d99 1/1 Running 0 1m
web-5d6bfbbd8b-6zbl8 1/1 Running 0 1m
words-858f6678-6c8kk 1/1 Running 0 1m
words-858f6678-7bqbv 1/1 Running 0 1m
words-858f6678-fjdws 1/1 Running 0 1m
words-858f6678-rrr8c 1/1 Running 0 1m
words-858f6678-x9zqh 1/1 Running 0 1m
然后登录 http://localhost:8080 来查看该网站。每次刷新页面时,都会看到由 API 调用生成的不同语句。
使用 Kubernetes Manifest
进行部署
您可以使用 Kubernetes Manifest 将相同的应用程序部署到Kubernetes。这在 Kubernetes 部署、服务和 pod 规范方面描述了相同的应用程序。
首先删除 Kubernetes 应用栈,如下所示:
docker stack rm wordsmith
注:或者,您也可以让 Docker 应用栈继续运行,然后在新的 Kubernetes 命名空间 中创建第二个部署。
现在使用“kubectl”命令来应用 Kubernetes Manifest ,如下所示:
kubectl apply -f kube-deployment.yml
现在登录 http://localhost:8081,您将看到一个与 http://localhost:8080 相同的网站。
点击下列标题,阅读更多干货
如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!
点击下方“阅读全文”,获取代码!