《kubernetes官方文档》部署PHP redis 应用Guestbook
本教程向您展示如何使用Kubernetes和Docker构建和部署一个简单的多层web应用程序。这个示例由以下组件组成:
目标
- 启动 Redis master。
- 启动 Redis slaves。
- 启动 guestbook 前端。
- 暴露和查看前端服务。
- 清理.
准备工作
您需要有一个Kubernetes集群,并且必须配置kubectl命令行工具来与您的集群通信。如果您还没有集群,您可以使用Minikube创建一个集群,或者您可以使用这些Kubernetes平台:
检查版本, 请输入 kubectl version
.
下载以下配置文件:
- redis-master-deployment.yaml
- redis-master-service.yaml
- redis-slave-deployment.yaml
- redis-slave-service.yaml
- frontend-deployment.yaml
- frontend-service.yaml
启动 Redis Master
guestbook应用使用Redis存储数据。guestbook 把数据写入Redis master实例中,从多个redis slaves实例中读取数据。
创建一个 Redis Master 部署(Deployment)
下面包含的清单文件指定了一个部署控制器(Deployment controller),该控制器运行一个Redis master Pod副本。
- 在您下载清单文件的目录中启动一个终端窗口.
- 使用
redis-master-deployment.yaml
文件部署Redis Master Deployment:kubectl apply -f redis-master-deployment.yaml
guestbook/redis-master-deployment.yaml |
---|
|
- 查询Pods列表,以验证Redis Master Pod正在运行:
kubectl get pods
响应类似于:
NAME READY STATUS RESTARTS AGE redis-master-1068406935-3lswp 1/1 Running 0 28s
- 运行以下命令查看来自Redis Master Pod的日志:
kubectl logs -f POD-NAME
注意:将POD-NAME
替换为您的Pod名称。
创建 Redis Master 服务
guestbook 应用程序需要与Redis master通信来写数据。您需要使用一个服务来将流量代理到Redis master Pod。服务定义了访问这些Pods的策略。
- 把
redis-master-service.yaml
文件应用到Redis Master 服务:kubectl apply -f redis-master-service.yaml
guestbook/redis-master-service.yaml |
---|
|
注意:这个清单文件创建了一个名为redis-master
的服务,它的标签与前面定义的标签相匹配,因此服务将网络流量路由到Redis master Pod。
- 查询服务列表,以验证Redis master 服务正在运行:
kubectl get service
响应类似于:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.0.0.1 <none> 443/TCP 1m redis-master 10.0.0.151 <none> 6379/TCP 8s
启动Redis Slaves
尽管Redis master是一个单一的pod,但是您可以通过添加副本的Redis slaves来实现它的高可用性。
创建 Redis Slave 部署(Deployment)
部署规模基于清单文件中配置。在本例中,部署对象指定两个副本。
如果没有运行任何副本,这个部署将在您的容器集群上启动两个副本。相反,如果有两个以上的副本正在运行,那么它将缩减到两个运行副本。
- 把
redis-slave-deployment.yaml
文件应用到Redis Slave Deploymentkubectl apply -f redis-slave-deployment.yaml
guestbook/redis-slave-deployment.yaml |
---|
|
- 查询 Pods 列表,以验证Redis Slave正在运行:
kubectl get pods
响应类似于:
NAME READY STATUS RESTARTS AGE redis-master-1068406935-3lswp 1/1 Running 0 1m redis-slave-2005841000-fpvqc 0/1 ContainerCreating 0 6s redis-slave-2005841000-phfv9 0/1 ContainerCreating 0 6s
创建 Redis Slave服务
guestbook 应用程序需要与Redis slaves 进行通信,以读取数据。为了让Redis slaves可发现,你需要建立一个服务。该服务为一组Pods提供透明的负载平衡。
- 把
redis-slave-service.yaml
文件应用到Redis Slave 服务kubectl apply -f redis-slave-service.yaml
guestbook/redis-slave-service.yaml |
---|
|
- 查询服务列表,以验证Redis Slave 服务正在运行:
kubectl get services
响应类似于:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.0.0.1 <none> 443/TCP 2m redis-master 10.0.0.151 <none> 6379/TCP 1m redis-slave 10.0.0.223 <none> 6379/TCP 6s
设置并暴露Guestbook的前端
guestbook 应用程序有一个web前端,它提供用PHP编写的HTTP请求。它被配置为连接到用于写请求的redis-master
服务,以及用于读取请求的redis-slave
服务。
创建Guestbook前端部署
- 把
frontend-deployment.yaml
文件应用到前端部署kubectl apply -f frontend-deployment.yaml
guestbook/frontend-deployment.yaml |
---|
|
- 查询Pods列表,以验证三个前端副本正在运行:
kubectl get pods -l app=guestbook -l tier=frontend
响应类似于:
NAME READY STATUS RESTARTS AGE frontend-3823415956-dsvc5 1/1 Running 0 54s frontend-3823415956-k22zn 1/1 Running 0 54s frontend-3823415956-w9gbt 1/1 Running 0 54s
创建前端服务
您所应用的redis-slave
和redis-master
服务只能在容器集群中访问,因为服务的缺省类型是ClusterIP。ClusterIP
为服务指向的一组Pods提供一个单一的IP地址。这个IP地址只能在集群中访问。
如果您希望客户能够访问您的guestbook,那么您必须将前端服务配置为外部可见,以便客户端可以从容器集群外部请求服务。Minikube只能通过NodePort
公开服务。
注意:一些云计算提供商,比如Google Compute Engine或Google Kubernetes引擎,支持外部负载平衡器。如果你的云服务提供商支持负载平衡器,你想要使用它,简单地删除或注释掉type: NodePort
并且去掉type: LoadBalancer
的注释。
- 把
frontend-service.yaml
文件应用到前端服务kubectl apply -f frontend-service.yaml
guestbook/frontend-service.yaml |
---|
|
- 查询服务列表,以验证前端服务正在运行:
kubectl get services
响应类似于:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend 10.0.0.112 <nodes> 80:31323/TCP 6s kubernetes 10.0.0.1 <none> 443/TCP 4m redis-master 10.0.0.151 <none> 6379/TCP 2m redis-slave 10.0.0.223 <none> 6379/TCP 1m
通过NodePort
查看前端服务
如果您将此应用程序部署到Minikube或本地集群,您需要找到IP地址来查看您的Guestbook。
- 运行下面的命令以获得前端服务的IP地址.
minikube service frontend --url
响应类似于:
http://192.168.99.100:31323
- 复制IP地址,并在浏览器中加载页面以查看您的guestbook.
通过LoadBalancer
查看前端服务
如果你通过type: LoadBalancer
部署frontend-service.yaml
,你需要找到IP地址来查看你的Guestbook
- 运行下面的命令以获得前端服务的IP地址.
kubectl get service frontend
响应类似于:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend 10.51.242.136 109.197.92.229 80:32372/TCP 1m
- 复制外部IP地址,并在浏览器中加载页面以查看您的guestbook.
扩展Web 前端
向上或向下扩展很容易,因为您的服务器被定义为使用部署控制器( Deployment controller)的服务。
- 运行下面的命令来扩展前端Pods的数量:
kubectl scale deployment frontend --replicas=5
- 查询Pods 的列表,以验证前端运行的Pods 的数量:
kubectl get pods
响应类似于:
NAME READY STATUS RESTARTS AGE frontend-3823415956-70qj5 1/1 Running 0 5s frontend-3823415956-dsvc5 1/1 Running 0 54m frontend-3823415956-k22zn 1/1 Running 0 54m frontend-3823415956-w9gbt 1/1 Running 0 54m frontend-3823415956-x2pld 1/1 Running 0 5s redis-master-1068406935-3lswp 1/1 Running 0 56m redis-slave-2005841000-fpvqc 1/1 Running 0 55m redis-slave-2005841000-phfv9 1/1 Running 0 55m
- 运行下面的命令来减少前端Pods的数量:
kubectl scale deployment frontend --replicas=2
- 查询Pods 的列表,以验证前端运行的Pods 的数量:
kubectl get pods
响应类似于:
NAME READY STATUS RESTARTS AGE frontend-3823415956-k22zn 1/1 Running 0 1h frontend-3823415956-w9gbt 1/1 Running 0 1h redis-master-1068406935-3lswp 1/1 Running 0 1h redis-slave-2005841000-fpvqc 1/1 Running 0 1h redis-slave-2005841000-phfv9 1/1 Running 0 1h
清理
删除部署和服务也会删除任何运行的Pods。使用一个命令使用标签来删除多个资源.
- 运行以下命令删除所有的Pods、部署和服务.
kubectl delete deployment -l app=redis kubectl delete service -l app=redis kubectl delete deployment -l app=guestbook kubectl delete service -l app=guestbook
响应应该是:
deployment "redis-master" deleted deployment "redis-slave" deleted service "redis-master" deleted service "redis-slave" deleted deployment "frontend" deleted service "frontend" deleted
- 查询Pods列表,以验证是否正在运行:
kubectl get pods
响应应该是:
No resources found.
下一节
- 完成Kubernetes Basics的交互式教程
- 使用Kubernetes来创建一个博客,使用Persistent Volumes for MySQL and WordPress
- 更多关于connecting applications 的信息
- 更多关于Managing Resources的信息
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《kubernetes官方文档》部署PHP redis 应用Guestbook
细节满满,赞!推荐博主使用一个好用的接口管理工具-ApiPost,免费下载使用的,谢谢博主啦