K8s-----(三)资源清单文件的编写
资源清单1 格式apiVersion: group/version ## api资源属于的组和版本,同一个组可以有多个版本kind:##标记创建的资源类型,##k8s主要支持以下资源类别:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjobmetadata:## 元数据name:## 对像名称namespace:## 对象所属命名
·
K8s资源清单文件的编写
在 K8S 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod,这样的 yaml 文件我们一般称为资源清单
1 资源清单的格式
apiVersion: group/version ## api资源属于的组和版本,同一个组可以有多个版本
kind: ## 标记创建的资源类型,
## k8s主要支持以下资源类别:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
metadata: ## 元数据
name: ## 对像名称
namespace: ## 对象所属命名空间
labels: ##指定资源标签,标签是一种键值数据
spec: ## 定义目标资源的期望状态
status ## 显示资源的当前状态,应该与spec 一致
2 常用字段的解释
参数 | 字段类型 | 说明 |
---|---|---|
version | String | K8S API 的版本,目前基本是v1,可以用 kubectl api-version 命令查询 |
kind | String | 指的是 yaml 文件定义的资源类型和角色, 比如: Pod |
metadata | Object | 元数据对象,固定值写 metadata |
metadata.name | String | 元数据对象的名字,这里由我们编写,比如命名Pod的名字 |
metadata.namespace | String | 元数据对象的命名空间,由我们自身定义 |
Spec | Object | 详细定义对象,固定值写Spec |
spec.containers[] | list | 这里是Spec对象的容器列表定义,是个列表 |
spec.containers[].name | String | 定义容器的名字 |
spec.containers[].image | String | 定义要用到的镜像名称 |
spec.containers[].imagePullPolicy | String | 定义镜像拉取策,有Always、Never、IfNotPresent 三个值可选。(1)Always:是每次都尝试重新拉取镜像; (2)Never:表示仅便用本地镜 ;(3)IfNOtPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。; 默认值是Always |
spec.containers[].command[] | List | 指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令 |
spec.containers[].largs[] | List | 指定容器启动命令参数,因为是数组可以指定多个 |
spec.containers[].worKingDir | String | 指定容器工作目录 |
spec.containers[].volumeMounts[] | List | 指容器内部的存卷配置 |
spec.containers[].volumeMounts[].name | String | 指可以被容器挂载的存储卷的名称 |
spec.containers[].volumeMounts[].mountPatn | String | 指可以被容器挂载的存储卷路径 |
spec.containers[].volumeMounts[].readOnly | String | 设置存储卷路径的读写模式,ture或者false,默认为读写模式 |
spec.containers[].ports[] | List | 指定容器需要用到的端囗列表 |
spec.containers[].ports[].name | String | 指定端口名称 |
spec.containers[].ports[].containerPort | String | 指定容器需要监听的端囗号 |
spec.containers[].ports[].hostPort | String | 指定容器所在主机需要监听的端囗号,默认跟上面containerPort相同,注意设置了 hostPort同一台主机无法启动该容器的相同副本(因为主机端囗号不能相同,这样会冲突) |
spec.containers[].ports[].protocol | String | 指定端囗协议,支持TCP和UDP,默认值为TCP |
spec.containers[].env[] | List | 指定容器运行前需设置的环境变量列表 |
spec.containers[].env[].name | String | 指定环境变量名称 |
spec.containers[].env[].value | String | 指定环境变量值 |
spec.containers[].resources | Object | 指定资源限制和资源请求的值(这里开始就是设置容器的资源上限〕 |
spec.containers[].resources.limits | Object | 指定设置容器运行时资源的运行上限 |
spec.containers[].resources.limits.cpu | String | 指定CPU的限制,单位为core数,将用于 docker run --cpu-shares参数 |
spec.containers[].resources.limits.memory | String | 指定MEM内存的限制,单位为MiB、GiB |
spec.restartPolicy | String | 定义Pod的重启策略,可选值为Always、OnFailure, 默认值为 Always。(1)Always: Pod 一旦终止运行,则无论容器是如何终止的,Kubelet服务都将重启它。(2)OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束〔退出码为0),则 kubelet将不会重启它。(3)Never:Pod终止后,kubelet将退出码报给Master,不会重该Pod |
spec.nodeSelector | Object | 定义Node的Label过滤标签,以key:value格式指定 |
spec.imagePuIlSecrets | Object | 定义pull镜像时便用secret名称,以name:secretkey格式指定 |
spec.hostNetwork | Boolean | 定义是否使用主机网络模式,默认值为false。设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法在同一台宿主机上启动第二个副本 |
3 清单资源文件的使用
3.1 查看帮助文档
- 查询api-versions命令:
kubectl api-versions
- 查询帮助文档:
kubectl explain pod
- 查询 pod.apiVersion的帮助文档:
kubectl explain pod.apiVersion
- 查询metadata的帮助文档:
kubectl explain pod.metadata
- 查询spec的帮助文档:
kubectl explain pod.spec
- 查询spec.containers的帮助文档:
kubectl explain pod.spec.containers
3.2 用资源清单文件创建pod
kubectl apply:通过文件名或控制台输入,对资源进行配置
- 编写资源清单文件:
vim pod.yml
apiVersion: v1
kind: Pod ## 类型
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx ## 容器的名字
image: myapp:v1 ## 镜像
imagePullPolicy: IfNotPresent ## 镜像的拉取策略
- 应用资源清单文件:
kubectl apply -f pod.yml
- 显示运行中的Pod、Service、Deployment以及ReplicaSet的关键信息:
kubectl get all
- 显示名为nginx的pod的详细信息:
kubectl describe pod nginx
3.3 清单资源文件配置deployment
(1)查看deployment的帮助文档: kubectl explain deployment
- 查看deployment.spec的帮助文档:
kubectl explain deployment.spec
- 查看deployment.spec.selector的帮助文档:
kubectl explain deployment.spec.selector
- 查看帮助文档:
kubectl explain deployment.spec.template
- 查看帮助文档:
kubectl explain deployment.spec.template.metadata
- 查看帮助文档:
kubectl explain deployment.spec.template.spec
- 查看帮助文档:
kubectl explain deployment.spec.template.spec.containers
(2)编写资源清单文件:vim pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabelsz:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
- 将pod.yml中的配置应用到pod:
kubectl apply -f pod.yml
- 显示运行中的Pod、Service、Deployment以及ReplicaSet的关键信息:
kubectl get all
,Deployment控制器创建成功
- 显示运行中名为nginx的Deployment的详细信息:
kubectl describe deployments.apps nginx
- 通过yaml文件删除对象:
kubectl delete -f pod.yml
(3)副本数量的拉伸和更新:
- 编辑文件:
pod.yml
- 将pod.yml中的配置应用到pod:
kubectl apply -f pod.yml
- 副本的数量成功拉伸
(3)通过查看yaml模板修改编写yml文件
kubectl create deployment nginx --image=myapp:v1
kubectl get deployments.apps nginx1 -o yaml ## -o yaml:输出为yaml格式
- 编辑清单资源文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: myapp:v2
imagePullPolicy: IfNotPresent
- name: busyboxplus
image: busyboxplus
imagePullPolicy: IfNotPresent
stdin: true
tty: true
- 应用资源清单文件:
kubectl apply -f pod.yml
- 查看pod的信息:
kubectl get pod
- 查看控制器的信息:
kubectl describe deployments.apps nginx
- 进入容器的交互式界面:
kubectl attach nginx-6df797d79b-59mwl -c busyboxplus -it
4 标签:增删该查
(1)什么是Label ?
Label是Kubernetes系列中另外一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。
通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作
(1)标签的增删该查
- 查看标签:
kubectl get node --show-labels
- 打标签:
kubectl label node server4 app=nginx
- 查看标签:
kubectl get node server4 --show-labels
- 删除标签:
kubectl label node server4 app-
- 查看标签:
kubectl get node server4 --show-labels
(2)pod的标签
- 创建pod:
kubectl run nginx --image=myapp:v1
- 查看标签:
kubectl get pod --show-labels
- 过滤标签:
kubectl get pod -l run
- 打标签:
kubectl label pod nginx version=v1
- 查看标签:
kubectl get pod nginx --show-labels
- 更改标签:
kubectl label pod nginx run=myapp --overwrite
- 查看标签:
kubectl get pod nginx --show-labels
更多推荐
已为社区贡献22条内容
所有评论(0)