Kubernetes5-集群上搭建基于redis和docker的留言薄
一、简介
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
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的留言薄的更多相关文章
- Hadoop集群上搭建Ranger
There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...
- 在Hadoop集群上,搭建HBase集群
(1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...
- Kubernetes-在Kubernetes集群上搭建HBase集群
经过3天的努力,终于在Kubernetes上把HBase集群搭建起来了,搭建步骤如下. 创建HBase镜像 配置文件包含core-site.xml.hbase-site.xml.hdfs-site ...
- STORM_0002_在做好的zookeeper集群上搭建storm的开发环境
参考文献http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.htm ...
- 深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)
前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...
- Redis 5.0.7 讲解,单机、集群模式搭建
Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...
- Redis集群环境搭建实践
0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...
- linux环境(CentOS-6.7)下redis集群的搭建全过程
linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...
随机推荐
- MyBatis详解 一篇就够啦
第1章MyBatis框架配置文件详解 1.1 typeHandlers类型转换器 每当MyBatis 设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使用 ...
- 并发编程之原子操作Atomic&Unsafe
原子操作:不能被分割(中断)的一个或一系列操作叫原子操作. 原子操作Atomic主要有12个类,4种类型的原子更新方式,原子更新基本类型,原子更新数组,原子更新字段,原子更新引用.Atomic包中的类 ...
- # Ubuntu16.04安装nvidia驱动+CUDA+cuDNN
Ubuntu16.04安装nvidia驱动+CUDA+cuDNN 准备工作 1.查看GPU是否支持CUDA lspci | grep -i nvidia 2.查看Linux版本 uname -m &a ...
- SQL Server 2012企业版和标准版的区别
关于使用Microsoft SQL Server 数据库的公司一般会有疑问,企业版数据库和标准版数据库的区别在哪?如果采购企业版的价格和标准版的价格相差很大,从多方资料查询发现,我认为最主要的区别是硬 ...
- 刨ThreadLocal的坟
ThreadLocal是大家比较常用到的,在多线程下存储线程相关数据十分合适.可是很多时候我们并没有深入去了解它的原理. 首选提出几个问题,稍后再针对这些问题一一解答. 提到ThreadLocal,大 ...
- 使用Line Pos Info 和 Modern C++ 改进打印日志记录
使用Line Pos Info 和 Modern C++ 改进打印日志记录 使用跟踪值:不管自己是多么的精通,可能仍然使用调试的主要方法之一 printf , TRaCE, outputDebugSt ...
- Mysql 为什么要选择 B+Tree
算法对比 二叉树 当我查找 8 的时候需要走五步 红黑树 当我查询8的时候需要四次 相对于二叉树有了一些优化 没有无限延伸.红黑树的深度会很深(深度不可控制) hash 数据量大的话 查询很快(不能范 ...
- windows离线安装sublime插件:ctags
网络上一堆安装ctags教程,可都是在线安装. 花了点时间摸索出了离线安装教程. 1. 准备好sublime 和 package control sublime我用的版本是text 2. text 3 ...
- 《FFT家族—从不会到崩溃(坑)》读blog笔记
免责声明 原文地址https://blog.csdn.net/linjiayang2016/article/details/80341958,作者linjiayang2016.\text{linjia ...
- iOS开发请您把握现在 — 面向未来学习
iOS开发请您把握现在 — 面向未来学习 这一篇文章,如果你是一名iOS开发正好也处于开发晋升瓶颈迷茫期,不妨停下你的脚步,花五分钟看看,兴许有你需要的!文章结尾有彩蛋 群里常见的唱哀 iOS现在到底 ...