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

结果如下:

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

posted @ 2020-03-16 11:27  Dy1an  阅读(117)  评论(0编辑  收藏