k8s-字段说明

什么是pod:

以下内容摘抄自 Kubernetes官方文档:

Pod 是 Kubernetes 最基本的组成块,它是 Kubernetes 最小、最简单的可用来创建和部署的单元。 一个 Pod 代表了一个运行在集群里的进程。

Pod 里封装了一个(或者多个)应用容器,存储资源,以及惟一的网络 IP。

Docker 是 Kubernetes Pod 里最常见的运行环境, 当然 Pod 也支持其他的容器环境。

Kubernetes 运用 pod 的方式:

Pod 里只运行一个单独容器 “one-container-per-Pod” 模式是 Kubernetes 最常见的使用场景;在这种情况下,可以把 Pod 看做是一个单独容器的连接器, Kubernetes 通过 Pod 去管理容器。
Pod 中运行多个相互作用容器。 Pod 封装了一组紧耦合、共享资源、协同寻址的容器。 这些协同寻址的容器可能来自一组粘性很强的服务 – 比如说:在用容器的共享卷提供对外文件服务的同时用 “sidecar” 容器刷新、更新这些文件。Pod 将这些容器和存储资源打包成一个管理实体。
Pod 是标准的 Kubernetes 资源,它也遵循资源定义清单的基本格式:apiVersion、kind、metadata、spec、status(只读,它是由 Kubernetes 系统提供和更新)

本文主要整理里了 Pod.spec 字段可以内嵌的常用字段,重点在 Pod.spec.containers 字段中可定义的众多字段;

1. spec.containers 可内嵌的字段

containers 是 Pod.spec 内嵌字段中唯一一个带有 -required- 标记的字段,而 containers 是一个对象列表,下面说明一下 containers 可内嵌的各字段的作用:

1.1 name
name -required- 必须给出的字段,定义具有唯一性的容器的名称;
举例演示:

containers:
- name: myapp

1.2 image
image 指明容器要运行的镜像;

举例演示:

containers:
 - name: myapp
  image: nginx:1.14-alpine

1.3 imagePullPolicy
imagePullPolicy 定义镜像的拉取策略,可定义的值有三个:

  • Always:无论本地有或者没有这个镜像,都去镜像仓库中获取;
  • Never:从不,如果本地仓库有就用,没有也不会下载。需要手动去获取镜像;
  • IfNotPresent:如果本地存在就使用,如果没有就去远程仓库获取;

注意:如果标签是 latest 那么默认策略就是 Always;

举例演示:

containers:
- name: myapp
  image: nginx:1.14-alpine
  imagePullPolicy: IfNotPresent

1.4 ports

ports <[]Object> 定义容器内要暴露的端口,可以暴露多个端口,而且每一个端口都可以有多个属性:

containerPort -required- :暴露的端口
name :自定义一个名字
protocol :协议,TCP或UDP,默认为TCP
举例演示:

containers:
- name: myapp
  image: nginx:1.14-alpine
  imagePullPolicy: IfNotPresent
  ports:
  - name: http
    containerPort: 80
  - name: https
    containerPort: 443

1.5 command 和 args
command 和 args 用来修改镜像中的默认应用;

args <[]string>:作用等同于,Dockerfile中的 CMD,向 ENTRYPOINT 传递参数的,如果这里没有给出 args 参数,而镜像内即有 CMD 又有 ENTRYPOINT 则镜像内 CMD 的参数将传递给 ENTRYPOINT 作为参数;如果这里给了 args 那么,镜像内的 CMD 的参数就不会传递给 ENTRYPOINT,而是用 args 传递的参数;

command <[]string>:作用等同于,Dockerfile中的 ENTRYPOINT 指令,用于运行程序的默认命令;如果没有给出 command 则默认运行镜像制作时的默认程序
举例演示:

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]

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

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

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

HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。

每个容器都可以运行两个探针:

  • livenessProbe 存活性探测,用来探测容器内主进程是否活着;
  • readinessProbe 就绪性探测,用来探测容器内主进程是否能够正常提供服务,比如容器内 nginx
    主进程是活的,但是网页文件已经不再了,服务是不可用的;
  • 下面我以 livenessProbe 为例演示三种类型的探测方式,readinessPorbe 使用方法相同。

示例:

apiVersion: v1
kind: Pod 
metadata:
   name: myapp-pod
   labels:
     app: myapp
spec:
  containers:
  - name: myapp-container
   images: busybox
   command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
   image: busybox
   commond: ['sh' , '-c','until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox
   commond: ['sh', '-c', 'until nslooup mydb; do echo waiting for mydb; sleep 2; done;']
发布了44 篇原创文章 · 获赞 0 · 访问量 971

猜你喜欢

转载自blog.csdn.net/qq_39122146/article/details/103756077
今日推荐