• nada
    2022-07-15
    1. 因为空调的使用是我们设置温度,然后空调尽量去达成设置的温度,即我们设置的是我们想要达成的效果,而不像电视遥控器,每次操作都发送一个指令,声明式还有一个特点是容易 patch,拿空调举例,当前气温 30 度,我们先设置了 24 度,然后升高到 26 度,空调并不会先降低到 24 度,再升高到 26 度,而是将两次传递的意图 patch,直接降低到 26 度,k8s 也是这样 2. yaml 转换 json 的过程基本上字段一一对应,除了最后会把当前的 json 再序列化为字符串,存储到 "kubectl.kubernetes.io/last-applied-configuration" 这个 annotations 中

    作者回复: great

    共 4 条评论
    23
  • psoracle
    2022-07-15
    回答一下作业 1. 你是如何理解“命令式”和“声明式”的?为什么说空调是“声明式”的? 我现在从kubernetes相关知识点中学习并理解到的“声明式”一个最直白的地方是新增与修改两个命令式操作写成apply,如果创建对象不存在则创建、对象已存在就比较spec进行相应变更,当然k8s的修改实际上是先delete再create。至于kubectl create、kubectl edit、kubectl delete等都是"命令式"操作,告诉k8s应该怎么做。 空调是“声明式”的原因是我不知道当前温度是多少,只需要我知道应该开成多少度即可,即我们在操作遥控器之前就知道我们要将空调调成多少度,这是预期值。 2. 使用 --v=9 参数,试着解释一下 YAML 是如何被 kubectl 转换成 HTTP 请求的。 虽然yaml格式是json的超集,但在k8s中的yaml文件最终都是被转换为json格式字符串放在request body中提交到apiserver的,从`kubectl -v=9`对各种操作的调试中可以看到。 除此之外,还发现一些有规律的地方,如下: 可见简单对象(如pod, configmap, secret, serviceaccount等)调用的接口形式如 `/api/<apiVersion>/namespaces/<namespace>/<kinds>[/<name>]`,其中对象类型为复数形式即`kubectl api-resources`中的name字段,修改、删除与查询具体对象时在URL中有`/<name>`部分,其它如创建、查询所有就没有。对于复合对象(简单对象的包装对象,如replicaset, deployment, statefulset, cronjob等)的URL不同的是以`/apis`开头,说明是属于复合型的接口(组合服务)。
    展开

    作者回复: awesome

    
    11
  • 陶乐思
    2022-07-15
    请问一下老师, —dry-run=client -o yaml生成的YAML默认情况下会将文件保存在哪里啊?没有找到呢…环境:windows+minikube

    作者回复: 它直接输出在屏幕上,需要用一个重定向功能,命令后面加上 > xxx.yml,或者直接鼠标选择文本。

    共 2 条评论
    8
  • aoe
    2022-07-21
    终于对一头雾水的yaml文件有了一个正确的了解,感谢老师

    作者回复: my pleasure。

    
    6
  • 安迪密恩
    2022-07-20
    这门课太棒了,以前接触的杂乱的知识点在学完这一章之后逐渐变得脉络清晰!

    作者回复: 欢迎分享学习心得。

    
    4
  • 郑海成
    2022-07-22
    有了刚才 YAML 语言知识“打底”,相信你基本上能够把它看明白,知道它是一个 Pod,要使用 nginx:alpine 镜像创建一个容器,开放端口 80,而其他的部分,就是 Kubernetes 对 API 对象强制的格式要求了。 ———— 查了一下官方文档,其实不是“开放”,好像是是“说明”容器中暴露的端口是80

    作者回复: 知道这个意思就行,不用太咬文嚼字。

    共 2 条评论
    3
  • aLong
    2023-01-06 来自上海
    首先感谢老师三个技巧。这块配置的内容我确实很头大啊。初学时看书都想跳过去看看后面内容。今天看完老师讲的有点意思啊。尤其是我喜欢那种比喻生动的多。 两种方式进行比较: 命令:简单、直观、快捷,上手快。 适合临时测试或实验。 yaml文件:文件描述了What,即应用最终要达到的状态。配置文件提供了创建资源的模板,能够重复部署。可以像管理代码一样管理部署。适合正式的、跨环境的、规模化部署。这种方式要求熟悉配置文件的语法,有一定难度。 另外 kubectl apply不但能够创建Kubernetes资源,也能对资源进行更新,非常方便。 空调这种有些需求没办法直接达到预期工作,比如制冷、制热、温度调整。 反观:电视,你想换台就换了,声音控制多少按+ -就行了。 所以空调很多功能更像是声明式。

    作者回复: awesome!

    
    2
  • bruce
    2022-12-20 来自北京
    apiVersion: v1 kind: Pod metadata: name: ngx-pod labels: env: demo owner: chrono spec: containers: - image: nginx:alpine name: ngx ports: - containerPort: 80 metadata里的name和spec里的name有啥区别?

    作者回复: 可以用kubectl explain看看这两个字段的说明,一个是对象名字,一个是容器名字。

    共 2 条评论
    2
  • pyhhou
    2022-07-21
    有两个问题想请教老师, 1. 通过 `kubectl api-resources` 看到的资源名称中其实没有 pod 而是 pods,但是我们依旧可以通过 pod 来访问对应的资源,这里是否可以理解为 k8s 自动帮忙做了单复数转换? 2. 没有看到 images 相关的资源,k8s 是如何管理 image 的呢?还是说对应的镜像管理被细分到 pod 的字段中? 3. 文章中(在 “什么是 YAML” 的结尾处)给的最后一个复杂的 YAML 例子,我试着在 https://www.bejson.com/json/json2yaml/ 上面转换成 JSON,但是平台会报如下错误: yaml错误: TypeError: Cannot read properties of undefined (reading 'split') 感觉像是缩进的问题

    作者回复: 1. pod/pods/po在Kubernetes里都是同义词,至于单复数的语法问题我就不太好解释了。 2.是的,image在Pod的container里,见下一讲。 3.我试了可以转换,再查一下看是哪里有问题。

    共 2 条评论
    2
  • 赤色闪电
    2022-07-15
    “声明式”:空调遥控器操控空调设定想要的温度和模式即可。“命令式”:电视遥控器操控电视,按一个钮换一个台。

    作者回复: good

    
    2