Skip to content

五 配置清单使用

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
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 就是确保当前状态向目标状态无限靠近从而满足用户期望
	# 它是只读的,代表了资源当前状态
apiVersion
	# 以 "group/version" 形式指明,这个对象属于哪个 API 组(版本)
kind:
    # 资源类别,标记创建什么类型的资源
metadata:
	# 元数据内部是嵌套的字段
	# 定义了资源对象的名称、命名空间(k8s级别的不是系统的)等、标签、注解等
spec:
	# 规范定义资源应该拥有什么样的特性,依靠控制器确保特性能够被满足
	# 它是用户定义的所期望了资源状态
status:
	# 显示资源的当前状态,k8s 就是确保当前状态向目标状态无限靠近从而满足用户期望
	# 它是只读的,代表了资源当前状态
  • 获取全部的 api 版本
kubectl api-versions
kubectl api-versions
  • 获取全部的 api 资源对象

从内容可以看到一些缩写,方便我们日常命令后简写

kubectl api-resources

kubectl get po          # 查看pod
kubectl get deploy      # 查看deployment
kubectl get svc         # 查看service
kubectl get cm          # 查看 configmap
...
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
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"
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=registry-vpc.cn-hangzhou.aliyuncs.com --docker-username=admin --docker-password=123456 --docker-email=420123641@qq.com -o yaml --dry-run
kubectl create secret docker-registry regsecret --docker-server=registry-vpc.cn-hangzhou.aliyuncs.com --docker-username=admin --docker-password=123456 --docker-email=420123641@qq.com -o yaml --dry-run

5.6 create 创建

  • 创建资源清单中的资源,这样创建的为裸 POD ,没有控制器管理,所以删除后不会自动重建,成为自主式 POD
kubectl create -f pod-demo.yaml
kubectl create -f pod-demo.yaml

5.7 delete 删除

  • 删除资源清单中定义的 POD
kubectl delete -f pod-demo.yaml
kubectl delete -f pod-demo.yaml

5.8 apply 创建或更新

apply 可以执行多次,如果发现文件不同,则更新

kubectl apply -f pod-demo.yaml
kubectl apply -f pod-demo.yaml