Docker系列(十一):Kubernetes集群集群部署实践
Kubernetes分布式集群架构



服务注册和服务发现问题怎么解决的?
分布式通讯的核心就是ip加端口
每个服务分配一个不变的虚拟IP+端口
系统env环境变量里有每个服务的服务名称到IP的映射
如下:

client = new redis\Client([
'scheme' => 'tcp',
'host' => getenv('REDIS_MASTER_SERVICE_HOST') ,
'port' => $read_port,
]);
对程序没有任何的入侵
服务的负载均衡问题怎么解决的?
每个节点上都有一个软件实现的服务代理来实现负载均衡

kube-proxy每个node上都会部署,一个任务是代理,一个任务是负载均衡。
kube-proxy如上图所示,既可以转发给本地的po的,也可以转发给其他的node中pod
服务的规模部署问题怎么解决的?

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


Kubernetes 集群架构例子


1.创建redis-master Pod和服务
redis-master-controller.yaml,下面给出了该文件的完整内容


2. 创建redis-slave Pod和服务



3. 创建php frontend Pod和服务


注意:type:nodeport每一个node上开一个端口,访问任何一个node的30001就可以到容器里面的80,相当于docker中的端口映射,就是讲容器中的端口映射到主机上的端口,为了让集群之外的能访问容器的port,应为容器是属于内部的,集群之外的是访问不了的。

根据是读操作还是写操作来判断走哪个

注意:访问的地址是node节点的ip而不是master加点的ip
集群运维常见问题
资源隔离与调度问题
怎么把某些服务调度到特定的节点上去?

给node加入lable
rc上面设置nodeselector
扩容与升级问题

扩容:kubectl scale。。。。中的replicas参数
滚动升级:加入A中有二十个用例,在升级的过程中是会终端的,希望是不间断的服务,先减一个pod,更新一个pod加进去,再减去一个pod。。。。。。用法升级版本号
image:v2
资源配额问题

如果用到资源配额,需要增加插件 如上图右上角的命令LimitRanger,ResourceQuota
kubernetes权威指南:
当Kubernetes启动一个容器时,会将CPU配额值乘以1024并转为整数传递给docker run的–cpu-shares参数,之所以乘以1024是因为Docker的cpu-shares参数是以1024 为基数计算CPU时间的。另外,Docker官方文档里解释说cpu-shares是一个相对权 重值 (relative weight),因此Kubernetes官方文档里解释cpu: 0.5表示该容器占用0.5 个CPU计算时间的说法其实是不准确的。仅当该节点是单核心CPU而且只运行两个 容器,每个容器的CPU配额设定为0.5时,上述说法才成立。假如一个节点上同时运 行了3个容器A,B,C,其中A容器的CPU配额设置为1,B与C设置为0.5。那么,当 系统的CPU利用率达到100%时,A容器只占用了1X100/(1+0.5+0.5)=50%的CPU时 间,而B与C分别占用25%的CPU时间。如果此时我们加入一个新的容器D,它的 CPU配额也设置为1,则通过计算我们得到A此时只占据33%的CPU时间。对于目前 主流的多核CPU,容器的CPU配额会在多核心上进行承担。因此在多核CPU上,即 使某个容器声明CPU<1,它也可能会占满多个CPU核。例如2个设定cpu=0.5的容器 运行在4核的CPU上,每个容器可能会用光4*0.5/(0.5+0.5)=2个CPU核。

Docker系列(十一):Kubernetes集群集群部署实践的更多相关文章
- Docker 系列七(Dubbo 微服务部署实践).
一.前言 之前我们公司部署服务,就是大家都懂的那一套(安装JDK.Tomcat —> 编译好文件或者打war包上传 —> 启动Tomcat),这种部署方式一直持续了很久,带来的问题也很多: ...
- K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署
Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署
Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...
- K8S从入门到放弃系列-(4)kubernetes集群之kubectl命令行工具部署
摘要:随着版本的不断迭代,k8s为了集群安全,集群中趋向采用TLS+RBAC的安全配置方式,所以我们在部署过程中,所有组件都需要证书,并启用RBAC认证. 我们这里采用二进制安装,下载解压后,把对应组 ...
- K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署
集群部署好后,如果我们想知道集群中每个节点及节点上的pod资源使用情况,命令行下可以直接使用kubectl top node/pod来查看资源使用情况,默认此命令不能正常使用,需要我们部署对应api资 ...
- 万台规模下的SDN控制器集群部署实践
目前在网络世界里,云计算.虚拟化.SDN.NFV这些话题都非常热.今天借这个机会我跟大家一起来一场SDN的深度之旅,从概念一直到实践一直到一些具体的技术. 本次分享分为三个主要部分: SDN & ...
- K8S从入门到放弃系列-(9)kubernetes集群之kubelet部署
摘要: Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volume ...
- K8S从入门到放弃系列-(14)Kubernetes集群Dashboard部署
Dashboard是k8s的web界面,用户可以用 Kubernetes Dashboard 部署容器化的应用.监控应用.并对集群本身进行管理,在 Kubernetes Dashboard 中可以查看 ...
随机推荐
- 第四天:语句、表达式与if分支、循环语句
表达式 代码风格 代码格式指南 PEP8 缩进4空格 一行不超过79 空行 赋值语句 基本 (x,y) = (5,10) x [x,y,z] = [1,2,3] x a,b,c = 'uhk' a 5 ...
- OpenCV3 VideoCapture buffer
在ubuntu16.04下写关于opencv的工程,在调用摄像头时发现VideoCapture有5帧的buffer,所以采用5个capture>>mat来处理. if (FlagConti ...
- ES6 学习 -- 解构赋值
一.数组解构 **数组解构,解构出来的值跟数组下标是一一对应的,如果左边变量多于右边数组,则左边后面部分变量值为undefined,如果右边数组元素个数多于左边解构变量个数,则左边变量全都有值,且一一 ...
- Web介绍
web概念概述 javaWeb: 使用java语言开发基于互联网的项目 软件架构: 1.C/S:Client/Server 客户端/服务器端 2.B/S:Browser/Server 浏览器/服务器端 ...
- Linux-iptables-route-rule
详情: http://www.mamicode.com/info-detail-1412618.html 最后面有粘贴 linux系统路由表 linux一共0-255个路由表 linux可以自定义从 ...
- cmd命令符
运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集 1. gpedit.msc-----组策略 2. ...
- PHP算法之IP 地址无效化
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ".". 示例 ...
- Docker 尝试安装rabbitmq实践笔记
docker pull rabbitmq 自定義的rabbitmq Dockerfile # base image FROM rabbitmq:3.7-management # running req ...
- scala中类的简单使用记录
import scala.collection.mutable.ArrayBuffer /** * scala 中内部类的使用 */ class Classes { class Stu(name:St ...
- SpringBoot生产/开发/测试多环境的选择
多环境选择 一般一套程序会被运行在多部不同的环境中,比如开发.测试.生产环境,每个环境的数据库地址,服务器端口这些都不经相同,若因为环境的变动而去改变配置的的参数,明显是不合理且易造成错误的 对于不同 ...