五 配置清单使用
apiserver 仅接收 json 格式的资源定义,yaml 格式定义提供的配置清单,apiserver 可自动将其转换为 json 格式,而后再进行执行。
5.1 可配置的对象
- 可用资源清单配置的对象
workload:Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob
服务发现及均衡:Service、Ingress
配置与存储:Volume、CSI
ConfigMap、Secret
DownwardAPI
集群级资源
Namespace、None、Role、ClusterRole、RoleBinding、ClusterRoleBinding
元数据类型资源
HPA、PodTemplate、LimitRange
复制代码
5.2 配置清单组成
- 配置清单组成部分,大部分资源使用配置清单方式来创建
apiVersion
# 以 "group/version" 形式指明,这个对象属于哪个 API 组(版本)
kind:
# 资源类别,标记创建什么类型的资源
metadata:
# 元数据内部是嵌套的字段
# 定义了资源对象的名称、命名空间(k8s级别的不是系统的)等、标签、注解等
spec:
# 规范定义资源应该拥有什么样的特性,依靠控制器确保特性能够被满足
# 它是用户定义的所期望了资源状态
status:
# 显示资源的当前状态,k8s 就是确保当前状态向目标状态无限靠近从而满足用户期望
# 它是只读的,代表了资源当前状态
复制代码
- 获取全部的 api 版本
kubectl api-versions
复制代码
- 获取全部的 api 资源对象
从内容可以看到一些缩写,方便我们日常命令后简写
kubectl api-resources
kubectl get po # 查看pod
kubectl get deploy # 查看deployment
kubectl get svc # 查看service
kubectl get cm # 查看 configmap
...
复制代码
5.3 获取清单帮助
- 查看 k8s 某个内置对象的配置清单格式,应该包含哪些字段,使用 . 来显示字段的格式帮助信息
kubectl explain pods
kubectl explain pods.metadata
复制代码
5.4 清单基本格式
- 定义一个资源清单
apiVersion: v1
kind: Pod
metadata:
name: pod-deme
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
- name: busybox
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "sleep 10"
复制代码
5.5 快捷获取清单
- 使用 -o 参数来指定对象数据的输出格式,使用 --dry-run 来测试性执行一个指令,它两个结合起来,就可以通过命令创建,且生成 yaml 格式配置文件了 -o yaml --dry-run
kubectl create secret docker-registry regsecret --docker-server= --docker-username=admin --docker-password=123456 --docker-email=420123641@ -o yaml --dry-run复制代码
5.6 create 创建
- 创建资源清单中的资源,这样创建的为裸 POD ,没有控制器管理,所以删除后不会自动重建,成为自主式 POD
kubectl create -f pod-demo.yaml复制代码
5.7 delete 删除
- 删除资源清单中定义的 POD
kubectl delete -f pod-demo.yaml复制代码
5.8 apply 创建或更新
apply 可以执行多次,如果发现文件不同,则更新
kubectl apply -f pod-demo.yaml复制代码
5.9 patch 更新资源
patch 不同于apply,改名了不需要对资源清单文件进行修改,可直接对资源对象字段进行更新,支持JSON和YAML格式。
使用patch更新Node节点。
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'复制代码