深入 etcd — Raft共识算法

etcd 的高可靠性源于 Raft 共识算法,这类似于 Zookeeper 的 Paxos 强一致性算法, 但是 Paxos 却非常的晦涩难懂,想要彻底理解,估计头发要掉不少. Raft 也是用于保证分布式环境下多节点数据的一致性, 但相较于 Paxos 更加易懂. Raft 的原理可以理解为 Leader Selection 过程的算法.在一个集群中,必然会存在三种可能的角色: Leader :集群中仅有一个,是内部数据同步的发起者与外部数据的入口 Follower : 在集群存在 Leader 的情况下,其余皆是 Follower,它们处理来自 Leader 和 Candidate 的请求 Candidate :用于继承 … “深入 etcd — Raft共识算法”

Read More

深入 etcd — 架构

etcd 是用go语言实现的一个高可用,强一致性的KV存储系统,而由于作为 Kubernetes 的数据存储和同步的重要组件所以最近很火. etcd 作为一个存储系统,可用于配置共享和服务发现,它有以下四个特点: 简单: 基于 HTTP+JSON 的 API 让你用 curl 命令就可以轻松使用 安全: 支持SSL通信认证机制 快速: 支持每实例每秒超一千次的写操作 稳定: 内部使用一致性共识算法 Raft 实现了分布式 etcd 内部架构 etcd 主要分为四个部分: HTTP Server: 用于处理用户发送的API请求以及其它 etcd 节点的同步与心跳信息请求 Store:用于处理 etcd 支持的各类功能的事务. 包括数据索引,节点状态变更,监控与反馈,事件处理与执行等等, … “深入 etcd — 架构”

Read More

创建基于Calico网络的Kubernetes 1.7.6

Calico 网络的部署类似之前的 Flannel 网络,只需替换掉 Flannel,其他都无需修改便可生效. 准备环境 Master节点的配置建议 2U2G 起,Node 节点的配置建议 2U2G 起. 系统为 CentOS 7 ,需要配置各个节点的名称,IP,全部流程使用 root 权限,关闭 SELinux 与 Firewalld 服务. 节点名称和IP 三个Master节点,既为master也为node,一个纯Node节点. Node Name IP master1 192.168.85.141 master2 192.168.85.142 master3 192.168.85.143 将每个节点的Hostname改为对应的Node Name: … “创建基于Calico网络的Kubernetes 1.7.6”

Read More

创建基于Fannel网络的Kubernetes 1.7.6

准备环境 Master节点的配置建议 2U2G 起,Node 节点的配置建议 2U2G 起. 系统为 CentOS 7 ,需要配置各个节点的名称,IP,全部流程使用 root 权限,关闭 SELinux 与 Firewalld 服务. 节点名称和IP 三个Master节点,既为master也为node,一个纯Node节点. Node Name IP master1 192.168.85.141 master2 192.168.85.142 master3 192.168.85.143 将每个节点的Hostname改为对应的Node Name: # master1 hostnamectl –static set-hostname … “创建基于Fannel网络的Kubernetes 1.7.6”

Read More

kube-apiserver搭配etcd2显示rpc error: code = 13 desc = transport is closing解决记录

code=13 按照官方的定义,应该是INTERNAL,即来自内部的错误,但有时也是自己配置上的错误. 在Ubuntu 16.04上安装kubernetes,etcd是直接apt-get安装的,当前版本为2.2.5,而kubernetes在1.5版本后默认使用etcd3的配置项。 因此在创建kube-apiserver.service配置文件时,需要指定etcd版本只需加入–storage-backend=etcd2参数即可. Ubuntu16.04的kube-apiserver.service配置文件示例,其中192.168.1.220替换为本机IP: [Unit] Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] User=root ExecStart=/usr/bin/kube-apiserver \ –admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \ –advertise-address=192.168.1.220 \ –allow-privileged=true \ –apiserver-count=1 \ –audit-log-maxage=30 \ –audit-log-maxbackup=1 \ –audit-log-maxsize=100 \ –audit-log-path=/var/lib/audit.log \ –authorization-mode=RBAC \ –bind-address=192.168.1.220 … “kube-apiserver搭配etcd2显示rpc error: code = 13 desc = transport is closing解决记录”

Read More

etcd cluster-health响应client: etcd cluster is unavailable or misconfigured解决记录

大体分两种情况: 1.防火墙或者iptables的原因. 2.etcd 配置错误. 解决措施 第一种情况比较好解决:开放对应端口/应用白名单,或者直接关闭防火墙 第二种就需要参考官方指导,搞明白每个设置项的功能. 放个Ubuntu16.04的示例,CentOS的改一下依赖的network名称就可以,192.168.1.220替换为本机IP: [Unit] Description=etcd – highly-available key value store Documentation=https://github.com/coreos/etcd Documentation=man:etcd After=network.target Wants=network-online.target [Service] #Environment=DAEMON_ARGS= #Environment=ETCD_NAME=%H #Environment=ETCD_DATA_DIR=/var/lib/etcd/default #EnvironmentFile=-/etc/default/%p Type=notify User=etcd WorkingDirectory=/var/lib/etcd/ PermissionsStartOnly=true #ExecStart=/bin/sh -c “GOMAXPROCS=(nproc) /usr/bin/etcdDAEMON_ARGS” #ExecStart=/usr/bin/etcd $DAEMON_ARGS ExecStart=/usr/bin/etcd … “etcd cluster-health响应client: etcd cluster is unavailable or misconfigured解决记录”

Read More