etcd

Etcd介绍

一笑奈何 提交于 2020-01-08 19:54:06
分布式,可靠的,kv分布式系统 Raft算法 从多个节点选出leader,leader负责数据的同步和分发。 ### quorum=(n+1)/2 3个节点容忍1个故障 5个节点容忍2个故障 API PUT(key,value)/Delete(key) Get(key)/Get(keyFrom,keyEnd) key的范围 Watch(key/keyPrefix) Transactions(if/then/else ops).commit() 满足条件,执行操纵 Leases:Grant/Revoke/KeepAlive etcd的数据版本号机制 term:全局单调递增 (整个集群leader的任期,leader进行切换,term加1) revision: 全局单调递增 (代表的kv修改一次,revision加1) KeyValue: create_revision:创建的次数 mod_revision:修改的次数 version:此次key修改的次数 一个数据有多个版本,通过定期Compaction来清理历史数据 lease(租约) 性能优化 Ratf层 网络IO 节点之间的RTT/带宽 磁盘IO 写入延迟 Storage 磁盘IO fdatasync延迟 索引层所的block boltdb Tx的锁 boltdb本身的性能 其他 内核参数 grpc api层的延迟

etcd常用命令

旧时模样 提交于 2020-01-08 09:28:18
设置环境变量,版本3,etcdctl的版本2和版本3并不兼容。 export ETCDCTL_API=3 增、查、删 etcdctl put /testdir/testkey "Hello world1" etcdctl get /testdir/testkey etcdctl del /testdir/testkey 可以把key理解成目录 etcdctl put /testdir/testkey1 "Hello world1" etcdctl put /testdir/testkey2 "Hello world2" etcdctl put /testdir/testkey3 "Hello world3" 批量获取目录下的内容 etcdctl get /testdir/ --prefix 只看key etcdctl get /testdir/ --prefix --keys-only 只看value etcdctl get /testdir/ --prefix --print-value-only //watch监听key etcdctl watch /wt/k 开启监听 另一启动一个客户端 etcdctl put /wt/k v1 有反应 etcdctl put /wt/k v2 有反应 etcdctl get /wt/k 没反应 etcdctl del /wt/k 有反应

k8s实践(十五):Centos7.6部署k8s v1.16.4高可用集群(主备模式)

让人想犯罪 __ 提交于 2020-01-07 15:43:53
一、部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6.1810 172.27.34.3 18.09.9 v0.11.0 v1.3.5 4C4G control plane master02 7.6.1810 172.27.34.4 18.09.9 v0.11.0 v1.3.5 4C4G control plane master03 7.6.1810 172.27.34.5 18.09.9 v0.11.0 v1.3.5 4C4G control plane work01 7.6.1810 172.27.34.93 18.09.9 / / 4C4G worker nodes work02 7.6.1810 172.27.34.94 18.09.9 / / 4C4G worker nodes work03 7.6.1810 172.27.34.95 18.09.9 / / 4C4G worker nodes VIP 7.6.1810 172.27.34.130 18.09.9 v0.11.0 v1.3.5 4C4G 在control plane上浮动 client 7.6.1810 172.27.34.234 / / / 4C4G client

使用kubeadm一键部署kubernetes集群

放肆的年华 提交于 2020-01-07 13:14:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用kubeadm一键部署kubernetes集群 k8s-deploy 使用kubeadm一键部署kubernetes集群,让你完美避过各种坑。 特点: 一键部署,避免踩坑 不需要翻墙,不需要设置代理 使用国内的Yum源、Docker镜像和Kubernetes镜像 安装速度快,5分钟1个master,3分钟1个node 不设前提,能上外网的CentOS7就行 版本支持: kubernetes v1.10.3, v1.11.0 docker-ce 17.03.2 Flannel network CentOS7 64 bits 限制: 需要联网才能安装 以root用户运行 只支持创建单master+单etcd,还不支持master和etcd高可用 k8s-deploy 打开 k8s-deploy 查看源代码,或者直接运行下面命令clone。 git clone https://github.com/cookcodeblog/k8s-deploy.git 1 MIT license。 部署kubernetes master 克隆(或复制) kubeadm_v1.10.3 或 kubeadm_v1.11.0 目录到master机器上,以root用户运行 chmod u+x *.sh 。 一键部署kubernetes

k8s架构基础介绍

ぐ巨炮叔叔 提交于 2020-01-06 17:07:17
kubernetes架构 在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。 Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。 每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。 Kubernetes主要由以下几个核心组件组成: kubectl: k8s是命令行端,用来发送客户的操作指令。 master节点 1. API server[资源操作入口] :是k8s集群的前端接口,各种各样客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源。它提供了HTTP/HTTPS RESTful API,即K8S API。 提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API Server访问集群状态。 第一,是为了保证集群状态访问的安全。 第二,是为了隔离集群状态访问的方式和后端存储实现的方式:API Server是状态访问的方式,不会因为后端存储技术etcd的改变而改变。 作为kubernetes系统的入口,封装了核心对象的增删改查操作,以 RESTFul 接口方式提供给外部客户和内部组件调用。对相关的资源数据“全量查询”+“变化监听”,实时完成相关的业务功能。 2. Scheduler

etcd 启用 https

こ雲淡風輕ζ 提交于 2020-01-06 05:45:09
文章目录 1, 生成 TLS 秘钥对 2,拷贝密钥对到所有节点 3,配置 etcd 使用证书 4,测试 etcd 是否正常 5,配置 kube-apiserver 使用 CA 连接 etcd 6,测试 kube-apiserver 7,未解决的问题 SSL/TSL 认证分单向认证和双向认证两种方式。简单说就是单向认证只是客户端对服务端的身份进行验证,双向认证是客户端和服务端互相进行身份认证。就比如,我们登录淘宝买东西,为了防止我们登录的是假淘宝网站,此时我们通过浏览器打开淘宝买东西时,浏览器会验证我们登录的网站是否是真的淘宝的网站,而淘宝网站不关心我们是否“合法”,这就是单向认证。而双向认证是服务端也需要对客户端做出认证。 因为大部分 kubernetes 基于内网部署,而内网应该都会采用私有 IP 地址通讯,权威 CA 好像只能签署域名证书,对于签署到 IP 可能无法实现。所以我们需要预先自建 CA 签发证书。 Generate self-signed certificates 官方参考文档 官方推荐使用 cfssl 来自建 CA 签发证书,当然你也可以用众人熟知的 OpenSSL 或者 easy-rsa 。以下步骤遵循官方文档: 1, 生成 TLS 秘钥对 生成步骤: 1,下载 cfssl 2,初始化证书颁发机构 3,配置 CA 选项 4,生成服务器端证书 5,生成对等证书 6

062、如何使用flannel host-gw backend(2019-04-02 周二)

ⅰ亾dé卋堺 提交于 2020-01-06 05:44:36
参考 https://www.cnblogs.com/CloudMan6/p/7457653.html flannel 支持多种backend,前面学习的是 vxlan backend ,host-gw 是 flannel的另一个backend。 与vxlan不同,host-gw 不会封装数据包,而是在主机的路由表中创建到其他主机的subnet 路由条目,从而实现容器跨主机通信。要使用host-gw 首先要修改flannel的配置 flannel-config.json : 将type中的vxlan改为host-gw # 1、配置etcd数据库,更改type [root@docker-machine ~]# cat flannel-config.json { "Network": "10.2.0.0/16", "SubnetLen": 24, "Backend": { "Type": "host-gw" } } [root@docker-machine ~]# etcdctl --endpoints=10.12.31.213:2379 set /docker-test/network/config < flannel-config.json { "Network": "10.2.0.0/16", "SubnetLen": 24, "Backend": { "Type": "host

etcd集群部署与遇到的坑(转)

跟風遠走 提交于 2020-01-06 05:39:09
在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑。今天记录一下,为了以后更好操作。 ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件; —wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。 —name 节点名称 —initial-advertise-peer-urls 告知集群其他节点url. — listen-peer-urls 监听URL,用于与其他节点通讯 — advertise-client-urls 告知客户端url, 也就是服务的url — initial-cluster-token 集群的ID — initial-cluster 集群中所有节点 节点迁移 在生产环境中,不可避免遇到机器硬件故障。当遇到硬件故障发生的时候,我们需要快速恢复节点。ETCD集群可以做到在不丢失数据的,并且不改变节点ID的情况下,迁移节点。 具体办法是: 1)停止待迁移节点上的etc进程; 2)将数据目录打包复制到新的节点; 3)更新该节点对应集群中peer url,让其指向新的节点; 4)使用相同的配置,在新的节点上启动etcd进程 etcd配置 node1 编辑etcd启动脚本 /usr

Practical consequences of missing consensus on a Kubernetes cluster?

放肆的年华 提交于 2020-01-05 08:26:17
问题 What exactly are the practical consequences of missing consensus on a Kubernetes cluster? Or in other words: which functions on a Kubernetes cluster require consensus? What will work, what won't work? For example (and really only for example): will existing pods keep running? can pods still be scaled horizontally? Example scenario: A cluster with two nodes loses one node. No consensus possible. 回答1: Consensus is fundamental to etcd - the distributed database that Kubernetes is built upon.

k8s架构基本概念

烈酒焚心 提交于 2020-01-05 05:43:46
kubectl: k8s是命令行端,用来发送客户的操作指令。 API server:是k8s集群的前端接口,各种客户端工具以及k8s的其他组件可以通过它管理k8s集群的各种资源。它提供了HTTP/HTTPS RESTful API,即K8S API. Scheduler:负责决定将Pod放在哪个Node上运行。在调度时,会充分考虑集群的拓扑结构,当前各个节点的负载情况,以及应对高可用、性能、数据亲和性和需求。 Controller Manager:负责管理集群的各种资源,保证资源处于预期的状态。它由多种Controller组成,包括Replication Controller、Endpoints Controller. Namespace Controller、Serviceaccounts Controller等等。 Etcd:负责保存k8s集群的配置信息和各种资源的状态信息。当数据发生变化时,etcd会快速的通知k8s相关组件。第三方组件,它有可替换方案。Consul、 zookeeper Pod: k8s集群的最小组成单位。一个Pod内,可以运行一个或多个容器。大多数情况下,一个Pod内只有一个Container容器。 Flanner:是k8s集群网路方案,可以保证Pod的跨主机通信。第三方解决方案,也有替换方案。 查看应用在哪个节点 [root@master ~]#