Kubernetes应用实例-GuestBook

本文详细介绍了如何在Kubernetes集群中部署GuestBook应用,包括启动Redis Master和Slave,以及部署高可用的php前端。系统环境为CentOS 7.2,Kubernetes版本为v1.2.0。通过ReplicationController和Service创建Redis及php前端的Pod,确保高可用性,最后展示如何从不同Minion节点访问GuestBook。
摘要由CSDN通过智能技术生成

在这个例子中,会在Kubernetes集群中部署这样一个应用:
它是一个PHP网站,并同时运行3个副本来保证高可用;
这个PHP网站在Redis里存储了一个数据,不定期进行读写;
这个Redis服务由1个Matser节点和2个Slave节点组成高可用集群,读请求由Slave处理,写请求则交给Master。

系统环境

操作系统版本:CentOS Linux release 7.2.1511 (Core)
内核版本:3.10.0-327.36.2.el7.x86_64
Docker版本:1.10.3
Kubernetes版本:v1.2.0

Kubernetes集群环境

Kubernets集群由1个Master节点和3个Minion节点组成:
192.168.80.159 kube-master
192.168.80.160 kube-minion1
192.168.80.161 kube-minion2
192.168.80.162 kube-minion3
说明:实例中用到的docker镜像均已pull至本地,并添加到私有仓库中。

部署流程

启动Redis Master

首先使用ReplicationController创建一个Redis Master Pod,然后创建该Pod的Service。
redis-master-rc.json资源文件如下:

{
   "kind":"ReplicationController",
   "apiVersion":"v1",
   "metadata":{
      "name":"redis-master",
      "labels":{
         "name":"redis-master"
      }
   },
   "spec":{
      "replicas":1,
      "selector":{
         "name":"redis-master"
      },
      "template":{
         "metadata":{
            "labels":{
               "name":"redis-master" }
         },
         "spec":{
            "containers":[
               {
                  "name":"master",
                  "image":"192.168.80.128:5000/redis",
                  "ports":[ { "containerPort":6379 } ] }
            ]
         }
      }
   }
}

redis-master-service.json资源文件如下:

{
   "kind":"Service",
   "apiVersion":"v1",
   "metadata":{
      "name":"redis-master",
      "labels":{
         "name":"redis-master"
      }
   },
   "spec":{
      "ports": [
        {
          "port":10001,
          "targetPort":6379
        }
      ],
      "selector":{
         "name":"redis-master"
      }
   }
}
  • 创建1个Pod副本:
    kubectl create -f redis-master-rc.json
  • 创建该Pod的Service:
    kubectl create -f redis-master-service.json
  • 确认已创建的Pod和Service:
    # kubectl get pods,rc,services -o wide
    NAME READY STATUS RESTARTS AGE NODE
    redis-master-pe80n 1/1 Running 0 1h kube-minion1
    NAME DESIRED CURRENT AGE CONTAINER(S) IMAGE(S) SELECTOR
    redis-master 1 1 17h master 192.168.80.128:5000/redis name=redis-master
    NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
    kubernetes 10.254.0.1 <none> 443/TCP 23d <none>
    redis-master 10.254.155.212 <none> 6379/TCP 17h name=redis-master

启动Redis Slave

首先使用ReplicationController创建2个Redis Slave Pod,然后创建该Pod组的Service。
redis-slave-rc.json资源文件如下:

{
   "kind":"ReplicationController",
   "apiVersion":"v1",
   "metadata":{
      "name":"redis-slave",
      "labels":{
         "name":"redis-slave"
      }
   },
   "spec":{
      "replicas":2,
      "selector":{
         "name":"redis-slave"
      },
      "template":{
         "metadata":{
            "labels":{
               "name":"redis-slave" }
         },
         "spec":{
            "containers":[
               {
                  "name":"slave",
                  "image":"192.168.80.128:5000/kubernetes/redis-slave",
                  "ports":[ { "containerPort":6379 } ] }
            ]
         }
      }
   }
}

redis-slave-service.json资源文件如下:

{
   "kind":"Service",
   "apiVersion":"v1",
   "metadata":{
      "name":"redis-slave",
      "labels":{
         "name":"redis-slave"
      }
   },
   "spec":{
      "ports": [
        {
          "port":10001
          "targetPort":6379
        }
      ],
      "selector":{
         "name":"redis-slave"
      }
   }
}
  • 创建2个Pod副本:
    kubectl create -f redis-slave-rc.json
  • 创建该Pod的Service:
    kubectl create -f redis-slave-service.json
  • 确认已创建的Pod和Service:
    # kubectl get pods,rc,services -o wide
    NAME READY STATUS RESTARTS AGE NODE
    redis-master-pe80n 1/1 Running 0 1h kube-minion1
    redis-slave-t4n6v 1/1 Running 0 1h kube-minion1
    redis-slave-vhyt0 1/1 Running 0 1h kube-minion1
    NAME DESIRED CURRENT AGE CONTAINER(S) IMAGE(S) SELECTOR
    redis-master 1 1 17h master 192.168.80.128:5000/redis name=redis-master
    redis-slave 2 2 17h slave 192.168.80.128:5000/kubernetes/redis-slave name=redis-slave
    NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
    kubernetes 10.254.0.1 <none> 443/TCP 23d <none>
    redis-master 10.254.155.212 <none> 6379/TCP 17h name=redis-master
    redis-slave 10.254.236.218 <none> 6379/TCP 17h name=redis-slave

启动Guestbook的php前端

同样首先使用ReplicationController创建3个frontend Pod副本,然后创建该Pod组的Service。
frontend-rc.json资源文件如下:

{
   "kind":"ReplicationController",
   "apiVersion":"v1",
   "metadata":{
      "name":"frontend",
      "labels":{
         "name":"frontend"
      }
   },
   "spec":{
      "replicas":3,
      "selector":{
         "name":"frontend"
      },
      "template":{
         "metadata":{
            "labels":{
               "name":"frontend" }
         },
         "spec":{
            "containers":[
               {
                  "name":"php-redis",
                  "image":"192.168.80.128:5000/kubernetes/example-guestbook-php-redis",
                  "ports":[ { "containerPort":80 } ] }
            ]
         }
      }
   }
}

frontend-service.json资源文件如下:

{
   "kind":"Service",
   "apiVersion":"v1",
   "metadata":{
      "name":"frontend",
      "labels":{
         "name":"frontend"
      }
   },
   "spec":{
      "type":"NodePort",
      "ports": [
        {
          "port":80,
          "nodePort":30001
        }
      ],
      "selector":{
         "name":"frontend"
      }
   }
}
  • 创建3个Pod副本:
    kubectl create -f frontend-rc.json
  • 创建该Pod的Service:
    kubectl create -f frontend-service.json
  • 确认已创建的Pod和Service:
    # kubectl get pods,rc,services -o wide
    NAME READY STATUS RESTARTS AGE NODE
    frontend-bu4np 1/1 Running 0 1h kube-minion3
    frontend-dnuh6 1/1 Running 0 1h kube-minion1
    frontend-j9pkp 1/1 Running 0 1h kube-minion2
    redis-master-pe80n 1/1 Running 0 2h kube-minion1
    redis-slave-t4n6v 1/1 Running 0 2h kube-minion1
    redis-slave-vhyt0 1/1 Running 0 2h kube-minion1
    NAME DESIRED CURRENT AGE CONTAINER(S) IMAGE(S) SELECTOR
    frontend 3 3 1h php-redis 192.168.80.128:5000/kubernetes/example-guestbook-php-redis name=frontend
    redis-master 1 1 17h master 192.168.80.128:5000/redis name=redis-master
    redis-slave 2 2 17h slave 192.168.80.128:5000/kubernetes/redis-slave name=redis-slave
    NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
    frontend 10.254.158.175 nodes 80/TCP 1h name=frontend
    kubernetes 10.254.0.1 <none> 443/TCP 23d <none>
    redis-master 10.254.155.212 <none> 6379/TCP 17h name=redis-master
    redis-slave 10.254.236.218 <none> 6379/TCP 17h name=redis-slave

访问Guestbook

根据上面获取的Pod信息,php前端分别在3台minion节点上运行,因此可通过这3个minion访问Guestbook。

通过kube-minion1访问Guestbook:
这里写图片描述

通过kube-minion2访问Guestbook:
这里写图片描述

通过kube-minion3访问Guestbook:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值