资源清单
在使用 docker 部署容器的时候,使用 docker run 进行容器的运行,但是对于复杂的需求,如果还是使用 docker run,就会变得极其复杂和难以管理。于是便有了 docker compose。
在 kubernetes 中也会存在类似 docker run 一样的命令用于运行我们的应用。
但 Kubernetes 中应用一般配置参数都会更多,使用也会更为复杂,所以为了降低管理成本。引入了资源清单,通过配置资源清单实现类似 docker-compose 一样的管理方式。
资源清单支持两种格式:YAML
和 JSON
。
对于 Kubernetes 而言,JSON 格式能够更好的被识别。而对于 Kubernetes 用户而言,YAML 才具备更好的阅读性。
用户可以通过定义好的资源清单直接部署发布应用:
kubectl create -f xxx.yaml
# 或者
kubectl apply -f xxx.yaml
整个操作流程大致如下:
- kubectl 将资源清单提交给了 apiserver,apiserver 解析资源清单,将重要的信息存入到 etcd 数据库中。
- scheduler 监测到有新的创建需求,通过资源清单的配置,将它调度到一个最合适的节点上,然后把这个节点和 Pod 绑定到一起,写回到 etcd。
- 节点上的 kubelet 监测到有一个 Pod 被分配过来了,就去获取它的配置信息来把容器创建出来,再将 Pod 状态再写回到 etcd。
资源清单示例
创建一个 nginx 的 Deployment 资源清单 nginx-deployment.yaml :
# API 版本
apiVersion: apps/v1
# API 对象类型
kind: Deployment
# 元数据
metadata:
# 名称,必须
name: nginx-deploy
# 标签,用户自定义,便于使用过程中通过标签对 pod 进行筛选
labels:
chapter: first-app
# 规范
spec:
selector:
matchLabels:
app: nginx
# 设置副本数
replicas: 2
# 模板
template:
metadata:
labels:
app: nginx
# 规范
spec:
# 容器
containers:
# 容器名称
- name: nginx
# 镜像名称
image: nginx:1.7.9
# 端口
ports:
- containerPort: 80
通过 kubectl 创建应用:
kubectl create -f nginx-deployment.yaml
# 或者,推荐使用 apply,它还有更新的功能
kubectl apply -f nginx-deployment.yaml
如图所示:
可以发现:
-
资源清单中必须要有的配置包含:元数据(metadata),规范(spec),状态(status),但是 status 由创建应用后自动生成。
-
在没指定名称空间的情况下创建出来的 Pod 默认属于 Kubernets 的 default 名称空间。
-
通过修改资源清单副本数量就可以轻易的实现应用的扩缩容。
查看创建的 API 对象:
# 查看所有的 Deployment 对象
kubectl get deployment -o wide
# 查看所有的标签为 app: nginx 的 Pods
kubectl get pods -l app=nginx
# 查看创建 Pod 的详细信息
kubectl describe pod nginx-deploy-7759cfdc55-d5dw5
通过 describe 可以具体了解到 Pod 的详细信息,比如调度到的节点、状态、IP 等。一般我们比较关系 Events,Pod 的启动日志就在这里。
如果直接删除 Pod 是没法删除 deployment 的,Kuberntes 会根据资源清单继续创建 Pod,可以使用如下命令删除 deployment:
kubectl delete deployment nginx-deploy
# 或者
kubectl delete -f nginx-deployment.yaml
YAML
YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON
格式方便。YAML
的设计目标就是方便人类读写。它实质上是一种通用的数据串行化格式。
基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用
Tab
键,只允许使用空格 - 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略
还需要了解两种结构类型:
- Lists(列表)
- Maps(字典)
列表示例
# 基本格式
sports:
- football
- basketball
# 对象列表
sports:
- name: football
person: 11
- name: basketball
person: 5
# 其它写法
sports: ["football", "basketball"]
字典示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
这两种类型都是能够互相嵌套的。
编写资源清单
知道了 YAML 的使用方法,但是如何编写符合 Kubernetes API 对象的资源清单是个问题,不可能全靠死记硬背吧。
同时,Kubernetes 更新也很快,说不定某些参数在下个版本就没用了。
这里推荐两种参考方式:
- 查看官方的 API 文档:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/
通过左边的对应的 API 对象,查看创建该对象的资源清单所支持的参数。
- 通过 kubelet explain 查看,比如查看 deployment 的资源清单参数:
kubectl explain deployment
如果参数是 Object,<[]Object>,说明还有下级,可以继续往下查看:
kubectl explain deployment.spec
如果参数有 -required-
标识,说明该参数是必选项。
更多具体的编写使用方法在后面使用中会逐渐熟悉。
标签:kubectl,Kubernetes,08,nginx,deployment,清单,Pod,资源 From: https://www.cnblogs.com/ezops/p/16800512.html