• KUBERNETES 03:Pod 资源清单


    之前对于 K8S 的操作还停留在命令行操作,本节内容则是把命令行操作转化为 yaml 配置文件。

    前面提到,Pod 分为自助式 Pod 和基于控制器管理的 Pod,这里就先从自助式 Pod 开始说起。

    K8S 中的资源

    在 K8S 中的资源可以这样区分:

    名称空间级别:

    1. 工作负载型资源:Pod,ReplicationController(RC,1.11 版本后就没用了),ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,CronJob。

    2. 服务发现和负载均衡型资源:Service,Ingress 等。

    3. 配置和存储型资源:Volume,CSI(容器存储接口)

    4. 特殊类型的存储卷资源:ConfigMap,Secret(密码等敏感数据),DownwardAPI(外部环境信息输入给容器)。

    集群级资源:

    namespace,Node,Role,ClusterNode,RoleBinding,ClusterRoleBinding 等。

    元数据型资源:

    HPA,PodTemplate,LimitRange(资源限制)

    Pod 资源清单

    查看资源清单参数:

    kubectl explain pod

    结果如下:

    这样可以看到 Pod 类型资源清单有哪些参数,如果想看某个参数下面得子参数,只需要用点分隔。如:

    kubectl explain pod.metadata

    结果如下:

    一个基本的资源清单应该具备以下内容:

    apiVersion:String,K8S 的接口版本,使用:kubectl api-versions 可以看待当前支持的接口版本,常用的是 v1。
    
    kind:String,指定资源清单的类型,如自主式 Pod 的类型就是 Pod。
    
    metadata:Object,其下面主要的参数包含:
        labels:K / V,给这个资源打标签。
        name:String,给这个资源设置一个名称。
        namespace:String,指定资源所属的名称空间,默认是 default。
    
    spec:Object,主要配置容器信息,其下面主要的参数包含:
        containers:List(必要参数),意味着可以定义多个,其下面的主要参数包含:
            name:String(必要参数),指定容器的名称。
            image:String,指定容器镜像。
            imagePullPolicy:String,值为 Always(无论本地是否有该镜像都去仓库拉取),Nerver(只用本地,不去仓库拉取),IfNotPresent(如果本地有,则不去仓库拉取,latest 版本除外)
            command:List,指定容器启动命令,替换容器默认的命令。
            args:List,指定容器启动命令的参数。
            workingDir:String,指定容器的工作目录。
            env:List,用于传递环境变量,其下面主要的参数包含:
                name:String,变量名称。
                value:String,变量的值。
            ports:List,其主要的参数包含:
                name:String,指定容器端口名称。
                containerPort:Integer(必要参数),指定容器监听的端口。
                protocol:String,协议类型。    
        restartPolicy:String,指定 Pod 重启策略,Always(停止就重启),OnFailure(错误推出则重启),Never(永不重启)
    status:Object,系统生成,不需要用户定义。

    以上是作为一个 Pod 常见的有些基础参数,至于更复杂的其他参数,后面会慢慢补充。

    注意,List 类型的每项需要在前面添加横线(-),K / V 的则不需要。

    下面以一个简单的 Pod 资源清单为例 pod-demo.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        version: v1
    spec:
      containers:
      - name: app-container
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
      - name: busybox-container
        image: busybox:latest
        imagePullPolicy: Always
        command: ["/bin/sh", "-c", "sleep 3600"]

    1. 执行创建,可以使用 create 也可以使用 apply:

    kubectl create -f pod-demo.yaml

    2. 查看 Pod:

    kubectl get pods -o wide

    结果如下:

    3. 查看 Pod 详情:

    kubectl describe pod pod-demo

    结果如下:

    4. 查看 Pod 内部指定容器日志:

    kubectl logs pod-demo -c app-container

    使用 -c 参数指定 Pod 内部的指定容器,但是由于我们这里没访问记录,所以没日志输出。

    5. 查看 Pod 的 yaml 配置:

    kubectl get pod pod-demo -o yaml

    只需要 -o yaml 则可以看到完整的 yaml 配置:

    6. 删除 Pod:

    kubectl delete pod pod-demo

    以上就是 Pod 资源清单的一些简单操作,所有的其它操作其实都是基于 Pod 资源清单的基础上增加的。

    更复杂的 Pod 资源清单示例

    pod-demo-full.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo-full
      namespace: default
      labels:
        app: myapp
        version: v1
      annotations:
        create_by: "Dylan"
        create_time: "2020-03-16"
        create_reason: "Pod demo"
    spec:
      containers:
      - name: app-container-demo
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
      - name: busybox-container-demo
        image: busybox
        imagePullPolicy: Always
        command: ["/bin/sh", "-c", "sleep 3600"]
      nodeSelector:
        serverType: app-server
      restartPolicy: Never

    新增了两个关键配置:

    1. annotations:相当于对该配置进行一个说明,有点类似 labels 标签,但是作用不同。

    2. nodeSelector:节点标签选择,这个需要试先给节点打标签。

    节点打标签的方法如下:

    1. 查看节点:

    kubectl get nodes

    如图所示:

    2. 给指定节点打标签:

    kubectl label nodes node-03 serverType=app-server --overwrite

    比如这里给节点 3 新增一个 serverType 标签。--overwrite 参数可以用于修改标签的值。

    3. 查看标签的方法:

    # 查看 Pod 标签
    kubectl get pods --show-labels 
    
    # 查看节点标签
    kubectl get nodes --show-labels
    
    # 显示指定标签的 Pod
    kubectl get pods -L app
    
    # 显示节点,包含指定标签的节点显示值
    kubectl get nodes -L serverType
    
    # 只显包含指定标签的节点
    kubectl get nodes -l serverType --show-labels
    
    # 判断关系选择,=,!=,in,not in
    kubectl get nodes -l "serverType in (app-server,db-server)" --show-labels

    结果如下:

    标签选择器后面会详细的说明。

  • 相关阅读:
    剑指offer JZ-1
    侯捷《C++面向对象开发》--String类的实现
    侯捷《C++面向对象开发》--复数类的实现
    辛普森悖论
    马尔可夫链的平稳分布
    熵和基尼指数的一些性质
    UVA 11624 Fire!(广度优先搜索)
    HDU 4578 Transformation (线段树区间多种更新)
    HDU 1540 Tunnel Warfare(线段树+区间合并)
    多重背包
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12502692.html
Copyright © 2020-2023  润新知