Kubernetes和Docker新手问答

本文讲的是Kubernetes和Docker新手问答【编者的话】Mirantis是一个培训组织,近期他们举办了一个Kubernetes迷你新手训练营,本文是一些问答内容的整理。

就在上周,我们在Mirantis Training的其中一位讲师Reza Roodsari,以网络研讨会的形式举办了一个Kubernetes新手迷你教学。我们在会议期间没有充足的时间来回答所有的问题,因此把答案便放到了这里。

Q:容器可以使用持久化的存储吗?

A:当然,你可以创建持久化的卷来保存文件。

Q:请问有在嵌入式产品中使用容器的实际案例吗?

A:我们不太了解实际使用的情况,不过好在这里有一个专门为此设立的开源项目:https://resinos.io/

Q:你能再讲下为什么不需要配置管理吗?

A:当你在使用Docker的时候,无论用与不用Kubernetes,你都不再需要配置管理,因为开发人员可以将这些功能打包到Dockerfile里实现。当然,并不是说不可以结合这两种方案,不过通常用PuppetChef或者Salt做的很多东西也都可以在Dockerfile里完成。

Q:为什么容器还要部署到虚拟机上?

A:容器并不一定要部署到虚拟机;它们可以直接部署到裸机。之所以常常部署到虚拟机是因为今天的devops流程常常是这样运作的,已经行成了一个固定的套路。另外,今天大多数IaaS都是基于虚拟机的,因此当开发人员需要资源来部署它们的容器时,它们拿到手的便是这些。

Q:什么是Pod?

A:Pod就是Kubernetes所能识别的最小单元。它包含了一个或多个的容器并看做是一个整体的单元。基本上,可以说Pod就是一个单一的微服务。

Q:你能简单解释下Swarm和K8S的共同点还有Openstack正在成立的标准对此产生的影响吗?

A:Docker Swarm和Kubernetes都是用来编排容器的,但是是以不同的方式。至于Openstack正在成立的标准对此产生的影响的话,我们可以去掐指算算,不过也许只有时间才能告诉我们最终的答案。一般而言,开源的好处,尤其对于Openstack来说,如果一个标准对你而言很重要的话,那便没有什么可以妨碍你去实现它了。

Q:如果一个Pod崩溃的话,Docker会怎么处理?

A:在Docker里是没有Pod的概念,它们是Kubernetes定义的组件。如果Kubernetes发现一个Pod崩溃掉了,它会启动另一个来替换它。

Q:如何升级Pod?

A:Pod是通过一个YAML文件来定义的,它会指定使用什么镜像,运行容器的数量,挂载的卷或者网络,等等。如果要升级一个Pod的话,你可以直接更新YAML文件然后告诉Kubernetes应用那个新的文件即可。必要时你也可以回滚变更。

Q:Kubernetes Swarmer是啥?

A:我猜你说的是Docker Swarm吧。它是一个和Kubernetes类似的Docker版容器编排系统。

Q:Docker和Kubernetes是不是已经稳定到足以在生产环境跑应用?

A:是的,两者均已足够稳定,可以跑生产应用,而且事实上两者都已经在很多地方被用于生产环境。

Q:在第一个例子里,与Openstack集群相比,K8S云是作为一个单独的集群运行?

A:是的,在“单项优势”的例子里,这里的确是两个独立的集群;“宠物”类应用跑在Openstack里,然后“牲畜”类应用则跑在Kubernetes上。也就是说,Kubernetes并不是不能跑在Openstack集群里。

Q:我听到Mirantis OpenStack 10将会基于Kubernetes,你对此有何评价?

A:不止一个声音提到过这一点,但是,这还处于计划阶段。Kubernetes编排的是应用;Openstack也是一个应用。我们计划允许Kubernetes来编排Openstack的控制面板。

Q:Kubernetes用的是Docker的容器?

A:是的,不过它也可以使用其他类型的容器。它已经支持了Rkt,而且还可以扩展对其他类型的支持。通过使用runc/libcontainer,它可以做到管理任何种类的容器。

Q:Docker + Kubernetes只能在Linux环境下运行吗?

A:不,Docker加入对Windows的支持已经有一段时间了,而就在1.5版本的时候,Kubernetes加入了对Windows Server容器的支持,控制器仍然还跑在Linux上,然后Kubelet和Kubeproxy则可以在Windows上运行。

Q:新发布的1.5版本Kubernetes在Windows上运行有遇到什么问题吗,比如说一些Iptables还有POD只支持一个单个容器之类的问题?

A:是的,因为Windows没有像Linux这样有Iptables,所以Windows Server容器在网络上会有一些限制。类似地,由于WIndows处理namespace的方式的不同,一个使用Windows Server容器的Pod只能有一个单一的容器。微软正在和Kubernetes社区合作致力于在后面的版本里克服这些限制。

Q:Kubernetes和Openstack发展方向是怎样的?它们之间存在很多分歧吗?

A:Kubernetes和Openstack是两个完全不同的东西;真的没有必要去比较它们,因为它们根本从来都碰不到一起。你可以在Openstack上跑Kubernetes,你也可以使用Kubernetes来编排Openstack,但是它们始终还是两个截然不同的东西。

Q:如何监控部署在Docker容器上的应用程序?

A:Kubernetes可以通过设定livenessProbe属性来为一个Pod做健康检测。

Q:怎样从外面访问一个跑着许多Docker实例的应用程序?

A:通过使用Kubernetes的Service资源,你可以有多种方案实现对一个跑在Kubernetes里的带有多个实例的Docker应用的访问。你可以使用一个公网IP来创建一个Service,一个负载均衡Service,或者说,如果是HTTP的情况下,用一个Kubernetes的Ingress资源。

Q:Mirantis提供对Kubernetes的支持吗?

A:到目前为止,Mirantis的产品只限于Openstack,这也即是我们所支持的全部;当我们加入对Kubernetes的支持时,事情可能会有一定程度的转变,但是就目前而言,情况就是这样。

Q:怎么把一个公网IP分配给一个跑在Openstack虚拟机里的Docker容器?

A:你只要像分配任何其他基于Openstack的公网IP一样通过浮动IP去做就行。

Q:是不是可以这样说,Kubernetes的编排就像一个流程图?一系列一个接一个的动作?

A:理想情况下,这是对的,但是实际上它并不是这样 —— 反正不是直接如此。当你在YAML文件里包含了多个定义时,没有办法保证它们会以怎样特定的顺序去执行。要解决这个问题实现“流程图”效果的话,你可以看下Kubernetes新的APPController。

Q:Docker/Kubernetes可以用在Windows服务或者实际的应用,数据库,还有存储吗,或者说你可以创建windows的虚拟机然后在Kubernetes下面跑吗?

A:听上去你所说的“实际应用”真的有点像是在说“宠物”类应用。如果是的话,那么最好还是用虚拟机来跑吧。

Q:应用和运行时平台是怎样解耦的?

A:容器是设计成自包含的。因此你可以创建一个包含了系统的所有内容,让它拥有完备的移植性。我们也应该明白一点,应用程序不可能完全和运行时平台解耦。举个例子,你如果有一个应用是用Mono(Linux版本的.NET)写的,你可以用Linux上的Kubernetes来运行它,但是直接用Windows Server容器跑的话就只能运行在Windows上的Kubernetes了。

Q:有什么好办法来学习YAML吗?因为它对于Docker Compose,Kubernetes,还有许多其他接下来在SDN领域出现的应用来说都是非常重要的。

A:我们会上传一篇简短的YAML教程;如果您希望在该教程发布的时候收到通知的话,不妨在评论里告知我们。

Q:虽然容器是分层的,在宿主操作系统这块每个分层也是重复部署的。Openstack会为此提供一个轻量级的容器宿主虚拟机吗?

A:与其操心有没有一个轻量级的容器宿主虚拟机镜像,你还不如考虑下用一个最小集操作系统作为容器的基础层,比如Alpine Linux

Q:Docker支持跑在Windows Server里;你有见过Kubernetes+Docker在Windows环境下的什么合作场景吗?

A:现在讨论或许还为时尚早,但是微软正在致力于确保跑在Windows上的Kubernetes能够和Linux比肩。

Q:有没有可能在一个Pod/容器里跑OpenClos?

A:我们没有这样做过,不过好像社区的工作已经做到让它在Docker里运行了(https://github.com/Juniper/OpenClos) ,而只要能以Docker容器的形式,你就可以把它跑在Kubernetes里。

Q:你对使用Stackenetes有什么评价吗?

A:Stackanetes是一个CoreOS的项目,它可以实现自行在Kubernetes集群上安装OpenStack控制器和计算节点。我们对此不予置评。

原文链接:Kubernetes and Docker Mini-Bootcamp Q&A(翻译:吴佳兴)

原文发布时间为:2017-02-13

本文作者:吴佳兴

原文标题:Kubernetes和Docker新手问答

时间: 2024-09-13 13:17:32

Kubernetes和Docker新手问答的相关文章

容器存储架构比较:Kubernetes、Docker和Mesos Compare

本文讲的是容器存储架构比较:Kubernetes.Docker和Mesos Compare[编者的话] 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死.但是对于数据库.日志文件等可以实时变化的数据,我们不能够通过这种方法存取.结合场景这次主要谈下Docker的存储方式,以及主要存储方式的对比. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker

【转载】Kubernetes 入驻 Docker EE,企业如何享受更简易、更安全的部署?

写在前面 <Kubernetes 加入Docker 平台,Mac和Windows开发者的福音>文章介绍了Docker CE for Mac 和 Windows对Kubernetes的支持,本文将讲述Docker EE中的新变化. Swarm 和 Kubernetes并存 Docker 企业版(EE) 是一个企业级的容器平台,包括一个私有镜像仓库.高级安全特性和整个容器生命周期的集中管理.通过将Kubernetes 引入到容器编排中,用户就能够在同一个Docker 企业版(EE) 的群集中运行S

Linux内核bug引起Mesos、Kubernetes、Docker的TCP/IP数据包失效

本文讲的是Linux内核bug引起Mesos.Kubernetes.Docker的TCP/IP数据包失效,[编者的话]最近发现Linux内核bug,会造成使用veth设备进行路由的容器(例如Docker on IPv6.Kubernetes.Google Container Engine和Mesos)不检查TCP校验码(checksum),这会造成应用在某些场合下,例如坏的网络设备,接收错误数据.这个bug可以在三年前任何一个测试过的内核版本中发现.补丁已经被整合进核心代码,正在回迁入3.14之

Kubernetes是Docker的终结者?我不认同!

Docker的估值已经超过10亿美元,成为容器引擎的标准,但是谷歌的Kubernetes在业务流程引擎中也越来越火.我经常被问到,Kubernetes是Docker的威胁吗?   许多人认为容器中的价值是在业务流程层中的,这就是为什么他们认为Kubernetes是Docker的直接威胁.我不同意,因为Docker不是容器公司而是一家平台公司.理解这一点,就必须了解Docker的历史.      PaaS vs CaaS     Docker曾经名为dotCloud,是一家PaaS公司.所有Paa

Docker 集群工具比对:Kubernetes vs Docker Swarm

从目前来看,Kubernetes 和 Docker Swarm 是2个最常用来在集群环境中创建容器的工具.这两个工具都是被创建来管理容器集群的,而且他们都把集群中的所有服务器当成一个统一的设备来使用.但是,它们在实现方法上有巨大的不同. Kubernetes Kubernetes 是基于 google 自身多年使用 linux 容器的经验创建出来的,所以可以说它是 Google自身多年操作经验的一个复制,只是 google 把这些操作经验应用到了 Docker 上. 使用Kubernetes 来

使用Kubernetes和Docker进行简单的leader选举

本文讲的是使用Kubernetes和Docker进行简单的leader选举,[编者的话]Kubernetes简化了运行在集群中的服务部署和运维管理,然而,它也简化了这些管理工作的部署.本篇文章将会展示如何在分布式应用系统中使用Kubernetes来简单地运行leader选举. 概述 为了可靠性和伸缩性,分布式系统通常会复制多个服务任务,但往往有必要指定一个副本作为leader负责协调所有的副本. 通常在leader选举中,一组有机会成为leader的候选者都是可以确认的.这些候选者都竞相宣布自己

Kubernetes让Docker容器如虎添翼

本文讲的是Kubernetes让Docker容器如虎添翼[编者的话]本文主要讲述作者看好Kubernetes与Docker结合的未来. 一年前,我开始学习Docker容器.几个月下来,我意识到我正在学习的是一项革命性技术,原因如下: 快速学习:对于任何我想学习的工具.框架或者编程语言,按需使用Docker容器可以加快我探索性学习环境的搭建. 按需自助服务环境:Docker容器可以用来搭建按需自助服务的开发和测试环境.对于开发和测试人员来说,这是巨大生产力的助推器. 自动部署:使用Docker容器

【转载】Kubernetes 加入Docker 平台,Mac和Windows开发者的福音

写在前面 在Docker欧洲大会上,Docker宣布平台将提供对Kubernetes 的支持,并且还将为Mac 和Windows 上的Docker 社区版(CE)添加可选的Kubernetes 编排.大会现场进行了demo 预览,并计划于2017年底发布一个测试版. Docker CE for Mac 和 Windows对Kubernetes的支持 随着在Docker CE for Mac和Windows中提供对Kubernetes 的支持,Docker 公司可以跨越开发人员的工作站为客户提供端

Kubernetes管理Docker集群之部署篇

什么是Kubernetes? Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器. 主要功能如下: 1)将多台Docker主机抽象为一个资源,以集群方式管理容器,包括任务调度.资源管理.弹性伸缩.滚动升级等功能. 2)使用编排系统(YAML File)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题 3)自动管理和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭