Kubernetes-资源清单

Kubernetes-资源清单

1-基本格式

apiVersion: group/version  指明api资源属于哪个群组和版本,同一个组可以有多个版本
        $ kubectl api-versions

kind: 资源类别,标记创建的资源类型,k8s主要支持以下资源类别
        Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
    
metadata:元数据,主要提供以下字段
        name:同一类别下的name是唯一的
        namespace:对应的对象属于哪个名称空间
        labels:标签,每一个资源都可以有标签,标签是一种键值数据
        
spec: 定义目标资源的期望状态,资源对象中最重要的字段
        containers:定义容器信息

2-示例

2.1-pod

2.1.1-pod清单

1-运行单个容器

# API的版本号
apiVersion: v1
# 部署的资源类型
kind: Pod
# 元数据信息
metadata:
  # 资源的名称
  name: nginx01
# 自定义Pod资源的配置
spec:
  # 定义容器相关信息
  containers:
    # 定义容器的名称
  - name: nginx01_c1
    # 定义容器基于哪个镜像启动
    image: nginx:1.18

2-运行多个容器

# API的版本号
apiVersion: v1
# 部署的资源类型
kind: Pod
# 元数据信息
metadata:
  # 资源的名称
  name: nginx+alpine
# 自定义Pod资源的配置
spec:
  # 定义容器相关信息
  containers:
    # 定义容器的名称
  - name: nac01
    # 定义容器基于哪个镜像启动
    image: nginx:1.18
  - name: nac02
    image: alpine
    # 为终端分配一个标准输入,目的是为了阻塞容器,阻塞容器后,容器将不退出。
    stdin: true

2.1.2-标签

标签就是附加到k8s对象上的键值对标识,支持高效的查找和监听。作用就是字面意思,给k8s对象打上标签,我们可以使用标签来选择对象。

# API的版本号
apiVersion: v1
# 部署的资源类型
kind: Pod
# 元数据信息
metadata:
  # 资源的名称
  name: nginx02
  # 为资源配置标签,KEY和VALUES都是有用户自定义的
  labels:                                #//新增内容
    apps: web                            #//新增内容
    middleware: nginx                    #//新增内容
    address: wuhan                       #//新增内容
# 自定义Pod资源的配置
spec:
  # 定义容器相关信息
  containers:
    # 定义容器的名称
  - name: nginxc1
    # 定义容器基于哪个镜像启动
    image: nginx:1.18

2.1.3-覆盖容器启动命令

args和command

apiVersion: v1
kind: Pod
metadata:
  name: args-command
  labels:
     apps: web02
spec:
  containers:
  - name: args-c1
    image: nginx:1.18
    # command会覆盖镜像的ENTRYPOINT
    command:
    - "tail"
    # args会覆盖镜像的CMD指令
    args:
    - "-f"
    - "/etc/hosts"

2.1.4-资源限制

资源上限限制

apiVersion: v1
kind: Pod
metadata:
  name: resources-limits
  labels:
     apps: myweb
spec:
  containers:
  - name: c1
    image: nginx:1.18
    # 配置容器的资源限制
    resources:
       # 设置资源的上线
       limits:
          # 配置内存限制
          memory: "200Mi"
          # 配置CPU的显示,CPU的换算公式: 1core = 1000m 
          cpu: "500m"

预期资源限制

apiVersion: v1
kind: Pod
metadata:
  name: resources-requests
  labels:
     apps: myweb
spec:
  containers:
  - name: c1
    image: nginx:1.18
    # 配置容器的资源限制
    resources:
       # 配置容器期望的资源,如果所有节点不符合期望的资源,则无法完成调度
       requests:
          memory: "100Mi"
          cpu: "500m"

2.1.5-环境变量

apiVersion: v1
kind: Pod
metadata:
  name: env01
spec:
  containers:
  - name: c1
    image: nginx:1.18
    # 向容器传递环境变量,多组变量使用"-"来区分
    env:
      # 指定变量的名称
    - name: hostname
      # 指定变量对应的值。
      value: nginx001
    - name: user
      value: root
    - name: pod-name
      # 值引用自其他位置
      valueFrom:
         # 基于字段的方式引用
         fieldRef:
            # 指定字段路径
            fieldPath: metadata.name  #pod名称
    - name: pods_nodeName
      valueFrom:
         fieldRef:
             fieldPath: spec.nodeName  #节点名称
  - name: c2
    image: alpine
    stdin: true
    env:
    - name: address
      value: hi,world

2.2-存储卷

2.2.1-emptyDir

emptyDir是临时存储卷,与Pod的生命周期绑定到一起,如果Pod被删除了,这意味着数据也被随之删除

kind: Pod
apiVersion: v1
metadata:
  name: volume01
  labels:
     apps: myweb
spec:
  # nodeName: 
  # 声明存储卷类型和名称
  volumes:
  - emptyDir: {}
    name: data01
  - name: data02
    emptyDir: {}
  - name: data03
    emptyDir: {}
  containers:
  - name: c1
    image: nginx:1.20.1
    # 挂载指定的存储卷
    volumeMounts:
      # 指定存储卷的名称
    - name: data01
      # 指定容器的挂载点.
      mountPath: /data
  - name: c2
    image: alpine
    stdin: true
    volumeMounts:
    - name: data01
      mountPath: /data

2.2.2-hostPath

挂载宿主机文件或者目录到Pod中的容器。如果Pod删除了,宿主机的数据并不会被删除。

apiVersion: v1
kind: Pod
metadata:
  name: volume-hostpath-01
  labels:
     apps: myweb
spec:
#  nodeName: 
  # 声明存储卷类型和名称
  volumes:
  - name: data01
    hostPath: 
      # 指定宿主机的路径,如果源数据是文件
      path: /root/pods/config/nginx.conf
  containers:
  - name: c1
    image: nginx:1.20.1
    command: ["sleep","3600"]
    volumeMounts:
    - name: data01
      # 挂载点也必须是文件
      mountPath: /etc/nginx/nginx.conf
      # 以只读的方式挂载,默认值是false。
      # readOnly: true

如果源数据是文件,挂载点也必须是文件
源数据是目录,挂载点也必须是目录

2.2.3-nfs

apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs
  labels:
     apps: myweb
spec:
#  nodeName: 
  volumes:
  - name: nfs01
    # 配置NFS挂载
    nfs: 
      server: 10.0.0.201
      path: /data/kubernetes
  containers:
  - name: c1
    image: nginx:1.20.1
    volumeMounts:
    - name: nfs01
      mountPath: /usr/share/nginx/html

2.2.4-ConfigMap

ConfigMap数据会存储在etcd数据库,其应用场景主要在于应用程序配置

# 声明api的版本号
apiVersion: v1
# 声明资源的类型
kind: ConfigMap
# 声明资源的元数据信息
metadata:
  name: config
# 数据信息
data:
   # 单行数据
   name: "ke"
   age: "18"

   # 多行数据
   my.conf: |
      host: 10.0.0.201
      port: 13306
      socket: /tmp/mysql.sock
      username: root
      password: 1

   redis.conf: |
      host: 10.0.0.293
      port: 6379

在pod中使用

kind: Pod
apiVersion: v1
metadata:
  name: volume-configmap-v2
  labels:
     apps: myweb
spec:
#  nodeName: 
  volumes:
  - name: db
    # 定义数据卷类型是configMap.
    configMap:
      # 引用configMap的名称.
      name: config
      # 引用configMap的具体的Key相关信息.
      items:
        # 指定configmap的key名称,该名称必须在cm资源中存在.
      - key: my.cnf
        # 可以暂时理解为挂载到容器的名称.
        path: my.cnf
  - name: web
    configMap:
      name: config
      items:
      - key: nginx.conf
        path: nginx.conf
  containers:
  - name: c1
    image: nginx:1.20.1
    volumeMounts:
    - name: web
      mountPath: /etc/nginx/nginx.conf
      subPath: nginx.conf
    - name:  db
      mountPath: /etc/my.cnf
      # 当subPath的值与CM的path相同时,mountPath的路径为文件
      subPath: my.cnf

2.3-名称空间

1.名称空间是用来隔离K8S集群的资源
2.有的资源是不支持名称空间的,我们将其称为全局资源,而支持名称空间的资源我们称之为局部资源
3.我们可以通过"kubectl api-resources"命令来判断一个资源是否支持名称空间
4.删除名称空间时,会将该名称空间下的所有资源删除

2.3.1-基本管理

若创建/查看资源时,未使用"-n"选项显式指定名称空间,则默认使用"default"名称空间

kubectl get namespaces             //查看名称空间
kubectl create namespace kaike     // 创建名称空间
kubectl delete namespaces kaike    //删除名称空间
kubectl get pods,cm,secret  -n ke  // 查看ke名称空间的所有pod,cm,secret等信息。
kubectl get pods,cm,secret -A      //查看所有名称空间的pod,cm,secret等信息

2.3.2-清单

apiVersion: v1
kind: Namespace
metadata:
  name: kaike

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×