Kubernetes入门之微服务实践
微服务是最近几年非常流行的平台架构方案。微服务将项目拆分成多个小而全的工程,工程之间通过http
或tcp
交互自己的数据。微服务的部署一直都是一个棘手的问题,由于docker
, kubernetes
的兴起,让我们管理部署微服务更加简单。
可以通过gitlab + docker + harbor + drone + kubernetes打造公司项目一键管理发布,扩容,下架。
这篇文章会讲解如何从零开始部署一个项目到kubernetes
,你需要了解一些kubernetes
, Docker
的基础知识,比如Deployment
、Pods
、Service
、Ingress
和Dockerfile
等一些知识点。你可以通过这篇文章来学习下。
一个微小的服务
通过编写一个简单程序来作为我们的第一个微服务。使golang
的echo架构编写几个简单的http
接口。
我将使用go
的1.12版本,为工程初化一个mod
。
Note: 如果你想使用go mod功能,你需要将你的go升级到1.11以上.
接口实现
示例中实现了三个接口,监听本地端口1323
。
- 一个将输出
Hello, World!
- 随机输出一段长度等于10的字符串
- 输出一段html表格(内容读取本地文件)
完成代码之后,执行下go mod vendor
,将代码依赖下载到vendor
目录中。
编译测试
代码完成后,可以编译测试下接口。
测试下面三个地址:
打包镜像
打包镜像需要自己有hub.docker.com
的账号,下载Docker
客户端登录其账号。在代码根目录新建Dockerfile
文件,它是描述镜像构建流程的文本文件,编写一些特定的组合指令来完成。
你可以通过这篇文章来了解怎么编写Dockerfile
文件。
上面就是整个Dockerfile
的完整内容。
构建镜像
通过docker build
命令可以构建一个完整的镜像,之后通过docker run
命令运行docker
镜像。
在docker
环境运行镜像。将本地1323
端口转发到容器中的1323
端口。
现在又可以访问测试地址,只是这次程序布署在docker
环境中而不是本地。
推送镜像
在kubernetes
中创建Deployment
是需要镜像名称的,我们需要把自己的镜像推送到docker
镜像仓库中。
为镜像打上tag
指定远程境像名称,使用docker push
推送镜像。
推送完成之后可以查看hub.docker.com
自己的repository
。本境像的地址https://cloud.docker.com/repository/docker/mfkgdyve/k8s-microservice
部署
部署到kubernetes
之前我们需要创建对应的Deployment
、Service
、Ingress
对象的配置文件。
- Deployment
通过kubectl apply
创建部署:
创建建之后需要等待一段时间,从配置文件(replicas: 3
)可以看到我们创建了三个副本(Pods
)。
可以通过kubectl get deployment echo-demo-deployment
或者kubectl describe deployment echo-demo-deployment
查看Deployment
的情况。
- Service
以标签为app=echo-demo
的Pod
的TCP端口1323为目标对名为”echo-demo-service”的Endpoint对象进行POST更新。
通过kubectl apply
创建服务:
通过kubectl get service
查看服务:
- Ingress
指host为echo.demo
的请求访问到服务名echo-demo-service
上面。
通过kubectl apply
创建Ingress:
查看Ingress
:
现在只需要把echo.demo
绑定到集成ip就行了。我这里是本地集群环境使用minikube ip
来获得ip。
修改/etc/hosts
文件将域名绑定到ip
上。
整个部署过程已经完成,如果你想增加Pods
你只需要加大(replicas: 3)
配置就行了。可以将整个流程部署在公司内网实现一键发布,扩容,下架。
文章就到此为止了,如果你什么问题你可以在正文留言反馈。