k8s 中的声明式和命令式
- 命令式:亲自指挥到目的地 - docker
- 声明式:直接告诉目的地,司机自己搞定 - k8s
YAML 和 api对象
yaml 是json的超级
k8s 中API和yaml的关系
使用yaml的形式,声明式的描述系统需要达到的状态,内容是k8s对集群管理抽象的对象
类似,但是去掉了很多多余的元素,引号、括号等
下面是数组的例子
OS:
- linux
- macOS
- Windows
{
"OS": ["linux", "macOS", "Windows"]
}
为什么叫api 对象,因为这些对象通过restful接口访问api server创建,所以叫 api 对象
查看多有已知的对象
kubectl api-resources
[root@localhost ~]# kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
storage.k8s.io/v1 false VolumeAttachment
....
查看对象字段说明
kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers
创建k8s api对象 yaml 模板
注意--dry-run=client -o yaml
kubectl run ngx --image=nginx --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: ngx
name: ngx
spec:
containers:
- image: nginx
name: ngx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
解下来就可以在上线的基础上修改
最终使用kubectl apply 和 create -f 创建Pod等资源
提示
可以是用 --v=9 参数了解kubectl和api server的交互
kubectl get pod --v=9