导航:首页 > 数据处理 > etcd数据存放在哪个目录下

etcd数据存放在哪个目录下

发布时间:2022-04-11 18:53:33

1. 笔记本etcd什么意思

键值存储仓库,用于配置共享和服务发现。
扩展知识:etcd(读作 et-see-dee)是一种开源的分布式统一键值存储,用于分布式系统或计算机集群的共享配置、服务发现和的调度协调。etcd 有助于促进更加安全的自动更新,协调向主机调度的工作,并帮助设置容器的覆盖网络。

etcd 是许多其他项目的核心组件。最值得注意的是,它是 Kubernetes 的首要数据存储,也是容器编排的实际标准系统。使用 etcd, 云原生应用可以保持更为一致的运行时间,而且在个别服务器发生故障时也能正常工作。应用从 etcd 读取数据并写入到其中;通过分散配置数据,为节点配置提供冗余和弹性。

2. kong网关怎么获取etcd端口

etcd简介与应用场景 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与...
2.
单机模式运行 默认在centos7的yum源里已集成了etcd包,可以通过yum进行安装...
3.
集群模式说明 这里的集群模式是指完全集群模式,当然也可以在单机上通过不同的端口,部署伪...
4.
静态模式 如果只是测试,这里建议使用二进制包进行测试。因为源码包编译的,使用etcd命令...
5.
动态配置 静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能

3. 由于k8s严重依赖etcd中的数据,一旦etcd的数据紊乱,可能造成业务故障。这个问题时速云有解决方案吗

这个问题,目前还没有碰到,不过我们会将服务信息同时存放到另外的存储中,也会对etcd进行备份,这样在出现故障时也可以很容易恢复或者迁移整个集群。

4. etcd是什么东西它和ZooKeeper有什么区别

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。

etcd 集群的工作原理基于 raft 共识算法 (The Raft Consensus Algorithm)。etcd 在 0.5.0 版本中重新实现了 raft 算法,而非像之前那样依赖于第三方库 go-raft 。raft 共识算法的优点在于可以在高效的解决分布式系统中各个节点日志内容一致性问题的同时,也使得集群具备一定的容错能力。即使集群中出现部分节点故障、网络故障等问题,仍可保证其余大多数节点正确的步进。甚至当更多的节点(一般来说超过集群节点总数的一半)出现故障而导致集群不可用时,依然可以保证节点中的数据不会出现错误的结果。

5. 用docker搭建一个高可用可扩展的服务支撑系统怎么做

一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。

一、架构优势

约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:

6. 如何查看kubernetes的更新信息

我们先从整体上看一下Kubernetes的一些理念和基本架构,然后从网络、资源管理、存储、服务发现、负载均衡、高可用、rollingupgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。1.Kubernetes的一些理念:用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。保证系统总是按照用户指定的状态去运行。不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。那些需要担心和不需要担心的事情。更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。对于Kubernetes的架构,可以参考官方文档。大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在Kubernetes的未来版本中解决。2.Kubernetes的主要特性会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性->由于时间有限,只能简单一些了。另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。1)网络Kubernetes的网络方式主要解决以下几个问题:a.紧耦合的容器之间通信,通过Pod和localhost访问解决。b.Pod之间通信,建立通信子网,比如隧道、路由,Flannel、OpenvSwitch、Weave。c.Pod和Service,以及外部系统和Service的通信,引入Service解决。Kubernetes的网络会给每个Pod分配一个IP地址,不需要在Pod之间建立链接,也基本不需要去处理容器和主机之间的端口映射。注意:Pod重建后,IP会被重新分配,所以内网通信不要依赖PodIP;通过Service环境变量或者DNS解决。2)服务发现及负载均衡kube-proxy和DNS,在v1之前,Service含有字段portalip和publicIPs,分别指定了服务的虚拟ip和服务的出口机ip,publicIPs可任意指定成集群中任意包含kube-proxy的节点,可多个。portalIp通过NAT的方式跳转到container的内网地址。在v1版本中,publicIPS被约定废除,标记为deprecatedPublicIPs,仅用作向后兼容,portalIp也改为ClusterIp,而在serviceport定义列表里,增加了nodePort项,即对应node上映射的服务端口。DNS服务以addon的方式,需要安装skydns和kube2dns。kube2dns会通过读取KubernetesAPI获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。大概的DNS的域名记录是servicename.namespace.tenx.domain,“tenx.domain”是提前设置的主域名。注意:kube-proxy在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service的endpints或者Pods上。Kubernetes官方也在修复这个问题。3)资源管理有3个层次的资源限制方式,分别在Container、Pod、Namespace层次。Container层次主要利用容器本身的支持,比如Docker对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。资源管理模型-》简单、通用、准确,并可扩展目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的schelerplugin来支持。其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信Kubernetes的后续版本会有支持。4)高可用主要是指Master节点的HA方式官方推荐利用etcd实现master选举,从多个Master中得到一个kube-apiserver保证至少有一个master可用,实现highavailability。对外以loadbalancer的方式提供入口。这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。一张图帮助大家理解:也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。同时kube-sheller和kube-controller-manager也存在多个,而且伴随着kube-apiserver同一时间只能有一套运行。5)rollingupgradeRC在开始的设计就是让rollingupgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback当前正在执行的upgrade操作。同样,Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。6)存储大家都知道容器本身一般不会对数据进行持久化处理,在Kubernetes中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。Kuberenetes的Volume就是主要来解决上面两个基础问题的。Docker也有Volume的概念,但是相对简单,而且目前的支持很有限,Kubernetes对Volume则有着清晰定义和广泛的支持。其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。创建一个带Volume的Pod:spec.volumes指定这个Pod需要的volume信息spec.containers.volumeMounts指定哪些container需要用到这个VolumeKubernetes对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出Kubernetes社区的活跃程度。emptyDir随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持RAM-backedfilesystemhostPath类似于Docker的本地Volume用于访问一些本地资源(比如本地Docker)。gcePersistentDiskGCEdisk-只有在GoogleCloudEngine平台上可用。awsElasticBlockStore类似于GCEdisk节点必须是AWSEC2的实例nfs-支持网络文件系统。rbd-RadosBlockDevice-Cephsecret用来通过KubernetesAPI向Pod传递敏感信息,使用tmpfs(aRAM-backedfilesystem)persistentVolumeClaim-从抽象的PV中申请资源,而无需关心存储的提供方glusterfsiscsigitRepo根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的:)7)安全一些主要原则:基础设施模块应该通过APIserver交换数据、修改系统状态,而且只有APIserver可以访问后端存储(etcd)。把用户分为不同的角色:Developers/ProjectAdmins/Administrators。允许Developers定义secrets对象,并在pod启动时关联到相关容器。以secret为例,如果kubelet要去pull私有镜像,那么Kubernetes支持以下方式:通过dockerlogin生成.dockercfg文件,进行全局授权。通过在每个namespace上创建用户的secret对象,在创建Pod时指定imagePullSecrets属性(也可以统一设置在serviceAcouunt上),进行授权。认证(Authentication)APIserver支持证书、token、和基本信息三种认证方式。授权(Authorization)通过apiserver的安全端口,authorization会应用到所有http的请求上AlwaysDeny、AlwaysAllow、ABAC三种模式,其他需求可以自己实现Authorizer接口。8)监控比较老的版本Kubernetes需要外接cadvisor主要功能是将node主机的containermetrics抓取出来。在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。Kubernetes集群范围内的监控主要由kubelet、heapster和storagebackend(如influxdb)构建。Heapster可以在集群范围获取metrics和事件数据。它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。注意:heapster目前未到1.0版本,对于小规模的集群监控比较方便。但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache并以standalone的方式独立出k8s平台。

7. yum安装etcd的日志在哪个目录下

都放在/var/cache/yum下了。如果没有的话就用命令find / -name xxx(xxx是包的名字)就可以找到了

8. etcd是什么东西它和ZooKeeper有什么区别

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。
etcd是由CoreOS开发并维护的,灵感来自于 Zo好eeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。
Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。
Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。
etcd 集群的工作原理基于 raft 共识算法 (The Raft Consensus Algorithm)。
etcd 在 0.5.0 版本中重新实现了 raft 算法,而非像之前那样依赖于第三方库 go-raft 。
raft 共识算法的优点在于可以在高效的解决分布式系统中各个节点日志内容一致性问题的同时,也使得集群具备一定的容错能力。
即使集群中出现部分节点故障、网络故障等问题,仍可保证其余大多数节点正确的步进。
甚至当更多的节点(一般来说超过集群节点总数的一半)出现故障而导致集群不可用时,依然可以保证节点中的数据不会出现错误的结果。

9. 怎么在ubuntu上安装kubernetes

1.部署环境:
(1) Ubuntu 14.04 (2台装有该版本的笔记本电脑)
(2) Docker 1.9.1
(3) etcd-2.2.5
(4) Kubernetes 0.9.0

2.配置Ubuntu 14.04
(1) 由于只有两台主机,所以这里一台主机既充当Master又充当minions:
Master(mininos): 192.168.1.101
Mininos: 192.168.1.100
(2) 创建/opt/bin文件夹,后面安装会用:sudo mkdir -p /opt/bin

3.在Master主机上安装etcd-2.2.5
(1)下载: https://github.com/coreos/etcd/releases/download/v2.2.5/etcd-v2.2.5-linux-amd64.tar.gz
(2) 解压文件: tar -zxvf etcd-v2.2.5-linux-amd64.tar.gz
(3)复制etcd到/opt/bin文件夹中: cp etcd-v2.2.5-linux-amd64/etcd /opt/bin/

4.在Master主机中安装Kubernetes 0.9.0(假设安装目录为/home/docker/Downloads)
(1) 下载:https://github.com/kubernetes/kubernetes/releases/download/v0.9.0/kubernetes.tar.gz
(2) 解压kubernetes.tar.gz文件: tar -zxvf /home/docker/Downloads/kubernetes.tar.gz
(3) 进入kubernetes/server目录下: cd /home/docker/Downloads/kubernetes/server
(4) 解压kubernetes-server-linux-amd64.tar.gz文件得到kubernetes:tar -zxvf /home/docker/Downloads/kubernetes-server-linux-amd64.tar.gz
(5)进入kubernetes/server/bin/目录下:cd /home/docker/Downloads/kubernetes/server/kubernetes/server/bin/
(6)复制该目录下所有的文件到/opt/bin/目录下: sudo cp * /opt/bin/
(7)进入到/home/docker/Downloads/kubernetes/cluster/ubuntu目录下: cd /home/docker/Downloads/kubernetes/cluster/ubuntu
(8)执行./util.sh脚本: sudo ./util.sh(该脚本检测/opt/bin/下的相关文件,自动安装kubernetes)
(9)安装完成后可以发现到/etc/default/,/etc/init/,/etc/init.d/目录下多了etcd和kubernetes相关的配置文件和启动文件

5.在Minions上安装kubernetes:(Mininos上不用安装etcd)
在Minions上只需要安装kubelet,kube-proxy即可.安装方法与Master上的安装步骤一样,只是安装完成后将/etc/default,/etc/init/,/etc/init.d/文件夹下的与kube-apiserver,kube-controller-manager,kube-scheler相关的文件删除即可.

6.etcd配置:
(1)修改/etc/default/etcd:
# Etcd Upstart and SysVinit configuration file
# Customize etcd location
# ETCD="/opt/bin/etcd"
# Use ETCD_OPTS to modify the start/restart options
ETCD_OPTS="-listen-client-urls=http://192.168.1.101:4001"
# Add more envionrment settings used by etcd here
(2)删除/etc/init/etcd.conf与/etc/init.d/etcd

7.kubernetes相关配置:
(1).Master节点:
/etc/default/kube-apiserver
# Kube-Apiserver Upstart and SysVinit configuration file
# Customize kube-apiserver binary location
# KUBE_APISERVER="/opt/bin/kube-apiserver"
# Use KUBE_APISERVER_OPTS to modify the start/restart options
KUBE_APISERVER_OPTS="--address=127.0.0.1 \
--port=8080 \
--etcd_servers=http://192.168.1.101:4001 \
--logtostderr=true \
--portal_net=11.1.1.0/24"
# Add more envionrment settings used by kube-apiserver here
/etc/default/ kube-controller-manager
# Kube-Controller-Manager Upstart and SysVinit configuration file
# Customize kube-controller-manager binary location
# KUBE_CONTROLLER_MANAGER="/opt/bin/kube-controller-manager"
# Use KUBE_CONTROLLER_MANAGER_OPTS to modify the start/restart options
KUBE_CONTROLLER_MANAGER_OPTS="--master=127.0.0.1:8080 \
--machines=127.0.0.1,192.168.1.100 \
--logtostderr=true"
# Add more envionrment settings used by kube-controller-manager here
/etc/default/kubelet
# Kubelet Upstart and SysVinit configuration file
# Customize kubelet binary location
# KUBELET="/opt/bin/kubelet"
# Use KUBELET_OPTS to modify the start/restart options
KUBELET_OPTS="--address=127.0.0.1 \
--port=10250 \
--hostname_override=127.0.0.1 \
--etcd_servers=http://192.168.1.101:4001 \
--logtostderr=true"
# Add more envionrment settings used by kube-scheler here
/etc/default/kube-proxy
# Kube-Proxy Upstart and SysVinit configuration file
# Customize kube-proxy binary location
# KUBE_PROXY="/opt/bin/kube-proxy"
# Use KUBE_PROXY_OPTS to modify the start/restart options
KUBE_PROXY_OPTS="--etcd_servers=http://192.168.1.101:4001 \
--logtostderr=true"<pre name="code" class="plain">
# Add more envionrment settings used by kube-apiserver here
/etc/default/kube-scheler
# Kube-Scheler Upstart and SysVinit configuration file
# Customize kube-apiserver binary location
# KUBE_SCHEDULER="/opt/bin/kube-apiserver"
# Use KUBE_SCHEDULER_OPTS to modify the start/restart options
KUBE_SCHEDULER_OPTS="--logtostderr=true \
--master=127.0.0.1:8080"
# Add more envionrment settings used by kube-scheler here
(2)Minions节点
/etc/default/kubelet
# Kubelet Upstart and SysVinit configuration file
# Customize kubelet binary location
# KUBELET="/opt/bin/kubelet"
# Use KUBELET_OPTS to modify the start/restart options
KUBELET_OPTS="--address=0.0.0.0 \
--port=10250 \
--hostname_override=192.168.1.100 \
--etcd_servers=http://192.168.1.101:4001 \
--logtostderr=true"
# Add more envionrment settings used by kube-scheler here
/etc/default/kube-proxy
# Kube-Proxy Upstart and SysVinit configuration file
# Customize kube-proxy binary location
# KUBE_PROXY="/opt/bin/kube-proxy"
# Use KUBE_PROXY_OPTS to modify the start/restart options
KUBE_PROXY_OPTS="--etcd_servers=http://192.168.1.101:4001 \
--logtostderr=true"

# Add more envionrment settings used by kube-apiserver here

8.启动相关服务
Master 节点:
(1).启动docker服务
sudo service docker start
(2).启动etcd服务
sudo etcd -name etcdserver -peer-addr 192.168.1.101:7001 -addr 192.168.1.101:4001 -data-dir /data/etcd -peer-bind-addr 0.0.0.0:7001 -bind-addr 0.0.0.0:4001 &
(3)启动kubernetes相关服务
sudo service kube-apiserver start
sudo service kube-controller-manager start
sudo service kubelet start
sudo service kube-proxy start
sudo service kube-scheler start
Minions节点:
启动kuberbetes相关服务
sudo service kubelet start
sudo service kube-proxy start

9.打开相关端口
Master节点: 打开4001,7001端口
iptables -I INPUT -s 192.168.43.0/24 -p tcp --dport 4001 -j ACCEPT
iptables -I INPUT -s 192.168.43.0/24 -p tcp --dport 7001 -j ACCEPT
Minions节点:打开10250端口
iptables -I INPUT -s 192.168.43.0/24 -p tcp --dport 10250 -j ACCEPT

10. kubernetes 如何获取dashboard cpu使用率是怎么计算的

我们先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。
当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解 Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。
1.Kubernetes的一些理念:
用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。
保证系统总是按照用户指定的状态去运行。
不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。
那些需要担心和不需要担心的事情。
更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。
对于Kubernetes的架构,可以参考官方文档。
大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。
看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在 Kubernetes 的未来版本中解决。
2.Kubernetes的主要特性
会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性 -> 由于时间有限,只能简单一些了。
另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。
1)网络
Kubernetes的网络方式主要解决以下几个问题:
a. 紧耦合的容器之间通信,通过 Pod 和 localhost 访问解决。
b. Pod之间通信,建立通信子网,比如隧道、路由,Flannel、Open vSwitch、Weave。
c. Pod和Service,以及外部系统和Service的通信,引入Service解决。
Kubernetes的网络会给每个Pod分配一个IP地址,不需要在Pod之间建立链接,也基本不需要去处理容器和主机之间的端口映射。
注意:Pod重建后,IP会被重新分配,所以内网通信不要依赖Pod IP;通过Service环境变量或者DNS解决。
2) 服务发现及负载均衡
kube-proxy和DNS, 在v1之前,Service含有字段portalip 和publicIPs, 分别指定了服务的虚拟ip和服务的出口机ip,publicIPs可任意指定成集群中任意包含kube-proxy的节点,可多个。portalIp 通过NAT的方式跳转到container的内网地址。在v1版本中,publicIPS被约定废除,标记为deprecatedPublicIPs,仅用作向后兼容,portalIp也改为ClusterIp, 而在service port 定义列表里,增加了nodePort项,即对应node上映射的服务端口。
DNS服务以addon的方式,需要安装skydns和kube2dns。kube2dns会通过读取Kubernetes API获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。大概的DNS的域名记录是servicename.namespace.tenx.domain, “tenx.domain”是提前设置的主域名。
注意:kube-proxy 在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service 的endpints 或者 Pods上。Kubernetes官方也在修复这个问题。
3)资源管理
有3 个层次的资源限制方式,分别在Container、Pod、Namespace 层次。Container层次主要利用容器本身的支持,比如Docker 对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。
资源管理模型 -》 简单、通用、准确,并可扩展
目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的scheler plugin来支持。其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信Kubernetes的后续版本会有支持。
4)高可用
主要是指Master节点的 HA方式 官方推荐 利用etcd实现master 选举,从多个Master中得到一个kube-apiserver 保证至少有一个master可用,实现high availability。对外以loadbalancer的方式提供入口。这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。
一张图帮助大家理解:
也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。同时kube-sheller和kube-controller-manager也存在多个,而且伴随着kube-apiserver 同一时间只能有一套运行。
5) rolling upgrade
RC 在开始的设计就是让rolling upgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。
通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback 当前正在执行的upgrade操作。
同样, Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。
6)存储
大家都知道容器本身一般不会对数据进行持久化处理,在Kubernetes中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。Kuberenetes 的 Volume就是主要来解决上面两个基础问题的。
Docker 也有Volume的概念,但是相对简单,而且目前的支持很有限,Kubernetes对Volume则有着清晰定义和广泛的支持。其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。
创建一个带Volume的Pod:
spec.volumes 指定这个Pod需要的volume信息 spec.containers.volumeMounts 指定哪些container需要用到这个Volume Kubernetes对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出Kubernetes社区的活跃程度。
emptyDir 随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持 RAM-backed filesystemhostPath 类似于Docker的本地Volume 用于访问一些本地资源(比如本地Docker)。
gcePersistentDisk GCE disk - 只有在 Google Cloud Engine 平台上可用。
awsElasticBlockStore 类似于GCE disk 节点必须是 AWS EC2的实例 nfs - 支持网络文件系统。
rbd - Rados Block Device - Ceph
secret 用来通过Kubernetes API 向Pod 传递敏感信息,使用 tmpfs (a RAM-backed filesystem)
persistentVolumeClaim - 从抽象的PV中申请资源,而无需关心存储的提供方
glusterfs
iscsi
gitRepo
根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的 :)
7)安全
一些主要原则:
基础设施模块应该通过API server交换数据、修改系统状态,而且只有API server可以访问后端存储(etcd)。
把用户分为不同的角色:Developers/Project Admins/Administrators。
允许Developers定义secrets 对象,并在pod启动时关联到相关容器。
以secret 为例,如果kubelet要去pull 私有镜像,那么Kubernetes支持以下方式:
通过docker login 生成 .dockercfg 文件,进行全局授权。
通过在每个namespace上创建用户的secret对象,在创建Pod时指定 imagePullSecrets 属性(也可以统一设置在serviceAcouunt 上),进行授权。
认证 (Authentication)
API server 支持证书、token、和基本信息三种认证方式。
授权 (Authorization)
通过apiserver的安全端口,authorization会应用到所有http的请求上
AlwaysDeny、AlwaysAllow、ABAC三种模式,其他需求可以自己实现Authorizer接口。
8)监控
比较老的版本Kubernetes需要外接cadvisor主要功能是将node主机的container metrics抓取出来。在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。
Kubernetes集群范围内的监控主要由kubelet、heapster和storage backend(如influxdb)构建。Heapster可以在集群范围获取metrics和事件数据。它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。
注意: heapster目前未到1.0版本,对于小规模的集群监控比较方便。但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache并以standalone的方式独立出k8s平台。

阅读全文

与etcd数据存放在哪个目录下相关的资料

热点内容
中考信息确认表丢失了怎么办 浏览:660
丁基下游产品有哪些 浏览:404
绝地求生启动程序放在steam哪里 浏览:941
企业开发微信小程序怎么设置 浏览:4
德技技术公司怎么样 浏览:188
什么是二手手机交易市场 浏览:518
广发银行交易失败什么原因 浏览:444
来年代理什么项目致富 浏览:844
有代理怎么做辣条 浏览:681
山东专业润滑油代理怎么样 浏览:158
硬盘坏了怎么转移数据 浏览:444
比心信息发不出去怎么回事 浏览:522
深耕华南市场的料企有哪些 浏览:226
硬盘坏了数据恢复软件哪个好 浏览:551
绿世界产品怎么样 浏览:728
公司产权如何交易 浏览:107
数据透视为什么同品种有好几行 浏览:643
什么微信小程序容易做 浏览:820
卸载小米运动后如何清空数据 浏览:947
在中国市场哪里可以买到球衣 浏览:224