kubernetes集群如何让在kubernetes master 也作为节点

kubernetes集群  时间:2021-09-08  阅读:()

请教kubernetes部署问题,pod一直处于pending状态

json模板: { "id": "fedoraapache", "kind": "Pod", "apiVersion": "v1beta1", "desiredState": { "manifest": { "version": "v1beta1", "id": "fedoraapache", "containers": [{ "name": "fedoraapache", "image": "fedora/apache", "ports": [{ "containerPort": 80, "hostPort": 8080 }] }] } }, "labels": { "name": "fedoraapache" } } 镜像使用的是本地镜像fedora/apache(镜像从docker hub下载的,用docker run启动没) zte@zte-F5SL:~/es/example

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

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。

etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。

Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。

Google的容器集群管理系统es、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。

etcd 集群的工作原理基于 raft 共识算法 (The Raft Consensus Algorithm)。

etcd 在 0.5.0 版本中重新实现了 raft 算法,而非像之前那样依赖于第三方库 go-raft 。

raft 共识算法的优点在于可以在高效的解决分布式系统中各个节点日志内容一致性问题的同时,也使得集群具备一定的容错能力。

即使集群中出现部分节点故障、网络故障等问题,仍可保证其余大多数节点正确的步进。

甚至当更多的节点(一般来说超过集群节点总数的一半)出现故障而导致集群不可用时,依然可以保证节点中的数据不会出现错误的结果。

如何查看kubernetes的更新信息

我们先从整体上看一下es的一些理念和基本架构,然后从网络、资源管理、存储、服务发现、负载均衡、高可用、rollingupgrade、安全、监控等方面向大家简单介绍es的这些主要特性。

当然也会包括一些需要注意的问题。

主要目的是帮助大家快速理解es的主要功能,今后在研究和使用这个具的时候有所参考和帮助。

es的一些理念: 用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。

以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。

保证系统总是按照用户指定的状态去运行。

不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。

那些需要担心和不需要担心的事情。

更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。

对于es的架构,可以参考官方文档。

大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheduler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。

看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在es的未来版本中解决。

es的主要特性 会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍es的这些主要特性->由于时间有限,只能简单一些了。

另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。

1)网络 es的网络方式主要解决以下几个问题: a.紧耦合的容器之间通信,通过Pod和localhost访问解决。

b.Pod之间通信,建立通信子网,比如隧道、路由,Flannel、OpenvSwitch、Weave。

c.Pod和Service,以及外部系统和Service的通信,引入Service解决。

es的网络会给每个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会通过读取esAPI获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。

大概的DNS的域名记录是servicename.namespace.tenx.domain,“tenx.domain”是提前设置的主域名。

注意:kube-proxy在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service的endpints或者Pods上。

es官方也在修复这个问题。

3)资源管理 有3个层次的资源限制方式,分别在Container、Pod、Namespace层次。

Container层次主要利用容器本身的支持,比如Docker对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。

资源管理模型-》简单、通用、准确,并可扩展 目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的schedulerplugin来支持。

其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信es的后续版本会有支持。

4)高可用 主要是指Master节点的HA方式官方推荐利用etcd实现master选举,从多个Master中得到一个kube-apiserver保证至少有一个master可用,实现highavailability。

对外以loadbalancer的方式提供入口。

这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。

一张图帮助大家理解: 也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。

同时kube-sheduller和kube-controller-manager也存在多个,而且伴随着kube-apiserver同一时间只能有一套运行。

5)rollingupgrade RC在开始的设计就是让rollingupgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。

基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。

通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback当前正在执行的upgrade操作。

同样,Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。

6)存储 大家都知道容器本身一般不会对数据进行持久化处理,在es中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。

另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。

es的Volume就是主要来解决上面两个基础问题的。

Docker也有Volume的概念,但是相对简单,而且目前的支持很有限,es对Volume则有着清晰定义和广泛的支持。

其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。

而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。

创建一个带Volume的Pod: spec.volumes指定这个Pod需要的volume信息spec.containers.volumeMounts指定哪些container需要用到这个es对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出es社区的活跃程度。

emptyDir随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持RAM-backedfilesystemhostPath类似于Docker的本地Volume用于访问一些本地资源(比如本地Docker)。

gcePersistentDiskGCEdisk-只有在GoogleCloudEngine平台上可用。

awsElasticBlockStore类似于GCEdisk节点必须是AWSEC2的实例nfs-支持网络文件系统。

rbd-RadosBlockDevice-Ceph secret用来通过esAPI向Pod传递敏感信息,使用tmpfs(aRAM-backedfilesystem) persistentVolumeClaim-从抽象的PV中申请资源,而无需关心存储的提供方 glusterfs iscsi gitRepo 根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的:) 7)安全 一些主要原则: 基础设施模块应该通过APIserver交换数据、修改系统状态,而且只有APIserver可以访问后端存储(etcd)。

把用户分为不同的角色:Developers/ProjectAdmins/Administrators。

允许Developers定义secrets对象,并在pod启动时关联到相关容器。

以secret为例,如果kubelet要去pull私有镜像,那么es支持以下方式: 通过dockerlogin生成.dockercfg文件,进行全局授权。

通过在每个namespace上创建用户的secret对象,在创建Pod时指定imagePullSecrets属性(也可以统一设置在serviceAcouunt上),进行授权。

认证(Authentication) APIserver支持证书、token、和基本信息三种认证方式。

授权(Authorization) 通过apiserver的安全端口,authorization会应用到所有es需要外接cadvisor主要功能是将node主机的containermetrics抓取出来。

在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。

es集群范围内的监控主要由kubelet、heapster和storagebackend(如influxdb)构建。

Heapster可以在集群范围获取metrics和事件数据。

它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。

注意:heapster目前未到1.0版本,对于小规模的集群监控比较方便。

但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。

因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。

所以目前建议关掉cache并以standalone的方式独立出k8s平台。

如何用Ansible部署Kubernetes集群到OpenStack

openstack在云计算体系里属于IAAS层,用于管理云计算基础设施,如存储、网络等等。

es属于PAAS层,用来管理容器(例如docker container)的运行。

如何让在kubernetes master 也作为节点

一、安装Docker 参见官方文档:Docker安装(ubuntu) 注意:一定要在每台机子上都事先安装Docker,否则安装启动Kubelet的时候会出现问题。

二、安装etcd 下载地址:/coreos/etcd/releases 1.把tar包下下来,解压,然后把etcd和etcdctl复制到usr/bin目录下 [plain] view plain copy #cp etcd etcdctl /usr/bin 2.在master节点上启动etcd服务: [plain] view plain copy

华为云年中聚惠618活动,新用户专区,云服务器低至88元/年,3年仅580.98元,热销抢购中,最后2天!

华为云怎么样?华为云用在线的方式将华为30多年在ICT基础设施领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。华为云作为底座,为华为全栈全场景AI战略提供强大的算力平台和更易用的开发平台。本次年终聚惠618活动相当给力,1核2G内存1m云耀云服务器仅88元/年起,送主机安全基础版套餐,...

RAKsmart美国VPS上市,活动期间5折抢购仅$30,$1.99/月

RAKsmart机房将于7月1日~7月31日推出“年中大促”活动,多重惊喜供您选择;爆款I3-2120仅30美金秒杀、V4新品上市,活动期间5折抢购、爆款产品持续热卖、洛杉矶+硅谷+香港+日本站群恢复销售、G口不限流量产品超低价热卖。美国VPS、日本VPS及香港VPS享全场7折优惠;爆款VPS $ 1.99/月限量秒杀,10台/天,售完即止, VPS 7折优惠码:VPS-TP-disRAKsmar...

OneTechCloud(31元),美国CN2 GIA高防VPS月

OneTechCloud发布了本月促销信息,全场VPS主机月付9折,季付8折,优惠后香港VPS月付25.2元起,美国CN2 GIA线路高防VPS月付31.5元起。这是一家2019年成立的国人主机商,提供VPS主机和独立服务器租用,产品数据中心包括美国洛杉矶和中国香港,Cera的机器,VPS基于KVM架构,采用SSD硬盘,其中美国洛杉矶回程CN2 GIA,可选高防。下面列出部分套餐配置信息。美国CN...

kubernetes集群为你推荐
返回什么叫函数返回?为什么要返回?山东省通信管理局哪位朋友知道山东通信管理局负责备案的办公室电话项目质量管理工程项目质量管理制度有哪些eofexceptionjava中dis.readutf报错java.io.EOFException搜索引擎有哪些1.什么是搜索引擎?举出几个常用的搜索引擎。文件损坏安装软件显示文件已损坏怎么回事小项目奥运会一共有几个大项目小项目?google地图api如何使用GOOGLE EARTH 的API开发自己的应用程序阿里下载最新阿里旺旺怎么下载监控员工单位要装摄像头监控员工犯法吗
江西服务器租用 免费国际域名 已备案域名出售 服务器架设 中国特价网 dd444 linux空间 如何用qq邮箱发邮件 爱奇艺vip免费领取 吉林铁通 双12 yundun 上海电信测速 德隆中文网 工信部网站备案查询 免费蓝钻 腾讯数据库 google搜索打不开 香港博客 美国代理服务器 更多