Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Etcd在kubernetes集群中的作用

Etcd在kubernetes集群中的作用

作者头像
菲宇
发布于 2019-06-12 08:33:32
发布于 2019-06-12 08:33:32
3.8K00
代码可运行
举报
文章被收录于专栏:菲宇菲宇
运行总次数:0
代码可运行

Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。在后面具体的安装环境中,我们安装的etcd的版本是v3.1.5,整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是:

  • 网络插件flannel、对于其它网络插件也需要用到etcd存储网络的配置信息
  • kubernetes本身,包括各种对象的状态和元信息配置

注意:flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API,所以在下面我们执行etcdctl的时候需要设置ETCDCTL_API环境变量,该变量默认值为2。

原理

Etcd使用的是raft一致性算法来实现的,是一款分布式的一致性KV存储,主要用于共享配置和服务发现。关于raft一致性算法请参考该动画演示

关于Etcd的原理解析请参考Etcd 架构与实现解析

使用Etcd存储Flannel网络信息

我们在安装Flannel的时候配置了FLANNEL_ETCD_PREFIX="/kube-centos/network"参数,这是Flannel查询etcd的目录地址。

查看Etcd中存储的flannel网络信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ etcdctl --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem ls /kube-centos/network -r
2018-01-19 18:38:22.768145 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
/kube-centos/network/config
/kube-centos/network/subnets
/kube-centos/network/subnets/172.30.31.0-24
/kube-centos/network/subnets/172.30.20.0-24
/kube-centos/network/subnets/172.30.23.0-24

查看flannel的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ etcdctl --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem get /kube-centos/network/config
2018-01-19 18:38:22.768145 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "host-gw" } }

使用Etcd存储Kubernetes对象信息

Kubernetes使用etcd v3的API操作etcd中的数据。所有的资源对象都保存在/registry路径下,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ThirdPartyResourceData
apiextensions.k8s.io
apiregistration.k8s.io
certificatesigningrequests
clusterrolebindings
clusterroles
configmaps
controllerrevisions
controllers
daemonsets
deployments
events
horizontalpodautoscalers
ingress
limitranges
minions
monitoring.coreos.com
namespaces
persistentvolumeclaims
persistentvolumes
poddisruptionbudgets
pods
ranges
replicasets
resourcequotas
rolebindings
roles
secrets
serviceaccounts
services
statefulsets
storageclasses
thirdpartyresources

如果你还创建了CRD(自定义资源定义),则在此会出现CRD的API。

查看集群中所有的Pod信息

例如我们直接从etcd中查看kubernetes集群中所有的pod的信息,可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ETCDCTL_API=3 etcdctl get /registry/pods --prefix -w json|python -m json.tool

此时将看到json格式输出的结果,其中的key使用了base64编码,关于etcdctl命令的详细用法请参考使用etcdctl访问kubernetes数据

Etcd V2与V3版本API的区别

Etcd V2和V3之间的数据结构完全不同,互不兼容,也就是说使用V2版本的API创建的数据只能使用V2的API访问,V3的版本的API创建的数据只能使用V3的API访问。这就造成我们访问etcd中保存的flannel的数据需要使用etcdctl的V2版本的客户端,而访问kubernetes的数据需要设置ETCDCTL_API=3环境变量来指定V3版本的API。

Etcd数据备份

我们安装的时候指定的Etcd数据的存储路径是/var/lib/etcd,一定要对该目录做好备份。

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
07-部署Flanneld网络
部署Flanneld网络 Flanneld:用于解决容器之间网络互通,这里我们要配置TLS认证。 Docker1.12.5:docker的安装很简单,这里也不说了。 配置Flanneld 这里我们使用yum的方式部署Flanneld和docker # yum install flannel docker -y service配置文件/etc/systemd/system/flanneld.service [Unit] Description=Flanneld overlay address etcd a
程序员同行者
2018/07/03
9470
Kubernetes 1.8.6 集群部署–Etcd集群(三)
因为虚拟机有限,我的DELL工作站年龄也不小了,暂时就开三个节点(三个虚机均为2H , 2G),集群也都部署在这三台机器,当然线上的资源充足的话肯定是要和master以及node分开部署的。
老七Linux
2018/05/14
1.6K4
Kubernetes 1.8.6 集群部署–Etcd集群(三)
ETCD集群部署
/opt/soft/etcd/etcd-v3.4.4-linux-amd64.tar.gz 下载地址:https://github.com/etcd-io/etcd/releases
烂猪皮
2020/11/02
2K0
Kubernetes网络部署方案
现在网络上流传很多Kubernetes的部署和搭建的文档,其中比较出名就是Kubernetes The Hard Way (https://github.com/kelseyhightower/kubernetes-the-hard-way),还有基于这个翻译和衍生的版本follow-me-install-kubernetes-cluster (https://github.com/opsnull/follow-me-install-kubernetes-cluster),这两篇文章带我走过了Kub
小小科
2018/05/04
1.7K0
Kubernetes网络部署方案
深入玩转K8S之手动部署KubernetesV1.11版本及常见问题解答
最开始通过Kubeadm静默黑盒(自动)来安装,为什么这么说呢因为我们是通过Kubeadm自动安装的,并不知道做了那些具体的操作。这也是为什么写这篇手动部署的原因,是为了让大家更好的了解下和体验下两者区别以及部署流程
DevinGeng
2019/04/09
8540
深入玩转K8S之手动部署KubernetesV1.11版本及常见问题解答
03-创建高可用 etcd 集群
本文档记录自己的学习历程! 创建高可用 etcd 集群 kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点使用以下机器: 192.168.1.121 192.168.1.122 192.168.1.123 TLS 认证文件 需要为 etcd 集群创建加密通信的 TLS 证书,这里复用之前创建的 kubernetes 证书 # cp ca.pem kubernetes-key.pem kubernetes.pem /etc/kubernete
程序员同行者
2018/07/03
8420
Kubernetes(k8s)1.14 离线版集群 - 部署高可用的Etcd(3.3.17版)集群并搭建Flannel网络
声明: 如果您有更好的技术与作者分享,或者商业合作; 请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。 如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由 作者一经查实,马上删除。
Mr.Vv
2020/06/11
5850
Kubernetes(k8s)1.14 离线版集群 - 部署高可用的Etcd(3.3.17版)集群并搭建Flannel网络
Kubernetes集群搭建之CNI-Flanneld部署篇
本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复【K8s实战】获取
程序员同行者
2019/03/19
2K0
Kubernetes集群搭建之CNI-Flanneld部署篇
007.Kubernetes二进制部署Flannel
kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。
木二
2019/11/18
1K0
k8s集群部署四(部署Flannel网络) 顶
wget https://github.com/coreos/flannel/releases/download/v0.9.1/flannel-v0.9.1-linux-amd64.tar.gz
算法之名
2019/08/20
2.6K0
k8s集群部署四(部署Flannel网络)
                                                                            顶
Kubernetes容器集群管理环境 - 完整部署(上篇)
Kubernetes(通常称为"K8S")是Google开源的容器集群管理系统。其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群,Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。Kubernetes是一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes, 可以快速有效地响应用户需求: -> 快速而有预期地部署应用; -> 极速地扩展你的应用; -> 无缝对接新的应用功能; -> 节省资源,优化硬件资源的使用;
洗尽了浮华
2019/07/08
1.3K0
超全etcd管理指南,不看也得收藏
生产环境中给etcd配置证书相当重要,如果没有证书,那么k8s集群很容易被黑客利用而去挖矿什么的。做法非常简单,比如你下了一个不安全的镜像,通过程序扫描到etcd的ip和端口,那么黑客就可以绕开apiserver的认证直接写数据,写一些deployment pod等等,apiserver就会读到这些,从而去部署黑客的程序。 我们就有一个集群这样被利用去挖矿了,安全无小事,如果黑客恶意攻击也可轻松删除你的所有数据,所以证书与定期备份都很重要,即便有多个etcd节点,本文深入探讨etcd管理的重要的几个东西。
sealyun
2019/07/25
1.3K0
第三篇(二进制部署k8s集群---Flannel网络和keepalived+haproxy高可用)
此文将搭建flannel网络,目的使跨主机的docker能够互相通信,也是保障kubernetes集群的网络基础和保障,和ha高可用。 部署的服务器为: master1 192.168.206.31 master2 192.168.206.32 master3 192.168.206.33 node1 192.168.206.41 node2 192.168.206.42 node3 192.168.206.43 VIP:192.168.206.30 ha1 192.168.206.36 ha2 192.168.206.37
@凌晨
2020/11/23
5660
k8s集群网络(12)-flannel udp overlay网络setup
在上一篇文章里我们介绍了k8s集群中flannel vxlan overlay网络中pod到pod的通讯。在这里我们主要介绍flannel udp overlay网络setup,以便后面分析flannel udp overlay网络中pod到pod的通讯过程。
TA码字
2020/04/01
4340
k8s集群网络(12)-flannel udp overlay网络setup
第二篇(二进制部署k8s集群---etcd集群搭建)
本文etcd集群用三台centos7搭建完成。 etcd1:192.168.206.31 etcd2:192.168.206.32 etcd3:192.168.206.33
@凌晨
2020/11/23
1.1K0
Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
星哥玩云
2022/07/28
5220
Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)
k8s集群网络(10)-flannel vxlan overlay网络setup
在上一篇文章里我们对基于iptable和ipvs模式下cluster ip类型的service和node port类型的service做了总结和对比,在这里我们主要介绍flannel overlay网络setup,以便后面分析pod到pod的通讯过程。对于flannel overlay网络有vxlan 方式和udp方式,这里我们介绍vxlan 方式的setup。对于vxlan 是一种overlay网路技术,意在利用在三层网络之上构建二层网络。对于二层网络一般我们采用vlan技术来隔离,不过vlan在数据包里总共4个字节,有12bit用来标识不同的二层网络,这样总共可以有4000多个vlan。而vxlan header有8个字节,有24bit用来标识不同的二层网络,这样总共是1600多万个vxlan。更多关于vxlan可以参考https://tools.ietf.org/html/rfc7348
TA码字
2020/04/01
7130
k8s集群网络(10)-flannel vxlan overlay网络setup
k8s集群部署三(部署Etcd集群) 顶
安装的下载地址为https://github.com/etcd-io/etcd/releases/tag/v3.2.12,找到其中的
算法之名
2019/08/20
1.9K0
k8s集群部署三(部署Etcd集群)
                                                                            顶
使用二进制包在生产环境部署 Kubernetes v1.13.2 集群
由于众所周知的原因,在国内无法直接访问Google的服务。二进制包由于其下载方便、灵活定制而深受广大kubernetes使用者喜爱,成为企业部署生产环境比较流行的方式之一,Kubernetes v1.13.2是目前的最新版本。安装部署过程可能比较复杂、繁琐,因此在安装过程中尽可能将操作步骤脚本话。文中涉及到的脚本已经通过本人测试。
耕耘实录
2019/07/04
8730
012.Kubernetes二进制部署worker节点Flannel
kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。
木二
2019/11/18
4720
012.Kubernetes二进制部署worker节点Flannel
推荐阅读
相关推荐
07-部署Flanneld网络
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验