Kubernetes能不能够固定ip地址怎么设置IP容器的IP


Kubernetes可以创建节点节点中可以有多尐pod,问题是pod的ip都是自动分配的现在Kubernetes能不能够指定pod的ip地址了?


就算能也没有意义,失去了Kubernetes的初衷你要固定ip地址怎么设置IPIP做什么?容器夲身就要做到无状态就像你写程序的无状态意义。


也是刚开始看了一点点k8啊虽然不知道pod的ip具体能不能由用户指定,不过感觉没有必要洎己指定吧毕竟要复制多个pod,之后由proxy做负载均衡用户访问的时候没必要了解具体pod的ip是什么吧,只需要通过proxy去访问就好了啊

0

- 思科系统運维工程师

0


虽然大多数时候设计都是针对大部分需求的,有些场景有特别的需求也是可以自己管理pod的ip忽略kubernetes的proxy,可以通过docker container的net namespace设置ip没有proxy也鈳以外接负载均衡。

0


公司的软件要求固定ip地址怎么设置IPip 所以。

0
0

- 标准90后有为青年


可以用NodePort 固定ip地址怎么设置IP一个端口。。

0
}

本文根据谭霖老师在〖2017 GdevOps全球敏捷運维峰会北京站〗现场演讲内容整理而成

(点击此处获取谭霖老师演讲完整PPT)

谭霖,滴滴出行弹性云架构师、云计算专家曾任职于英特尔从事云计算方向研究。OpenStack Ironic 项目核心开发者《OpenStack设计与实现》作者,多次在OpenStack Summit SRECon峰会上分享Topic目前从事基于Kubernetes的私有云平台的研发,专注提高服務的稳定性和研发、运维效率

今天我将带来一些关于滴滴弹性云的分享,标题是从物理机到Kubernetes的那些坑与心得

先简单自我介绍下,我叫譚霖之前曾在Intel从事于Open Stack相关的工作,也花了很大精力在开源社区这一方面后来我来到滴滴的弹性云团队,主要从事基于Kubernetes的基础平台建设可以说是从一个做菜的“厨师”变成了一个“食客”。

在我们准备做弹性云时我们问了自己三个问题:

1. 为什么要做私有云

这个其实是朂好回答的。因为滴滴的集群规模太大有数万台物理机(这样的规模量要求我们做一个私有云平台),结果因为之前没有一个比较好的方案造成了资源使用率特别低、资源浪费大的问题。

另一个主要原因是滴滴的发展太快总有新的业务,隔一段时间就听说成立了一个噺的部门而且随着新需求的出现,更新迭代异常频繁这些都对平台的稳定性提出了特别高的要求。这个问题靠堆人是解决不了的所鉯需要有一个好的平台和机制来解决它。

这个问题也比较好回答KVM / Xen这样的传统虚拟化已经出现多年了,很稳定但大家也知道其弊端,就昰损耗比较大另外,传统混部也就是滴滴现在在用的方案(即继续保持原有的传统混部)虽然能够部分解决资源使用率低的问题,但洇为完全没有隔离导致程序之间容易互相影响。

而容器是一个相对折中的方案具有一定的隔离性、损耗更少,这是我们选择它的最主偠原因同时,更重要的是容器的镜像所带来新的玩法因为镜像的环境是一致的,对运维人员特别友好因此他们不用再关心那些纷繁複杂的配置文件,也不用频繁地走初始化流程更不用每次上线更新都提心吊胆,担心会对新的服务造成影响

现在这个问题就比较容易囙答,但一年前是个比较艰难的选择大家都知道现在比较著名的容器平台有Mesos、Kubernetes 和Swarm,一年前我们在Mesos和Kubernetes之间犹豫过很久后来主要觉得因为峩们要做的是一个基于容器的平台,相比MesosKubernetes更专注容器。

而Swarm当时还很年轻很多功能不够完善,相较之下Kubernetes更成熟当然更关键的原因是Kubernetes的社区更有活力,设计架构也更清晰可拓展性也高。

现在回过头来看一年前的选择非常很庆幸我们做了正确的选择,因为之前相较于两鍺Kubernetes还只是旗鼓相当,而现在则有一统江山的趋势我们目前还是基于Kubernetes1.6版本做的改造,接下来1.8版本release之后我们会尽量跟上保持和社区同步。

滴滴弹性云的目标就是基于容器技术为滴滴提供稳定高效、可伸缩的服务管理平台。先简单看看弹性云的项目历程

2016年7月,弹性云项目正式启动然后10月份出了第一版,2017年4月发布了第二版。在几个月的使用体验中我们根据用户的反馈,不管是产品形式还是底层网络方案都经过大规模优化目前第三版也正在开发中,这一版会更侧重用户交互和可视化上

截止到目前为止,我们总共有300多台宿主机2000+的嫆器实例,不算很多但目前有多条滴滴核心业务线跑在我们的平台上,预见2018年规模会有指数型的上升

我们的整体目标有四点,主要是為了解决先前提出的三个问题如下:

实现资源按需分配,提高资源利用率;

实现资源的弹性伸缩可以快速响应负载变化;

基础环境保歭一致,实现服务的快速交付;

保证服务的容错性实现基础设施免运维。

针对不同的产品线和需求我们具体落地的产品解决方案主要汾为两大块:一个是基于容器构建的轻量级虚拟机,叫做静态容器组;第二个是更纯粹的微服务类容器我们称之为弹性伸缩组。同时我們还整合了滴滴现有的部署监控和日志收集系统

这是整体的架构图,中间最大的一块就是我们的K8S集群它主要分成控制节点和工作节点兩部分。上面一块是我们的控制台和管理员入口左边是滴滴的一些现有的权限认证系统和服务树,右边是我们的网络方案

所以按照流程我们主要做的操作有用户先通过权限系统认证后,创建服务(也就是K8S的实例)实现容器的扩容缩容和部署更新。之后我们平台就会进荇实时监控和日志收集完成监控数据的上报和镜像拉取。

刚才说的主要是管理员相关的工作流程现在看看用户流量。首先我们这边实現了每个容器通过IPAM组件都能获取一个独立的IP,这个IP可以和物理机双向互通所以允许用户的流量可以直接通过容器IP访问实例。同时我们吔提供了一个4层的LB允许用户可以通过只访问一个VIP,自动把流量打到后面的容器里

接下来详细讲讲滴滴弹性云具体的产品功能。

正如之湔所说我们主要提供静态容器和动态伸缩两大产品,同时伸缩组方面又细分为有状态和无状态伸缩组

其实在刚开始时,我们只想提供K8S支持得最好的Deployment也就是无状态伸缩,这也是最符合容器使用习惯的产品形式但在实际落地的过程中,我们发现完全不是那么一回事

首先,不是所有程序都能比较轻易地改造成Cloud-Native的服务所以针对这样的传统服务,我们还是需要提供一个比较贴近物理机的用户体验的产品咜的问题就是不能弹性伸缩,但好处是可以挂载本地存储IP是恒定的。

同时为了支持有状态的服务我们也提高了有状态伸缩组。既支持彈性伸缩又支持挂载网络存储不过比较出人意料的是,用户选择有状态伸缩组的很大一部分原因并不是因为挂载Ceph而是因为有状态伸缩組的容器IP/HostName是不变的,这样不管是从监控和日志上都是更友好的。

而无状态伸缩我们这个当初最想推动的服务也就只有在一些对弹性伸縮速度有特别高的要求的场景下才会用到。

具体到产品功能的特性上我们主要有三大块:复杂配置简单化、上线流程标准化和服务管理。

了解过K8S的朋友们都清楚它上手很难,有特别多的配置有时候反而给用户带来了困扰。所以我们做了减法简化了很多配置,只留给鼡户一些接口避免不必要的困扰。比如我们支持多种接入方式既可以一键完成从Git代码仓库到上线镜像的转换过程,也支持直接通过自萣义镜像

同时我们也对镜像做了分层(基础镜像→环境镜像→服务镜像),实现RD和SRE每个角色负责不同的镜像制作这样分工更合理、层佽更清晰,做到比较好的权责分明、高效有序监控日志自动配置关联也是做了减法,希望用户较少关注这一点从而得到更好的体验。

楿对于减法来说我们也做了很多的加法,因为我们是一个严肃的运维平台之所以强调严肃,是因为只要有人参与的地方就容易犯错┅方面我们要尽量减少人工参与的地方,另一方面又要尽量通过各种规范来减少人犯错的机会

比如变更审批系统,每一次上线变更都需偠开发leader的审核;同时也对它进行了改造使其每次分组小流量灰度;每次发布更新的过程中都有强制的观察时间,如果在观察过程中比洳说你发布了第二组后,发现你的更新过程中代码出了BUG我们还支持了一键回滚。

在服务管理方面我们实现了服务不可用自动重启、一鍵扩容和负载均衡等,最为重要的就是对用户强制异地多活必须在我们的两个机房都有实例。

现在介绍我们的方案细节主要包括网络監控、日志和镜像市场。

我们的网络方案主要是基于Onos+OVS的SDN网络方案每个容器都有一个区别于机房实体机的Overlay IP,容器与容器之间实现“大二层”互通与机房网络之间通过交换机打通。物理机可以直接通过容器Overlay IP访问容器反之亦然。

在IP上静态容器和伸缩容器都可以进行Hostname绑定,通过容器不变的Hostname保证容器在漂移到其它宿主后IP依旧保持不变当容器发布更新时,它永远保持稳定对于IP随机分配的情况,我们还提供了IP池保证IP只会从IP池里出现。

我们使用弹性云独立的4层、7层负载均衡器实现动态的负载均衡及故障自动剔除。

当前弹性云容器网络大体上汾为三种类型:同宿主间的容器通信、跨主机间的容器通信以及容器与物理机间的通信。

每一个部署容器的宿主机都会部署一套Ovs网络組建,其中关键的就是两个Ovs Bridge一个负责建立隧道与外界通信,叫Ovs-tunnel桥;一个负责整合本机上的容器通信叫Ovs-int桥。所有的Ovs-tunnel都会与Onos的Controller建立连接負责查询流表并建立流表和其他宿主机间的隧道。因此三种通信类型就可以解释为:

同宿主间的容器通信:直接通过Ovs-int桥通信因此也不依賴Ovs-tunnel与外界的隧道。

跨主机间的容器通信:第一次通信时Ovs-tunnel也会查询Onos,Onos返回目标容器的主机信息Ovs-tunnel通过主机间的隧道,将容器数据发送到目嘚容器的宿主机目的容器宿主机上的Ovs-tunnel则会将数据继续向上一层传递,经Ovs-int传递给容器

容器与物理机间的通信:容器发送物理机的数据包,会被Ovs-tunnel经隧道发送给Overlay网关Overlay网关进行Vxlan解包的操作,将数据传递到物理网络相反地,物理机发送给容器的数据包经Overlay网关把数据封包成Vxlan数據包,再通过隧道发往容器宿主再由宿主传递给上一层的容器。

具体到产品上每个IP分配方案如下:

有状态伸缩组:IP和Hostname恒定,支持IP池;

無状态伸缩组:支持IP池IP随机分配,灵活度更高

这个是容器网络创建的过程。一旦用户有创建容器需求时控制节点会对整个集群做一個调度,选择一个合适的工作节点而作为节点最重要核心的Kubelet就负责创建容器,控制节点会把需求发给它

Step1:当Kubelet收到调度到本Node的Pod信息后,會先创建一个无网络配置的Infrastructure的基础容器此容器用于承载Pod中所有容器的网络Namespace;

Step4:IP Controller会判断该容器属于哪一个子网,子网中是否有可用的IP及昰否有绑定的IP地址等,在根据计算出的IP地址及子网信息等去SDN IPAM端申请虚拟Port(Overlay IP);

Step6:IP Controller 会将返回的Port保存在自己的存储库中。如果是绑定IP类型的Pod它还会将该Pod与该虚拟Port(Overlay IP)进行绑定,则下一次该Pod再一次进行申请时仍会申请到该Port(Overlay IP)。数据保存后它会把Port信息再返回给CNIPlugin;

Step7:CNIPlugin收到Port信息后,会根据其中的Overlay IP、Gateway、Vlan Tag 等信息创建Veth Pair、配置Veth信息、配置路由、添加Ovs-brdge等操作至此,本来没有任何网络的基础容器就有了网络配置(除了與外部通信的Ovs网络外,同时也会添加Lo网络);

Step9:Kubelet会使用配置成功的基础容器的网络Namespace继续去创建其它的业务容器如果配置失败了,会继续從第一步开始继续创建基础容器,直到网络配置成功

监控主要有两方面需求:基础监控和业务监控。基础监控使用了Google开源容器监控软件Cadvisor/Cgroup作为监控数据来源数据上报至Odin,同时可在Odin和弹性云页面上展开监控数据

基础监控:物理机监控Agent无法采集到容器有效监控数据,Cadvisor、Proc、Cgroup嫆器基础监控项同物理机有明显差异但用户的需求没变。

业务监控:业务监控同物理机需求完全一致复用物理机监控方式。

这张图就昰弹性云配置监控和查看监控的示意图我们在每个物理机上有获取容器的基础监控指标,容器里面也会有获取业务指标

日志主要三个方面考虑:时效性、持久性,以及日志展示

日志时效性:在线日志采集延迟2min,满足大多数场景紧急情况下可以登录到容器内查看日志。

日志持久性:生成的容器直接拉到远端存储一份选择分布式存储日志在Ceph存储一份。

日志展示:事后追溯有多种丰富的日志展示、分析系统

这是我们在弹性云平台上创建容器的一个操作日志,也是一个简单的示意图通常用户都打在容器里,而容器一旦发布更新漂移の后数据都丢了,所以我们直接把日志打到Ceph上用户不喜欢用这个的话可以直接打到远端,远端采集系统可以使用不同的系统比如说ES和HDFS,这样就提供了更加丰富的日志展示和分析系统

存储主要提供了本地卷和网络卷。

本地卷Host Path提供给静态容器组我们把宿主机上的目录挂載到容器里作为数据存储卷,优势是稳定和读写性高

网络卷Ceph的优势是多备份更可靠,支持容器迁移缺点是网络抖动不可避免,所以得鼡Ceph的服务做改造避免网络抖动影响整个服务的进程。

我们选择Overlay FS作为存储一方面是因为它的性能/稳定性更好,当然它也有不足比如DeviceMapper可鉯通过LVM来解决磁盘的容量限制,但Overlay FS单靠本身是解决不了的需要靠XFS来限制。

但我们发现在某些场景中XFS因为没有开启ftype功能导致系统读写缓慢,因此我们建议大家如果也选用了Overlay FS+XFS方式要把ftype设置为1。

镜像市场主要还是分层目的是让不同的用户可以专注于不同的事情上。如下图所示:

基础环境镜像:弹性云管理员制作的镜像:FROM 官方镜像增加了服务用到的各种Agent、常用软件、系统配置(添加User、日志切割等)的镜像。包揽最复杂的周边应用的整合并兼顾将镜像做得更小。

服务环境镜像: SRE 同学制作和维护的镜像:FROM 基础环境镜像安装了服务运行所需嘚环境、配置。更加专注服务环境的保障使镜像满足产品线的使用。

服务镜像:使用 RD 代码中 Dockerfile(一般只需要COPY代码到线上所需目录即可)FROM 垺务环境镜像,通过弹性云系统生成的提供服务的镜像

四、心得与展望心得体会

首先,特别想强调的是“云计算拼的是运维拼的是可靠性”。产品做得再好、运维人不靠谱出了纰漏后就没人敢再用你的东西了,说得再好也没用

其次,“线上无小事要对线上保持敬畏感”。我之前是做开源社区的解决方案做得多,但现在做云计算方案时才发现实际与想象的差别特别大可以说云计算落地更难。

也許大家看了一些网上的分享后都会觉得搭建一套容器环境是比较容易的可最难的就像我们这样已经现有的体系,如果你要把它落地就需偠做各种打通、妥协甚至对一些功能做一些切割,有时这些不是我们想做的但为了推进落地不得不去做。

此外技术挑战是一方面,泹用户习惯是更加大的挑战特别是业务方,他们肯定会说为什么我要迁现在用得好好的,即便你和他们说做这个是对公司省成本的鈳以提高运维的便利性,他们依然会觉得我不缺钱怕麻烦。再者他们不是做运维的,感觉不到这些带来的明显好处另一方面,有些鼡户觉得我上你的云可以但你不要改变我的习惯,原来是什么样现在还得保持什么样但问题是原来是物理机的用法,可现在已经上容器了 还想保持原来的方式,这是不可能的

运维是一个特别苦的职业,线上无小事一点点小改动,如果没有考虑清楚、没有充分验证過回滚方案那分分钟要出事,相信大家也深谙此理

对于弹性云的未来规划,第一是更细粒度的隔离大家对容器比较了解的话,就会清楚现在Docker更多的是对Memory使用量的隔离以及对CPU使用量的隔离。但实际过程中我们会发现比如你给用户一个8G内存,在某种极端配置下8G内存会鈈断地刷新读写那你的L3 Cache很快就会被刷爆了,导致大量的Cache Miss,这样的话还是会对程序性能造成很大影响的

第二是静态容器的弹性伸缩。因为靜态容器确实就像虚拟机一样运维成本特别高,所以一旦物理机挂了容器也就挂了,很多东西是找不回来的而且你要扩容也只能按照传统的方法,先申请一个容器再去上面做部署、配置等这些都会给运维同学带来非常大的困扰。

第三是更智能的扩容算法目前我们昰根据实时的使用率来进行扩容,但其实对于我们来说很多业务高峰期是有规律的,如果能做到提前预测出高峰期做适应的扩容,那將会极大地提高资源使用率

最重要的一点是依托社区、回馈社区。我们打算腾出手来把一些定制化需求不是那么高的解决方案来回馈箌社区。

}

我要回帖

更多关于 固定ip地址怎么设置IP 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信