【Kubernetes学习之三】Kubernetes分布式集群架构
环境
centos 7
一、Kubernetes分布式集群架构
1、Kubernetes服务注册和服务发现问题怎么解决的?
每个服务分配一个不变的虚拟IP+端口, 系统env环境变量里有每个服务的服务名称到IP的映射。

2、服务的负载均衡问题怎么解决的?
每个节点上都有一个软件实现的服务代理来实现负载均衡

3、服务的规模部署问题怎么解决的?
目标导向的做法:确定部署实例数,系统自动调度

4、服务运维问题如何解决的?
自动监控、自我修复

5、集中配置,并且实时配置实施生效

二、集群架构示例
1、示例
一个PHP做的留言板:3台webserver做PHP-Frontend前台,1台redis-master用来写,2台redis-slave做读。

2、集群搭建图
创建三个service:frontend Service、redis-master Service、redis-slave Service

三、搭建
1、创建redis-master Pod
(1)定义redis-master-controller.yaml文件:
[root@node106 ~]# vi redis-master-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas:
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort:
(2)执行创建命令
[root@node106 ~]# kubectl create -f redis-master-controller.yaml
replicationcontroller/redis-master created
(3)查看pod
[root@node106 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-659bm / Running 4m46s
2、创建redis-master 服务
(1)定义redis-master-service.yaml
[root@node106 ~]# vi redis-master-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
name: redis-master
spec:
ports:
- port:
targetPort:
selector:
name: redis-master
(2)执行创建命令
[root@node106 ~]# kubectl create -f redis-master-service.yaml
service/redis-master created
(3)查看服务
[root@node106 ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> /TCP 46h
redis-master ClusterIP 10.96.187.196 <none> /TCP 18s
3、创建redis-slave Pod
(1)创建redis-slave-controller.yaml
[root@node106 ~]# vi redis-slave-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas:
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:
(2)执行创建命令
[root@node106 ~]# kubectl create -f redis-slave-controller.yaml
replicationcontroller/redis-slave created
(3)查看pod和rc
[root@node106 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-659bm / Running 16m
redis-slave-kqllg / Running 119s
redis-slave-rfbr8 / Running 119s
[root@node106 ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
redis-master 17m
redis-slave 2m24s
4、创建redis-slave 服务
(1)创建redis-slave-service.yaml
[root@node106 ~]# vi redis-slave-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port:
selector:
name: redis-slave
(2)执行创建命令
[root@node106 ~]# kubectl create -f redis-slave-service.yaml
service/redis-slave created
(3)查看服务
[root@node106 ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> /TCP 46h
redis-master ClusterIP 10.96.187.196 <none> /TCP 11m
redis-slave ClusterIP 10.99.146.233 <none> /TCP 33s
5、创建frontend Pod
(1)创建frontend-controller.yaml
[root@node106 ~]# vi frontend-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
labels:
name: frontend
spec:
replicas:
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:
(2)执行创建命令
[root@node106 ~]# kubectl create -f frontend-controller.yaml
replicationcontroller/frontend created
(3)查看pod
[root@node106 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
curl-6bf6db5c4f-dn65h / Running 41h
frontend-jjpzd / Running 6m50s
frontend-p2jpn / Running 6m50s
frontend-rm4z4 / Running 6m50s
redis-master-659bm / Running 30m
redis-slave-kqllg / Running 15m
redis-slave-rfbr8 / Running 15m
6、创建frontend 服务
(1)创建frontend-service.yaml
[root@node106 ~]# vi frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort
ports:
- port:
nodePort:
selector:
name: frontend
(2)执行创建命令
[root@node106 ~]# kubectl create -f frontend-service.yaml
service/frontend created
(3)查看服务
[root@node106 ~]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend NodePort 10.110.39.201 <none> :/TCP 34s
kubernetes ClusterIP 10.96.0.1 <none> /TCP 46h
redis-master ClusterIP 10.96.187.196 <none> /TCP 24m
redis-slave ClusterIP 10.99.146.233 <none> /TCP 13m
验证:

【Kubernetes学习之三】Kubernetes分布式集群架构的更多相关文章
- 2020重新出发,NOSQL,MongoDB分布式集群架构
MongoDB分布式集群架构 看到这里相信你已经掌握了 MongoDB 的大部分基本知识,现在在单机环境下操作 MongoDB 已经不存在问题,但是单机环境只适合学习和开发测试,在实际的生产环境中,M ...
- 关于RabbitMQ分布式集群架构
RabbitMQ分布式集群架构和高可用性(HA) (一) 功能和原理 设计集群的目的 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行 通过增加更多的节点来扩展消息通信的吞吐量 1 集群配 ...
- RabbitMQ分布式集群架构和高可用性(HA)
(一) 功能和原理 设计集群的目的 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行 通过增加更多的节点来扩展消息通信的吞吐量 1 集群配置方式 RabbitMQ可以通过三种方法来部署分布 ...
- rabbitmq系统学习(三)集群架构
RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.主备模式也称为Warren模式 HaProxy配置 listen r ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...
- Hadoop+Hbase分布式集群架构“完全篇”
本文收录在Linux运维企业架构实战系列 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建,操作完成后整理的个人心得,分享给大家~~~ 1.认识Hadoop和Hbase 1.1 hadoop简 ...
- 项目十八-Hadoop+Hbase分布式集群架构“完全篇”
本文收录在Linux运维企业架构实战系列 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建,操作完成后整理的个人心得,分享给大家~~~ 1.认识Hadoop和Hbase 1.1 hadoop简 ...
- 【Spark-core学习之三】 Spark集群搭建 & spark-shell & Master HA
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- 【kafka学习之三】kafka集群运维
kafka集群维护一.kafka集群启停#启动kafka/home/cluster/kafka211/bin/kafka-server-start.sh -daemon /home/cluster/k ...
随机推荐
- Linux学习笔记之AIX系统上压缩与解压文件
0x00 概述 AIX机器真难用,一时半会还真适应不了. 0x01 压缩tar 命令格式: # tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加 ...
- C# vb .NET读取识别条形码线性条码ISBN
ISBN是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的条 ...
- vue工作原理分析
初始化 在 new Vue() 时会调⽤用_init()进⾏行行初始化,会初始化各种实例例⽅方法.全局⽅方法.执⾏行行⼀一些⽣生命周期. 初始化props. data等状态.其中最重要的是data的「 ...
- SPring boot jpa 封装查询条件
最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification /** * 定义一 ...
- SpingMVC流程图
Struts的请求流程 springmvc的流程 0.struts2 MVC框架 Controller Hibernate 持久化框架 Model spring ...
- Excel分列,Excel 列拆分,Excel根据分隔符号拆分某列
解决方案: https://zhidao.baidu.com/question/572807483.html 步骤:数据--分列--下一步--其它---下一步-- 注意的此操作会覆盖当前列和后n列(根 ...
- IoU与非极大值抑制(NMS)的理解与实现
1. IoU(区域交并比) 计算IoU的公式如下图,可以看到IoU是一个比值,即交并比. 在分子中,我们计算预测框和ground-truth之间的重叠区域: 分母是并集区域,或者更简单地说,是预测框和 ...
- 2-剑指offer: 最小的K个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 代码: // 这种topN问题比较常见的是使用堆来解决,最小的k个 ...
- vector、ArryList、LinkedList的区别与联系
vector.ArryList.LinkedList的区别与联系 vectory类:底层 采用数组结构算法,使用了线程锁(synchronized),线程安全,但是性能相对ArryList比较低. A ...
- lynis安装和扫描Linux的安全漏洞
今天客户的服务器出了点问题需要排查具体的原因,在德国朋友的建议下用Lynis进行扫描,Lynis是Linux系统中的审计工具,能够对Linux系统的安全进行检测,在对系统进行扫描检测后,会生成安全报告 ...