一、简介

  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. 网络游戏开发-客户端1(开始Hello world)

    打开Egret Launcher ,新建一个EUI项目,起名为 EQiPai 这里需要勾选的是socket网络库,game游戏库.如果要面向海外用户的话,建议勾上Facebook的小游戏sdk. 然后 ...

  2. B-概率论-常见的概率分布模型

    目录 常见的概率分布模型 一.离散概率分布函数 二.连续概率分布函数 三.联合分布函数 四.多项分布(Multinomial Distribution) 4.1 多项分布简介 4.2 多项分布公式解析 ...

  3. 超详细!! sql server 同步数据库 发布 订阅 跨网段 无公网ip 常见问题

    问题描述 主机1:发布端 阿里云服务器--有公网ip 主机2:订阅端 笔记本--无公网ip 数据量很小,主要是熟悉发布订阅的操作流程. 主机2仅仅作为主机1的本地备份,要求修改云服务器上数据后,能通过 ...

  4. Android9.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)

    文章较长建议先收藏再看 拆解步骤 1.app 强制横屏显示,无视 android:screenOrientation="portrait" 属性 2.屏幕触摸坐标修改为横屏 3.开 ...

  5. Proving Equivalences UVA - 12167

    题文:https://vjudge.net/problem/UVA-12167 题解: 很明显,先要缩点.然后画一下图就会发现是入度为0的点和出度为0的点取max. 代码: #include < ...

  6. 《java编程思想》P125-P140(第七章复用类部分)

    1.类的成员默认的是包访问权限.允许包内成员访问 2.super.scrub() 调用基类的scrub方法 3.继承并不是复制基类的接口.当创建了一个导出类(子类)对象时,该对象包含了一个基类的子对象 ...

  7. django模型中有外键关系的表删除相关设置

    0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...

  8. AngelSword(天使之剑)漏洞框架的使用

    安装setuptools wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setupt ...

  9. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

  10. opencv实践::对象的提取

    问题描述 真实案例,对图像中对象进行提取,获取这样对象,去掉其它干扰和非目标对象. 解决思路 二值分割 + 形态学处理 +横纵比计算 #include <opencv2/opencv.hpp&g ...