基础环境

系统版本:CentOS Linux release 7.5.1804 (Core)

kubernetes版本:kubernetes1.3

项目背景

Guestbook留言板系统将通过 Pod、RC、Service 等资源对象搭建完成,成功启动后网页中显示一条"Hello World"留言。其系统架构是一个基于PHP+Redis的分布式Web应用,前端PHP Web网站通过访问后端的 Redis 来完成用户留言的查询和添加功能。同时Redis以Master+Slave 的模式进行部署,实现数据的读写分离能力。

项目架构

Web层是一个基于 PHP 页面的 Apache 服务,启动 3 个实例组成集群,实现访问网站的负载均衡。Redis Master启动 1 个实例用于写操作(添加留言),Redis Slave 启动两个实例用于读操作(读取留言)。Redis Master与 Slave 的数据同步由 Redis 具备的数据同步机制完成。

服务部署

1. Redis Master 部署

1.1  创建 redis-master  RC

可以先定义 Service,然后定义一个 RC来创建和控制相关联的 Pod,或者先定义 RC 来创建 Pod,然后定义与之关联的 Service。

首先为 redis-master 创建一个名为 redis-master 的 RC 定义文件 redis-master-controller.yaml。

# cat redis-master-controller.yaml
apiVersion: v1
kind: ReplicationController   #表示这是一个RC
metadata:name: redis-masterlabels: name: redis-master
spec:replicas: 1selector:name: redis-mastertemplate:metadata:labels:name: redis-masterspec:containers:- name: masterimage: kubeguide/redis-masterports:- containerPort: 6379

创建完成之后,在master节点上发布到集群中

# kubectl create -f redis-master-controller.yaml
replicationcontroller/redis-master created

用kubectl get 命令确认RC和Pod 创建成功

# kubectl get rc
NAME           DESIRED   CURRENT   READY   AGE
redis-master   1         1         0       70s
# kubectl get pods -o wide| grep redis
redis-master-j58mw  1/1     Running   0    3m59s   172.17.39.7   192.168.200.130   <none>  <none>

1.2  创建 redis-master service

redis-master Pod 已创建且正常运行后,在创建与之关联的Service

# cat redis-master-service.yaml
apiVersion: v1
kind: Service
metadata:name: redis-masterlabels: name: redis-master
spec:ports:- port: 6379targetPort: 6379selector:name: redis-master

运行kubectl create 命令创建该service

# kubectl create -f redis-master-service.yaml
service/redis-master created
# kubectl get services | grep redis-master
redis-master     ClusterIP   10.0.0.116   <none>    6379/TCP       40s

2. Redis slave 部署

本示例启动启动 redis-slave 服务的两个副本,每个副本上的 Redis 进程都与 redis-master进行数据同步,与 redis-master 共同组成了一个具备读写分离能力的 Redis集群。留言板的PHP网页通过访问 redis-slave 服务来读取留言数据。

2.1   创建 redis-slave RC

# cat redis-slave-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: redis-slavelabels: name: redis-slave
spec:replicas: 2selector:name: redis-slavetemplate:metadata:labels:name: redis-slavespec:containers:- name: slaveimage: kubeguide/guestbook-redis-slaveenv: - name: GET_HOSTS_FROMvalue: envports:- containerPort: 6379

在容器的配置部分设置了一个环境变量 GET_HOSTS_FROM=env ,意思是从环境变量中获取 redis-master服务的 IP 地址信息。

redis-slave 镜像中的启动脚本 /run.sh 的内容为:

# kubectl create -f redis-slave-controller.yaml
replicationcontroller/redis-slave created
# kubectl get rc | grep redis
redis-master   1         1         1       45m
redis-slave    2         2         2       103s
# kubectl get pod | grep redis
redis-master-j58mw                  1/1     Running   0         45m
redis-slave-c42bx                   1/1     Running   0         2m3s
redis-slave-s74b8                   1/1     Running   0         2m3s

2.2  创建redis-slave  service

创建与redis-slave 相关的Service 服务,类似于 redis-master服务。

# cat redis-slave-service.yaml
apiVersion: v1
kind: Service
metadata:name: redis-slavelabels: name: redis-slave
spec:ports:- port: 6379targetPort: 6379selector:name: redis-slave

运行kubectl 创建 Service

# kubectl create -f redis-slave-service.yaml
service/redis-slave created
# kubectl get svc | grep redis
redis-master     ClusterIP   10.0.0.116   <none>     6379/TCP       39m
redis-slave     ClusterIP   10.0.0.173   <none>     6379/TCP       49s

3. 部署frontend

3.1 创建部署 frontend rc

# cat frontend-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  replicas: 3
  selector:
    name: frontend
  template:
    metadata:
      labels:
        name: frontend
    spec:
      containers:
      - name: frontend
        image: kubeguide/guestbook-php-frontend
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

在容器的配置部分设置了一个环境变量 GET_HOSTS_FROM=env ,意思是从环境变量中获取 redis-master 和 redis-slave 服务的 IP 地址信息。

# kubectl create -f frontend-controller.yaml
replicationcontroller/frontend created

查看创建的

# kubectl get rc
NAME           DESIRED   CURRENT   READY   AGE
frontend       3         3         3       5m1s
redis-master   1         1         1       67m
redis-slave    2         2         2       24m
# kubectl get pods
NAME                               READY   STATUS   RESTARTS   AGE
frontend-mnd85                      1/1     Running   0         5m43s
frontend-pmpdb                      1/1     Running   0         5m43s
frontend-zd2n5                      1/1     Running   0         5m43s
3.2 创建部署 frontend service
最后创建 frontend Service,主要目的是使用 Service 的 NodePort 给 Kuberbetes 集群中的 Service 映射一个外网可以访问的端口,这样,外部网络就可以通过 NodeIP+NodePort 的方式访问集群中的服务了。

# cat frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
  name: frontend
spec:
type: NodePort
ports:
- port: 80
   nodePort: 30003
selector:
  name: frontend

运行kubectl create 命令发布到集群中

# kubectl create -f frontend-service.yaml
service/frontend created
# kubectl get svc
NAME       TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
frontend     NodePort    10.0.0.145   <none>        80:30003/TCP     24s

web页面浏览

http://192.168.200.129:30003/,http://192.168.200.130:30003/      备注:为 Node节点的IP

再次登录会查看到留言,说明数据读取写入没有问题。

Kubernetes 实现 Guestbook 留言板相关推荐

  1. kubernetes 之Guestbook 留言板

    备注:本例是按照kubernetes 权威指南第二版  2.3 Guestbook演示实例:Hello World ! 整理 Guestbook留言板系统部署架构图 Guestbook 留言板系统部署 ...

  2. kubernetes学习:留言板(Guestbook)系统的搭建

    kubernetes学习:留言板(Guestbook)系统的搭建 master节点搭建 部署环境 Ubuntu 16.04 虚拟机两台 国内镜像源ustc 安装docker环境(https://blo ...

  3. Kubernetes实战实现 Guestbook 留言板-简易版详解

    1.基础信息 系统版本:CentOS Linux release 7.6 kubernetes版本:kubernetes1.14.0 Docker版本: Docker CE 19.03.5 此 Jav ...

  4. 织梦留言板guestbook.htm加入头部导航

    织梦仿站的时候如果有留言板,通常都是不像织梦这样的留言板独立的页面:都是带头部导航的.那么如何在guestbook.htm加入头部导航:如果直接加入head.htm的话.标签在这里是无法调用的:我们必 ...

  5. guestbook.php注入,php防注入留言板(simple)

    新手学php,试手案例便是留言板.以前未连接数据库时,我是直接将用户输入的留言写入到一个txt,然后再从txt读取显示(~.~别鄙视). 最近学习了php访问MySQL数据库的一些知识,重写了一下留言 ...

  6. mytag.class.php,织梦CMS/dedecms织梦模板留言板调用{dede:}标签的头部尾部的方法

    织梦模板网站留言板调用网站的head.htm,footer.htm的方法二, 好多人都想在留言本guestbook.htm里实现dede的标签调用,问题是在plus里不支持dede标签的应用. 现在有 ...

  7. 网上商城留言板的实现——留言展示到留言板

    留言展示到留言板 功能描述:当用户访问留言板(guestbook.jsp)时,会调用GetMessageServlet.java,该servlet内调用数据库操作(MessageDaoImpl.jav ...

  8. 网上商城留言板的实现——用户添加留言

    /** *刘梦冰发表于2015-4-26凌晨 */ 用户添加留言 功能描述:用户在前台hostbook.jsp页面的表单中输入留言信息,点击提交按钮,将留言信息提交给表单form的action属性所对 ...

  9. 浅析dedecms织梦网站留言板提交时验证码错误的解决办法

    默认情况下,如果我们使用DEDE模板中的默认留言板时,如果留言信息不正确或者输入内容为空时,dedecms系统就会返回一个空 白页.这样的方式很不利于用户体验,解决这个问题实际上非常简单. 找到ded ...

最新文章

  1. Windows Tips--How do I disable the Windows Firewall service?
  2. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案,arduino通知提醒方案...
  3. 傻瓜教程:asp.net(c#) 如何配置authentication,完成基于表单的身份验证
  4. 建立学生选课表 mysql 语句_MySQL常用SQL语句(Python实现学生、课程、选课表增删改查)...
  5. nssl1298-网站计划【线段树】
  6. XML具有哪些特点?相对于HTML的优势
  7. 剑指offer-JZ54 二叉搜索树的第k个节点(附思路)
  8. 创建Session时会把含有Session ID 的Cookie对象加到响应对象上
  9. 怎样在matlab q-q图上读出斜率,Q分解法潮流计算matlab小程序
  10. 关于rocketmq的配置启动
  11. python爬取资源网站资源
  12. 19c(19.3) 单机数据库安装
  13. 图解IE浏览器下,如何保存输入记录
  14. macOS 中英文输入法切换终极解决方案
  15. rabbitmq(二):死信队列,springboot 实现3种情况
  16. 部门换届推文文字_我院举行第二届学生代表大会暨学生会换届大会
  17. 发那科2021参数_发那科系统FANUC:参数修改。
  18. RestTemplate请求Could not extract response: no suitable HttpMessageConverter found for response type..
  19. 小羊驼和你一起学习cocos2d-x之八(tinyXml android cocos2d-x 2.x)
  20. 解决VS安装无法联网下载问题

热门文章

  1. 为什么他们都在使用牛皮席?
  2. 怎么屏蔽还有照片_在朋友圈发男神照片,忘了屏蔽父母,老妈的回应亮了…
  3. 小米用鸿蒙系统ui,什么操作系统和华为鸿蒙OS,小米MIUI相媲美?网友用完了说真香...
  4. 多线程、cpu本质原理
  5. C语言编程的按位或返回值,c语言的按位运算符怎么操作!?
  6. ARMCortex系列主流的仿真调试器
  7. leaflet加载geojson热力图加载坐标组热力图
  8. mips指令与寄存器详解
  9. JavaScript本地存储详解
  10. 银河麒麟系统+飞腾CPU 部署nginx(运行vue项目)