K8S 清单文件帮助命令和编写规则

超级好用的工具命令

命令示例

查看编写一个pod需要什么字段

# kubectl explain pod

查看pod资源清单里的某个字段如何编写

# # kubectl explain pod.spec

字段类型

  • <string>: 字符串类型
  • <integer>: 整数类型
  • <boolean>: 布尔类型, True, False
  • <Object>: 对象类型,类似K:V
  • []string: 字符串列表
  • <[]Object>: 对象列表类型,类似[{},{}...]
  • <map[string]string>: 映射类型,K:V,区别于对象,map的KV只能是字符串类型,无法再次嵌套
  • -required-: 标识该字段是必须填写的

第一个清单文件

first-mainitest.yaml文件内容

# cat first-mainitest.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test
  namespace: default
spec:
  containers:
  - name: test
    image: ikubernetes/myapp:v1
    ports:
    - containerPort: 80
      name: http
      protocol: TCP

配置解读

  • apiVersionapiVersion的规则是<group>/<version> 默认为core核心组,apiVersion:v1核心组v1版本,可以通过kubectl api-versions查看Api群组
  • kind: 资源类别,可以为PodDeployment, Service等等
  • metadata:嵌套字段
    • name: 资源的名词,体现在kubectl get获取资源时显示的名称
    • namespace: 资源所处的命名空间, 可以使用kubectl get ns获取所有的命名空间,也可以在获取资源时根据命名空间过滤,kubectl get pods -n kube-system
  • spec:嵌套字段,期望状态,规格、资源特性和规范,不同类别的资源spec不尽相同
    • containers: Pods内容器相关定义
      • name: 容器的名称,体现在docker ps所看到的容器的名称上
      • image: 容器使用的镜像
      • ports: 容器暴露的端口,可以是多个,所以是对象列表
        • containerPort: 容器暴露端口
        • name: 端口名称,后续可以在其他地方引用
        • protocol: 协议类型

其实资源清单还有一个字段,不过这个字段有些特殊

  • status: 嵌套字段,当前状态,该字段有Kubernetes集群维护该字段不需要定义,而是由K8S集群自动根据当前状态生成

根据配置清单创建资源

# kubectl apply -f first-mainitest.yaml 
pod/test created

applycreate都可以创建资源,去区别在于,apply可以适用于文件修改后更新资源,但是create不可以,只能用作创建

获取创建的资源

# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
client-bbf58867f-tzxhf   1/1       Running   1          41m
nginx-65759d8bcb-c2q5z   1/1       Running   0          50m
nginx-65759d8bcb-gswns   1/1       Running   1          2d
nginx-65759d8bcb-qzzm5   1/1       Unknown   0          2d
test                     1/1       Running   0          5s

PS: 虽然这里定义清单文件时使用的是yaml格式,但是APIServer接收到创建资源的请求时,会将yaml数据转为json格式,然后创建对应的资源

常用字段

metadata.labels

metadata:
  name: test
  namespace: default
  labels:
    app: test
    environment: develop

获取资源时显示标签,更多标签方便的操作会记录在后续的笔记中

# kubectl get pods --show-labels
NAME                     READY     STATUS    RESTARTS   AGE       LABELS
test                     1/1       Running   0          1h        app=test,environment=develop

spec.containers.imagePullPolicy

spec:
  containers:
  - name: test-app
    image: ikubernetes/myapp:v1
    imagePullPolicy: Always
    ports:
    - containerPort: 80
      name: http
      protocol: TCP

imagePullPolicy可以接受3种值

  • Always: 从镜像仓库拉取最新的镜像,如果镜像TAG为latest时则每次都会拉取
  • Never: 永远不去镜像仓库拉取镜像
  • IfNotPresent: 优先使用本地,如果本地没有则拉取仓库中镜像使用

results matching ""

    No results matching ""