Kubernetes怎么实现留言板功能
admin
2023-04-02 02:41:39
0次

基础环境

系统版本: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 的模式进行部署,实现数据的读写分离能力。

项目架构

    Kubernetes怎么实现留言板功能

  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-master
  labels: 
   name: redis-master
spec:
  replicas: 1
  selector:
   name: redis-master
  template:
   metadata:
     labels:
       name: redis-master
   spec:
     containers:
     - name: master
       image: kubeguide/redis-master
       ports:
       - 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     

1.2  创建 redis-master service

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

# cat redis-master-service.yaml 
apiVersion: v1
kind: Service
metadata:
 name: redis-master
 labels: 
  name: redis-master
spec:
 ports:
 - port: 6379
   targetPort: 6379
 selector:
  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       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-slave
  labels: 
   name: redis-slave
spec:
  replicas: 2
  selector:
   name: redis-slave
  template:
   metadata:
     labels:
       name: redis-slave
   spec:
     containers:
     - name: slave
       image: kubeguide/guestbook-redis-slave
       env: 
       - name: GET_HOSTS_FROM
         value: env
       ports:
         - 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-slave
 labels: 
  name: redis-slave
spec:
 ports:
 - port: 6379
   targetPort: 6379
 selector:
  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        6379/TCP       39m
redis-slave     ClusterIP   10.0.0.173        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           80:30003/TCP     24s

web页面浏览

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

Kubernetes怎么实现留言板功能

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...