etcd

图解kubernetes中etcd增删改查的工业实现

与世无争的帅哥 提交于 2020-03-05 13:58:50
kubernetes中基于etcd实现集中的数据存储,今天来学习下基于etcd如何实现数据读取一致性、更新一致性、事务的具体实现 1. 数据的存储与版本 1.1 数据存储的转换 在k8s中有部分数据的存储是需要经过处理之后才能存储的,比如secret这种加密的数据,既然要存储就至少包含两个操作,加密存储,解密读取,transformer就是为了完成该操作而实现的,其在进行etcd数据存储的时候回对数据进行加密,而在读取的时候,则会进行解密 1.2 资源版本revision 在etcd中进行修改(增删改)操作的时候,都会递增revision,而在k8s中也通过该值来作为k8s资源的ResourceVersion,该机制也是实现watch的关键机制,在操作etcd解码从etcd获取的数据的时候,会通过versioner组件来为资源动态的修改该值 1.3 数据模型的映射 将数据从etcd中读取后,数据本身就是一个字节数组,如何将对应的数据转换成我们真正的运行时对象呢?还记得我们之前的scheme与codec么,在这里我们知道对应的数据编码格式,也知道资源对象的类型,则通过codec、字节数组、目标类型,我们就可以完成对应数据的反射 2. 查询接口一致性 etcd中的数据写入是基于leader单点写入和集群quorum机制实现的,并不是一个强一致性的数据写入

Kubernetes服务发现和kube-dns插件

梦想的初衷 提交于 2020-03-02 12:15:46
大纲 kube-dns的主要变化 kube-dns的实现原理 kubedns容器详解 dnsmasq容器简介 exechealthz容器简介 主要变化 服务发现机制未变化,也就是说kube-dns对外的接口是基本没变的。变化主要在于kube-dns插件的内部组成,由原来的四个容器变为了三个。 现在回顾一下上一期所讲的1.2版本kube-dns的组成。 Kube2sky通过K8S API监视K8S Service资源的变化,并根据Service的信息生成DNS记录写入到etcd中。Skydns为集群中的Pod提供DNS查询服务,DNS记录从etcd中读取。Exechealthz提供健康检查功能。 接下来我们再看一下1.4版本kube-dns的组成。对比两张图,可以很直观的看到kube-dns对外接口没有发生变化。Exechealthz是唯一保留的容器,依然提供健康检查。 不同点 1.会检查两个容器的健康状态。 2.为集群提供DNS查询服务的容器由skydns变为了dnsmasq。 3.Kubedns容器替代了kube2sky来监视Service资源。 4.Etcd容器不见了。 相信有些人会好奇DNS记录现在保存在哪了呢?那为了回答这个问题以及了解新版kube-dns的工作原理,我们就进入下一章内容来了解其实现原理。 实现原理 kubedns容器的实现 本着“Talk is cheap

OpenResty从入门到开发一个网关服务(使用etcd作为注册中心)

半腔热情 提交于 2020-03-02 05:31:19
原文连接: https://blog.fengjx.com/openresty/gateway 简介 OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。 ngx_openresty 目前有两大应用目标: 通用目的的 web 应用服务器。在这个目标下,现有的 web 应用技术都可以算是和 OpenResty 或多或少有些类似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括内存使用和 CPU 效率)算是最大的卖点之一。 Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。有些类似的是 NetScaler。其优势在于 Lua 编程带来的巨大灵活性。 引用自: OpenResty最佳实践 入门教程 OpenResty 最佳实践 跟我学OpenResty(Nginx+Lua)开发 目前已经有大佬写了很完整的教程

Kubernetes 架构浅析

只愿长相守 提交于 2020-03-02 03:54:09
最近研究了一段时间的Kubernetes,将我们服务的测试环境服务部署到了Kubernetes上,上周末在团队中分享了下,顺便整理成文章。 阅读对象:对Kubernetes尚未深入了解的同学 首先,为什么要用Kubernetes? 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。 Kubernetes的目标用一张被很多人引用过的图来说明最好: 一句话,Kubernetes的目标是让你可以像管理牲畜一样管理你的服务,而不是像宠物一样,同时提高资源的利用率,让码农关注在应用开发本身,高可用的事情就交给Kubernetes吧。这个图本来是openstack提出的,但纯粹IaaS层的解决方案实现不了这个目标,于是有了Kubernetes。 Kubernetes和Borg系出同门,基本是Borg的开源改进版本,引用Google Borg论文里的说法: it (1) hides the details of resource management and failure handling so its users can focus on application development instead; (2) operates with very high reliability and availability, and supports applica- tions

(十三)SpringBoot微服务 b2b2c 多用户商城系统:注册中心 Consul 使用详解

你离开我真会死。 提交于 2020-03-01 21:03:51
Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求:一零三八七七四六二六。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。 Consul 的优势: 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持。 支持健康检查。 etcd 不提供此功能。 支持 http 和 dns 协议接口。 zookeeper 的集成较为复杂, etcd

(二)搭建一个完成的Kubernetes/K8s集群v.1.16

我是研究僧i 提交于 2020-03-01 20:48:21
单节点集群 多节点集群 注意node通过连接loadbalancer 转发到mateter 的apiserver来进行运作的 集群规划: 角色 ip 组件 K8S-master1 192.168.0.101 kube-apiserver kube-controller-manager kube-scheduleretcd K8S-master2 192.168.0.102 kube-apiserver kube-controller-manager kube-scheduleretcd K8S-node1 192.168.0.103 kubelet kube-proxy docker etcd K8S-node2 192.168.0.104 kubelet kube-proxy docker etcd K8S-load-balancer 192.168.0.106(vip)实际IP105 Nginx L4 1,系统初始化 ##关闭防火墙: systemctl stop firewalld systemctl disable firewalld ##关闭selinux: setenforce 0 ## 临时 sed -i 's/enforcing/disabled/' /etc/selinux/config ## 永久 ##关闭swap: swapoff -a ## 临时 vim

(三)Kubernetes/K8s 高可用架构

≯℡__Kan透↙ 提交于 2020-03-01 20:41:26
高可用架构 采用多master+多lb+keepalive的方案实现(注意其中lb的ip 地址的证书) 1,多master安装 将原master 1 部署文件拷贝到新master,修改bind 地址 启动 注意 由于需要连接etcd 需要拷贝etcd 的证书 scp –r /opt/kubernetes root@192.168.0.102:/opt scp –r /opt/etcd/ssl root@192.168.0.102:/opt/etcd scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.31.64:/usr/lib/systemd/system ##修改apiserver配置文件为本地IP vim /opt/kubernetes/cfg/kube-apiserver.conf --bind-address=192.168.0.102 \ --secure-port=6443 \ --advertise-address=192.168.0.102 \ #启动 for i in $(ls /opt/kubernetes/bin/);do systemctl start $i;systemctl enable $i;

Etcd 与Redis 业务应用场景差异

对着背影说爱祢 提交于 2020-03-01 14:16:47
Redis特点 1. 丰富的数据类型 (string, hash, set ,zset, list 等) 2. 读写性能优异 3. 单线程原子性 4. 可持久化 aof/rdb 5. 支持pub/sub 订阅发布模式 高可用方案:哨兵机制 分布式一致性:redis主从为异步复制模式,一致性无法保证 (多节点数据一致性强依赖网络延迟) 主要适用场景:队列, 缓存,分布式session,等非强一致性需求 ----- Etcd特点 说明:分布式的,一致性的KV存储系统 分布式一致性:基于raft协议,写入数据需要多数节点应答,确认后才会将数据返回给客户端。 复制模式:基于日志复制 主要适用场景:配置管理、服务发现 易用性方面:Etcd 提供了HTTP API 总结:配置管理/服务发现 需要高可用和强一致性,从上面可以看出,Redis并不具备该特性。Redis有着优秀的并发吞吐能力,在web应用中,Redis大多数当缓存,队列使用,缓解数据库压力。 来源: CSDN 作者: pfm685757 链接: https://blog.csdn.net/pfm685757/article/details/104591043

kubernetes容器集群管理-Flannel网络配置

拥有回忆 提交于 2020-02-29 12:30:23
目录 1、master分配地址池 2、两台节点机器安装flannel 3、两台节点机器分别执行flannel.sh脚本 4、验证flannel是否生效 1、master分配地址池 #利用etcd给flannel分配网段 [root@master ssl]# /opt/kubernetes/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.192.128:2379,https://192.168.192.129:2379,https://192.168.192.130:2379" set /coreos.com/network/config '{ "Network": "172.18.0.0/16", "Backend": {"Type": "vxlan"}}' #利用etcd查看flannel已分配网段(两台节点配置完成后查看) [root@manage01 ssl]# /opt/kubernetes/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.192

kubernetes容器编排系统介绍

a 夏天 提交于 2020-02-29 09:13:45
版权声明:本文由turboxu原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/152 来源:腾云阁 https://www.qcloud.com/community Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的经验与教训。 Kubernetes提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上.kubernetes是一个开放的容器调度管理平台,不限定任何一种言语,支持java/C++/go/python等各类应用程序 。 kubernetes是一个完备的分布式系统支持平台,支持多层安全防护、准入机制、多租户应用支撑、透明的服务注册、服务发现、内建负载均衡、强大的故障发现和自我修复机制、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力,完善的管理工具,包括开发、测试、部署、运维监控,一站式的完备的分布式系统开发和支撑平台。 一. 系统架构