解释代码
本页目录· 16 条
这一页有部分内容暂时无法显示,其余内容完整。
此处有一段内容暂不支持显示。
1. apiVersion: apps/v1
意思是:
我要使用 Kubernetes 里 apps/v1 这个 API 版本。
这就像在说:
“我接下来创建的这个对象,要按照 apps/v1 这套规则解释。”
这里为什么是 apps/v1?
因为 Deployment 这个对象属于 apps 这一组 API。
2. kind: Deployment
意思是:
我要创建的对象类型是 Deployment。
也就是告诉 Kubernetes:
“这不是 Pod,不是 Service,不是 ConfigMap,而是一个 Deployment。”
这一步很重要,因为 Kubernetes 里有很多对象类型。
kind 就是在说:我到底在创建谁。
3. metadata:
这一段是这个对象自己的基本信息。
name: nginx
意思是:
这个 Deployment 的名字叫 nginx。
这个名字是 Kubernetes 里这个对象的名字,不是容器名字,不是镜像名字。
以后你可以用这个名字去查它、删它、更新它。
比如你会看到类似这种命令:
labels:
意思是:
给这个 Deployment 打一个标签:run=nginx
标签你可以理解成:
分类贴纸
Kubernetes 很喜欢用标签去找对象、分组对象、关联对象。
这里虽然标签很简单,但它的作用是让系统知道:
“这个 Deployment 属于 nginx 这一类。”
4. spec:
spec 就是:
你希望这个对象长成什么样。
这是最关键的一大块,因为 Kubernetes 是声明式的。
你就在这里告诉它你的“期望状态”。
5. replicas: 2
这个非常重要。
意思是:
我要 2 个副本。
也就是:
我要有 2 个 Pod 在运行。
现实里怎么理解?
本来你可以只开 1 个 nginx。
但如果那 1 个挂了,服务就断了。
所以你说:
“不要只给我 1 个,给我 2 个。”
这样 Deployment 就会努力维持 2 个。
现实作用
比如你的网站有一点流量,或者你不希望单点故障,那就会设置多个副本。
如果其中一个 Pod 挂了,Deployment 会补回来,继续维持 2 个。
6. selector:
这个很关键,很多初学者这里容易懵。
它的意思是:
Deployment 要管理哪些 Pod?
答案是:
管理所有带有 run: nginx 这个标签的 Pod。
也就是说,Deployment 不是随便抓 Pod。
它要通过标签去找到“属于自己管辖范围”的 Pod。
你可以把它理解成:
“店长要管理哪些员工?”
答:管理所有胸牌上写着 run=nginx 的员工。
7. template:
这个也特别重要。
你可以理解成:
Pod 的模板。
也就是说:
“以后我要创建新的 Pod 时,请按照这个模板来造。”
Deployment 本身不会直接运行程序。
它是根据 template 里的定义,去创建 Pod。
8. template.metadata.labels
意思是:
按这个模板创建出来的 Pod,都要带上 run: nginx 这个标签。
为什么这一步很重要?
因为上面 selector.matchLabels 在说:
“我要找 run=nginx 的 Pod 来管理。”
那你新建出来的 Pod 当然也必须打上这个标签,不然 Deployment 就认不出它们是自己的 Pod。
所以这里其实是在保证:
Deployment 能找到并管理自己创建出来的 Pod。
9. template.spec
这一段是在定义:
这个 Pod 里面到底跑什么。
10. containers:
意思是:
这个 Pod 里要运行一个容器。
这个容器:
- 名字叫
nginx - 用的镜像是
nginx:1.15.8
image: nginx:1.15.8
就是:
“我要跑 nginx 这个镜像的 1.15.8 版本。”
name: nginx
这是这个容器在 Pod 里的名字。
11. ports:
意思是:
这个容器内部监听 80 端口。
也就是 nginx 容器内部提供 web 服务的端口是 80。
注意这里很多初学者会误会:
这不代表外部已经能访问它了。
它只是告诉 Kubernetes:
“这个容器内部服务跑在 80 端口。”
如果你想让集群内其他服务访问它,或者让外部用户访问它,通常还需要再创建 Service。