【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 ...
随机推荐
- 使用Docker之容器的创建、删除
假设我们现在拥有以下镜像 1:启动一个简单容器 docker container run //用于启动一个容器 -it //是容器具有交互性,并与终端进行连接 命令:docker c ...
- 终于理解Macro: Tree-of-symbols , 几个特殊标记符号
- because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checkin
1 前言 浏览器报错误(chrome和firefox都会):because its MIME type ('text/html') is not a supported stylesheet MIME ...
- 适合新手入门Spring Security With JWT的Demo
Demo 地址:https://github.com/Snailclimb/spring-security-jwt-guide .欢迎 star! Spring Security 是Spring 全家 ...
- Matlab混入模式(Mixin)
Mixin是一种类,这种类包含了其他类要使用的特性方法,但不必充当其他类的父类.Matlab无疑是支持多继承的.我们可以利用 Matlab 的这种特性,实现一种叫做 Mixin 的类.MixIn的目的 ...
- 在组件上使用v-model
(1) 等价于: 其中$event.target.value表示获取输入框的值. (2)当用在组件上时,v-model 则会这样: 其中$event表示$emit抛出的值,即$emit的第二个参数. ...
- MySQL连接超时处理
1.由于MySQL默认是8小时的wait_timeout,当超过8小时的连接时间后,在JAVA中调用将出现如下报错 SEVERE EXCEPTION com.mysql.jdbc.exceptions ...
- MySQL主从仅同步指定库
有两种方式,1.在主库上指定主库二进制日志记录的库或忽略的库: vim /etc/my.cnf ... binlog-do-db=xxxx 二进制日志记录的数据库 binlog-ignore-db=x ...
- XGBoost使用教程(进阶篇)三
一.Importing all the libraries import pandas as pdimport numpy as npfrom matplotlib import pyplot as ...
- bootm跳转到kernel的流程
转自 https://blog.csdn.net/ooonebook/article/details/53495021 一.bootm说明 bootm这个命令用于启动一个操作系统映像.它会从映像文件的 ...