draveness / blog-comments

面向信仰编程
https://draveness.me
140 stars 6 forks source link

为什么 Kubernetes 要替换 Docker - 面向信仰编程 · /whys-the-design-kubernetes-deprecate-docker #231

Closed draveness closed 2 years ago

draveness commented 3 years ago

https://draveness.me/whys-the-design-kubernetes-deprecate-docker/

jerrylususu commented 3 years ago

似乎文中有一处描述不是很统一?

「作为声明式接口的拥趸,CRI 没有使用声明式的接口」

「虽然社区最终为 CRI 选择了声明式的接口」

draveness commented 3 years ago

似乎文中有一处描述不是很统一?

「作为声明式接口的拥趸,CRI 没有使用声明式的接口」

「虽然社区最终为 CRI 选择了声明式的接口」

后面的有问题,我来改一下

Xpectuer commented 3 years ago

想问一下大佬,如何为大型开源项目贡献代码? 比如如何分析茫茫多模块中的需求之类的?

draveness commented 3 years ago

想问一下大佬,如何为大型开源项目贡献代码? 比如如何分析茫茫多模块中的需求之类的?

看看 https://draveness.me/kubernetes-contributor/

Xpectuer commented 3 years ago

想问一下大佬,如何为大型开源项目贡献代码? 比如如何分析茫茫多模块中的需求之类的?

看看 https://draveness.me/kubernetes-contributor/

谢谢

wujunwei commented 3 years ago

除了文中提到的 CRI-O、Containerd,还有哪些支持 CRI 的容器运行时?

还有podman

cjamhub commented 3 years ago

发现大佬几乎每周都会写一篇很全的文章,自己去实践的时候发现真的很难,可以分享下这方面的经验么?比如时间怎么安排,工作和生活怎么平衡呢?

draveness commented 3 years ago

发现大佬几乎每周都会写一篇很全的文章,自己去实践的时候发现真的很难,可以分享下这方面的经验么?比如时间怎么安排,工作和生活怎么平衡呢?

可以看看这个 https://draveness.me/few-words-time-management/

cjamhub commented 3 years ago

@draveness

发现大佬几乎每周都会写一篇很全的文章,自己去实践的时候发现真的很难,可以分享下这方面的经验么?比如时间怎么安排,工作和生活怎么平衡呢?

可以看看这个 https://draveness.me/few-words-time-management/

谢谢

baichuan0898 commented 3 years ago

整篇文章其实可以概括成一句话:“由于 Docker 接口的不兼容,导致 Kubernetes 的架构在早期设计上违背了 The Liskov Substitution Principle。其结果就是 Kubernetes 的架构被一个额外的、复杂的机制(Dockershim)污染。而这样的额外机制通常是难以维护的。随着 Kubernetes 架构的不断成熟,架构必需在兼容性和可维护性之间作出取舍。因此 Kubernetes 最终移除了 Dockershim 的相关代码。” 止于 CRI 为什么选择了命令式接口?个人觉得是因为涉及 Remote Procedure Call,使用命令式接口可以使架构逻辑更清晰。

listen-lavender commented 3 years ago

还是很好奇,大佬说的的源码 RuntimeService 和 ImageService是命令式接口,那么k8s的源码里面存在声明式的golang interface源码吗?大佬说的k8s主流声明式,是指那些最上层的yaml文件么

draveness commented 3 years ago

@listen-lavender 大佬说的k8s主流声明式,是指那些最上层的yaml文件么

是的

listen-lavender commented 3 years ago

@draveness

@listen-lavender 大佬说的k8s主流声明式,是指那些最上层的yaml文件么

是的

cri、cni、csi是为了集成和扩展模块而设计的,集成和扩展应该需要编码实现,声明式的东西应该不好做集成吧。

draveness commented 3 years ago

@listen-lavender

cri、cni、csi是为了集成和扩展模块而设计的,集成和扩展应该需要编码实现,声明式的东西应该不好做集成吧。

这些插件也可以直接监听 Pod 资源,根据 Pod 的资源自动创建网络、存储或者容器,跟其他的 Kubernetes 控制器使用相同的逻辑,这样接口就是声明式的 YAML

listen-lavender commented 3 years ago

@draveness

@listen-lavender

cri、cni、csi是为了集成和扩展模块而设计的,集成和扩展应该需要编码实现,声明式的东西应该不好做集成吧。

这些插件也可以直接监听 Pod 资源,根据 Pod 的资源自动创建网络、存储或者容器,跟其他的 Kubernetes 控制器使用相同的逻辑,这样接口就是声明式的 YAML

谢谢解答

那么cri、cni算是命令式的接口,csi貌似是yaml配置的,应该算是声明式的;如果cri和cni也实现声明式的,意味着在yaml里面可以进行运行和网络相关的更细粒度和灵活的配置。

shuaiyy commented 3 years ago

现在docker的运行时也是用的Containerd吧?

feil0n9wan9 commented 3 years ago

Kubernetes放弃Docker支持是情理之中的事情。楼主主要从技术层面剖析了原因,也谈到一点Kubernates本身的产品策略。我想补充一个观点是,这本质上就是一场商业战争,背后的操纵者是Google。Kubernetes、CNCF是Google祭出的打破AWS、Microsoft云计算僵局、颠覆Docker公司的杀手级产品和策略。2015年以前,Docker是容器领域的领导者,AWS是云计算领域的霸主,Google如何突围?Google敏锐的以容器编排为切入点,将Docker视为工具以弱化Docker公司的影响力,通过CNCF、开源、技术共享极大降低了云计算PaaS/SaaS门槛,与最广大的小微云服务厂商形成统一战线联盟,使AWS、Microsoft等先发云计算厂商只有IaaS的优势。Google又一次炮制了Android、Tensorflow的开源戏法,回过头看真是一场翻手为云覆手为雨的大戏。