Kubernetes-Pod控制器

795次阅读
没有评论

学会灵活运用 kubectl

kubectl explain RESOURCE [options]
Use "kubectl api-resources" for a complete list of supported resources. #列出可用的资源清单 

Pod 资源

  • 编写 Pod 的资源清单:pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

Pod 控制器

 帮助:kubectl explain pod

清单:

一级:apiVersion,kind,metadata,spec,status

下面将讲述常用的例子

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    - name: https
      containerPort: 443
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

pods.spec.containers

args 字段 =docker 镜像中的 CMD,若未定义,则 docker 镜像中的 CMD 作为参数传给 args


command 字段 =docker 镜像中的 entrypoint,若未定义,则 docker 镜像中的 entrypoint 作为参数传给 args


标签

标签过滤器

kubectl get pods -l

例:

kubectl get pods -l app (带有 app 标签的显示出来)

给 pod 打标签

kubectl label pods pod-demo release=canary

标签选择器

1. 等值关系: = , ==, !=

例: kubectl get pods -l release=stable,app=myapp(将标签带有 stable 和 myapp 的显示出来)

2. 集合关系:

KEY in (VALUE1,VALUE2 ...)
KEY noin (VALUE1,VALUE2...)
KEY
!KEY
例:kubectl get pods -l "release in (canary,beta,alpha)"
kubectl get pods -l "release notin (canary,beta,alpha)"

许多资源支持内嵌的字段定义其使用的标签选择器:

      matchLabels: 直接给定键值
      matchExpressions: 基于给定的表达式来定义使用标签选择器,{key:"KEY",operator:"OPERATOR",values:[VAL1]....}
          操作符:
             In,NotIn: values 字段的值必须非空列表
             Exists,NotExists: values 字段的值必须为空列表 

节点标签选择器

nodeSelector <map[string]string>

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports: 
    - name: http
      containerPort: 80
    - name: https
      containerPort: 443
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
  nodeSelector:
    disktype: ssd

创建在带有 node 标签有 disktype=ssd 上

nodeName <string> #运行在指定节点

annotations:

与 label 不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供 ” 元数据 ”。

Pod 容器生命周期

Status 状态

pending

Pod 已被 K8S 系统接受,但有一个或多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和下载时间

Running

该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都创建。至少有一个容器正在运行,或者正处于启动或

重启状态

Succeeded

Pod 中所有的容器都被成功终止,并且不会再重启

Failed

Pod 中的所有容器都被成功终止,并且至少有一个容器是因为失败终止。也就是,容器非 0 状态退出

或被系统终止

unknown

因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败

Kubernetes-Pod 控制器

创建 Pod:

Pod 生命周期中的重要行为:

初始化容器

重启策略

restartPolicy:

Always, OnFailure,Never,default to always

探测

容器检测:

Readness:就绪检测

liveness:生存检测

lifecycle:生命周期

探针

由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler。有三种类型的处理程序:

ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功

TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。

HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTPGet 请求。如果响应的状态码大于等于 200

且小于 400,则诊断被认为是成功的

每次探测都将获得以下三种结果之一:

成功

失败

未知

例子:kubectl create -f liveness-exec.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  containers:
  - name: liveness-exec-container
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm /tmp/healthy -f;sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/healthy"]
      initialDelaySeconds: 1
      periodSeconds: 3
正文完
 
评论(没有评论)