一、简介

  1、环境依旧是kubernetes之前文章的架构

  2、需要docker的镜像

    1)php-forntend web 前端镜像

      docker.io-kubeguide-guestbook-php-frontend.tar

    2)redis master

      docker.io-kubeguide-redis-master.tar

    3)redis slave

      docker.io-kubeguide-guestbook-redis-slave.tar

    web前端通过javascript redis api 和redis master交互,可以在阿里上或自行下载

  3、架构示意图

  4、底层网络架构图

  5、补充kubernetes系统架构图

二、开始部署

  1、上传导入镜像

    先下载相关镜像

      互联网自行下载,或者直接docker pull

    docker load导入

[root@node1 k8s]# docker load -i docker.io-kubeguide-redis-master.tar               #---导入redis-master
[root@node1 k8s]# docker load -i docker.io-kubeguide-guestbook-php-frontend.tar         #---导入guestbook-php-frontend
[root@node1 k8s]# docker load -i docker.io-kubeguide-guestbook-redis-slave.tar          #---导入guestbook-redis-slave

  2、创建redis master deployment配置文件

      回顾:deployment作用,是描述想要的目标状态是什么

    1)创建vim redis-master-deployment.yaml

 [root@master k8s]# cd /etc/kubernetes/yaml/

[root@master k8s]# vim redis-master-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-master
# these labels can be applied automatically
# from the labels in the pod template if not set              #---如果没有设置,这些标签可以自动应用于POD模板中的标签
# labels:                                           
# app: redis
# role: master
# tier: backend
spec:
# this replicas value is default
# modify it according to your case
replicas: 1                                    #---此副本值,根据情况修改
# selector can be applied automatically
# from the labels in the pod template if not set              #---如果没有设置
# selector:
# matchLabels:
# app: guestbook
# role: master
# tier: backend
template:                                     #---模板,如果没有设置,选择自动使用从此模板中默认的标签
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: docker.io/kubeguide/redis-master:latest           #---自行修改,镜像地址
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort:

    2)启动这个deployment

[root@master yaml]# kubectl create -f /etc/kubernetes/yaml/redis-master-deployment.yaml
deployment "redis-master" created
[root@master yaml]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 21h
redis-master 4s
[root@master yaml]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 21h
redis-master 6s

  3、创建redis master service配置文件

    1)编辑redis-master-service.yaml

[root@master yaml]# vim /etc/kubernetes/yaml/redis-master-service.yaml 

apiVersion: v1
kind: Service
metadata:                                       #---metadata.name定义了service的服务名,spec.selector确定了pod对应到本服务  
name: redis-master
labels:                                       #---这里的定义表面拥有redis-master标签的pod属于redis-master服务
app: redis
role: master
tier: backend
spec:
ports:
# the port that this service should serve on
- port: 6379                                    #---ports部分中targetport属性用来确定提供该服务的容器所暴露(expose)的端口号,port定义server的虚拟端口
targetPort: 6379
selector:
app: redis
role: master
tier: backend

    2)启动这个service

[root@master yaml]# kubectl create -f /etc/kubernetes/yaml/redis-master-service.yaml
service "redis-master" created
[root@master yaml]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> /TCP 14d
nginx 10.254.8.125 <nodes> :/TCP 9d
redis-master 10.254.16.93 <none> 6379/TCP 6s
[root@master yaml]#

  4、创建redis slave deployment配置文件

    1)创建redis-salve-deployment

[root@master yaml]# vim redis-slave-deployment.yaml 

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-slave
# these labels can be applied automatically
# from the labels in the pod template if not set
# labels:
# app: redis
# role: slave
# tier: backend
spec:
# this replicas value is default
# modify it according to your case
replicas:
# selector can be applied automatically
# from the labels in the pod template if not set
# selector:
# matchLabels:
# app: guestbook
# role: slave
# tier: backend
template:
metadata:
labels:
app: redis
role: slave
tier: backend
spec:
containers:
- name: slave
image: docker.io/kubeguide/guestbook-redis-slave:latest
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: env
# If your cluster config does not include a dns service, then to
# instead access an environment variable to find the master
# service's host, comment out the 'value: dns' line above, and
# uncomment the line below.
# value: env
ports:
- containerPort:

    2)启动redis-slave-deployment

[root@master yaml]# kubectl create -f /etc/kubernetes/yaml/redis-slave-deployment.yaml
deployment "redis-slave" created
[root@master yaml]# kubectl get deploy                                   #---查看deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 22h
redis-master 11m
redis-slave 7s
[root@master yaml]# kubectl get pods                                    #---查看pods
NAME READY STATUS RESTARTS AGE
nginx--n5wsr / Running 22h
nginx--zngv0 / Running 22h
redis-master--vjx86 / Running 30m
redis-slave--9nk3l / Running 19m
redis-slave--vfd4b / Running 19m
[root@master yaml]# kubectl get pods -o wide                                #---查看pod 详细信息,可以看到一个master两个slave
NAME READY STATUS RESTARTS AGE IP NODE
nginx--n5wsr / Running 22h 10.255.101.2 node2
nginx--zngv0 / Running 22h 10.255.58.2 node1
redis-master-3671804942-vjx86 1/1 Running 0 31m 10.255.58.3 node1
redis-slave-2377017994-9nk3l 1/1 Running 0 19m 10.255.101.4 node2
redis-slave-2377017994-vfd4b 1/1 Running 0 19m 10.255.58.4 node1
[root@master yaml]#

  5、创建slave service 配置文件

    1)创建redis-slave-service.yaml

[root@master yaml]# vim /etc/kubernetes/yaml/redis-slave-service.yaml 

apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
app: redis
role: slave
tier: backend
spec:
ports:
# the port that this service should serve on
- port:
selector:
app: redis
role: slave
tier: backend

    2)启动这service

[root@master yaml]# kubectl create -f /etc/kubernetes/yaml/redis-slave-service.yaml
service "redis-slave" created
[root@master yaml]# kubectl get svc -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes 10.254.0.1 <none> /TCP 14d <none>
nginx 10.254.8.125 <nodes> :/TCP 9d name=nginx
redis-master 10.254.16.93 <none> 6379/TCP 32m app=redis,role=master,tier=backend
redis-slave 10.254.22.156 <none> 6379/TCP 10s app=redis,role=slave,tier=backend
[root@master yaml]#

  6、创建fronteng guestbook deployment配置文件

    这个是一个简单的PHP服务,用来和master service (写请求),slave service(读请求)交互

    1)创建编辑frontend-deployment.yaml

[root@master yaml]# vim frontend-deployment.yaml 

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: frontend
# these labels can be applied automatically
# from the labels in the pod template if not set
# labels:
# app: guestbook
# tier: frontend
spec:
# this replicas value is default
# modify it according to your case
replicas: 3
# selector can be applied automatically
# from the labels in the pod template if not set
# selector:
# matchLabels:
# app: guestbook
# tier: frontend
template:
metadata:
labels:
app: guestbook
tier: frontend
spec:
containers:
- name: php-redis
image: docker.io/kubeguide/guestbook-php-frontend:latest
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: env
# If your cluster config does not include a dns service, then to
# instead access environment variables to find service host
# info, comment out the 'value: dns' line above, and uncomment the
# line below.
# value: env
ports:
- containerPort:

    2)启动这个deployment

      可以看到三个frontend,一个master,两个slave

[root@master yaml]# kubectl create -f frontend-deployment.yaml
deployment "frontend" created
[root@master yaml]# kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
frontend 10s
nginx 22h
redis-master 1 1 1 1 48m
redis-slave 2 2 2 2 37m
[root@master yaml]# kubectl get pods -o wide          
NAME READY STATUS RESTARTS AGE IP NODE
frontend-1186687533-0g08q 1/1 Running 0 24s 10.255.58.5 node1
frontend-1186687533-fxf29 1/1 Running 0 24s 10.255.101.5 node2
frontend-1186687533-q38fx 1/1 Running 0 24s 10.255.101.6 node2
nginx--n5wsr / Running 22h 10.255.101.2 node2
nginx--zngv0 / Running 22h 10.255.58.2 node1
redis-master-3671804942-vjx86 1/1 Running 0 49m 10.255.58.3 node1
redis-slave-2377017994-9nk3l 1/1 Running 0 37m 10.255.101.4 node2
redis-slave-2377017994-vfd4b 1/1 Running 0 37m 10.255.58.4 node1
[root@master yaml]#

  7、创建frontend guestbook service 配置文件

    1)创建frontend-service.yaml

[root@master yaml]# vim frontend-service.yaml 

apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
# if your cluster supports it, uncomment the following to automatically create
# an external load-balanced IP for the frontend service.
# type: LoadBalancer
type: NodePort
ports:
# the port that this service should serve on
- port:
nodePort: 30001
selector:
app: guestbook
tier: frontend

    2)启动这个service

[root@master yaml]# kubectl create -f /etc/kubernetes/yaml/frontend-service.yaml
service "frontend" created
[root@master yaml]# kubectl get svc -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
frontend 10.254.129.194 <nodes> 80:30001/TCP 4m app=guestbook,tier=frontend
kubernetes 10.254.0.1 <none> /TCP 14d <none>
nginx 10.254.8.125 <nodes> :/TCP 9d name=nginx
redis-master 10.254.16.93 <none> /TCP 52m app=redis,role=master,tier=backend
redis-slave 10.254.22.156 <none> /TCP 20m app=redis,role=slave,tier=backend
[root@master yaml]#

    3)node1 查看端口

[root@node1 k8s]# netstat -antup |grep 30001
tcp6 0 0 :::30001 :::* LISTEN 1110/kube-proxy

三、验证

  1、访问web端

    http://192.168.216.53:30001/

参考:互联网内容

总结流程:准备deployment和service配置文件》导入镜像》启动deployment和service

kubernetes系列文章请见:

部署:请见Kubernetes2-K8s的集群部署

kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-1

kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-2

Kubernetes Dashboard web界面:请见Kubernetes4-web管理界面

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11847953.html

Kubernetes5-集群上搭建基于redis和docker的留言薄的更多相关文章

  1. Hadoop集群上搭建Ranger

    There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...

  2. 在Hadoop集群上,搭建HBase集群

    (1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...

  3. Kubernetes-在Kubernetes集群上搭建HBase集群

    经过3天的努力,终于在Kubernetes上把HBase集群搭建起来了,搭建步骤如下. 创建HBase镜像   配置文件包含core-site.xml.hbase-site.xml.hdfs-site ...

  4. STORM_0002_在做好的zookeeper集群上搭建storm的开发环境

    参考文献http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.htm ...

  5. 深入剖析Redis系列: Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  7. Redis 5.0.7 讲解,单机、集群模式搭建

    Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...

  8. Redis集群环境搭建实践

    0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...

  9. linux环境(CentOS-6.7)下redis集群的搭建全过程

    linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...

随机推荐

  1. idea中的java web项目(添加jar包介绍)和java maven web项目目录结构

    java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...

  2. KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法

    原因:如LCD.C文件使用了bmp.h中的image[ ]变量,那么就不能将#include"bmp.h"放在LCD.H中,要将#include"bmp.h"放 ...

  3. 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)

    .NET Core 3.0已经发布了,除了一大堆令人激动的功能以外,也增加了对WPF的正式支持, 那么WPF在.NET Core 3.0下的开发体验如何呢? 本文利用了Stylet框架开发.NET C ...

  4. bugku color

    下载打开压缩包是七张图片,分别是七个颜色,使用stegsolve打开发现了异常. 七张图片拼起来是 make me tall,看来是要修改图片高度. 我们使用winhex打开图片并在十六进制中修改图片 ...

  5. X-扫描线算法

    多边形的扫描转换 多边形有两种重要的表示方法:顶点表示和点阵表示 顶点表示是用多边形的顶点序列来表示多边形.这种表示直观.几何意义强.占内存少,易于进行几何变换. 但由于它没有明确指出哪些象素在多边形 ...

  6. MySQL优化与实践

    一.MySQL优化概括 二.SQL优化 实践: 1.查看是否开启了慢查询日志 show variables like 'slow_query_log' 没有开启 2.查看是否开启了未使用索引SQL记录 ...

  7. Validator 常用注解

    说明 Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等.那么在spring boot怎么使用这么强大的校验框架呢. 常用 @null 验 ...

  8. Kali升级2018&&2019

    0X01修改更新源 vim /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-f ...

  9. Python之网络编程Socket

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  10. Python开发【第五篇】字符串

    字符串 作用:用来记录文字信息 例子: 空字符串 '' #单引号空字符串 "" #双引号空字符串 ''' ''' #三单引号空字符串 """ &quo ...