云原生k8s的声明式哲学
把k8s看作一篇优秀的作品,我们得先领会其中心思想。如此,方可不至于,花了时间,看了热闹,而不得其神韵。 声明式的设计哲学就是k8s的中心思想。k8s是声明式的,你只需关注(what)应该发生什么,而不需要担心(how)怎样发生。what永远比how高一个层级,可惜我们常常迷失在how的浩瀚大海里......
拨云见日之后,先回顾一下云原生的真面目,这个就像k8s的地图,有了它就不会在这个森林里迷路。
把k8s看作一篇优秀的作品,我们得先领会其中心思想。如此,方可不至于,花了时间,看了热闹,而不得其神韵。 声明式的设计哲学就是k8s的中心思想。k8s是声明式的,你只需关注(what)应该发生什么,而不需要担心(how)怎样发生。what永远比how高一个层级,可惜我们常常迷失在how的浩瀚大海里......
声明式哲学
习惯了敲各种命令,用各种胶水脚本结合五花八门的工具,或者用把屠龙刀ansible, 勉强战得魂飞魄散,才能把一套系统搭起来,烧香拜佛,提心吊胆着上线。
凭什么k8s就可以如此优雅地如小李飞刀一招制敌呢?个人认为这个背后的功力就在于k8s的声明式哲学。声明式的系统设计,就是k8s的灵魂。
你不需要告诉k8s怎么做,你需要告诉的k8s的是,你期望系统保持在什么状态,告诉他几把飞刀飞到哪即可。永远别关心,这把刀是怎么飞的,中间要穿越或躲避哪一些障碍,通通不需要。k8s会告诉你,就那么简单!
k8s又是如何贯彻和强制执行这种霸王哲学呢?k8s提供的就是软件部署和运行服务,既然是软件世界的服务,很显然最强的手法就是拿捏住API, k8s的API就是声明式而非命令式(The Kubernetes API is declarative rather than imperative).
声明式的API对于系统的自愈, 自治和应用升级更新都至关重要。 这个跟以前传统的命令式的手动操作或者需要组织调度的复杂流程(jenkins/spinnaker/ansible等)完全不一样。这种理念跟当前业界流行的不可改基础设施(immutable insfrastructure)也是高度吻合的。
声明式哲学的落地
除了那一堆api, 对应资源的kubectl apply -f 神奇的yaml文件,就是我们熟悉的restful api接口。如果只是restful风格的api, 那足以描述或抽象神奇世界的各种纷纷扰扰的关系吗?
别担心,k8s还有面向对象世界里最朴素的一个思想,一切皆对象。如下图,类名是Pod,
metadata是类的相关属性,spec是类的构造函数,这里的构造函数不仅仅说明它依赖的资源和条件,更重要的是它说明了创建对象要达到的目标。有了它,我们就拥有了跟k8s之间一份可靠的契约。你可以相信自己的十八般武艺,但有了这份契约,k8s可以让你值得信赖。
Reference
Why Kubernetes will sustain the next 50 years
更多推荐
所有评论(0)