读书笔记(二):Pod

eg:

vim test.yaml
apiVersion: v1
  kind: Pod
  metadata:  # pod 的源数据信息,可以写多个
    name: nginx-busybox # pod 的名字
spec:
  containers:
  - name: nginx  # 容器的名字
    image: nginx:alpine  # 镜像的名字
    ports:
    - containerPort: 80
  - name: busybox
    image: busybox
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo hello; sleep 10;done"]
#创建pod
kubectl create -f test.yaml

#查看pod详细信息
kubectl describe pod nginx-busybox

静态pod

静态pod是由kubelet进行管理仅存在特定node上的pod。他不能通过API server进行管理,并且无法进行健康检查。创建方法:

  • 配置文件方式

设置kubelet启动参数“--pod-manifest-path”或者在kubectl的配置文件中添加staticPodPath(官方推荐)
eg:--pod-manifest-path=/pods/kubelet
创建一个yaml文件,将其放入该目录中,kubelet会扫描该目录,创建目录下的pod。
使用docker ps命令可以查看到该容器,但是使用kubectl delete无法删除该pod,只能通过删除目录下的文件实现

  • HTTP方式

设置启动参数“--manifest-url”,kubelet会定期从该url下载pod定义文件,可以解析yaml以及json文件。

configmap----pod的配置管理

典型用法:

  • 生成容器内的环境变量
  • 设置容器启动命令的启动参数
  • 以volume的方式挂载为容器内部的目录或文件

config实现环境变量:
在1.6版本引入了envFrom,实现了pod环境中将configMap中所定义的字段自动转化为环境变量

#定义configMap
apiVersion: v1
kind: ConfigMap
metadate:
  name: test-config
data:
  a: 1
  b: 2
#使用envFrom将config定义的变成环境变量
apiVersion: v1
kind: Pod
metadate:
  name: env-config
spec:
- containers:
  - name: env-config
    image: busybox
    command: ["/bin/bash", "-c" , "env"]
    envFrom:
    - configMapRef
       name: test-config   

创建pod后,容器内部的环境变量会添加a=1,b=2。当然,如果环境变量名非法时,系统会跳过该条继续执行。

configMap实现volume

configMap的限制条件:

  • 必须在pod之前创建
  • 不能跨namespace使用
  • 无法实现配额管理
  • 静态pod无法使用configMap
  • 只能挂载目录,无法挂载文件。同时,被挂载的容器内部的目录将被覆盖

Downward API

作用:让 Pod 里的容器能够直接获取到这个 Pod API 对象本身的信息。

实现方法:

pod的生命周期

  • 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。
  • 运行中(Running):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  • 成功(Succeeded):Pod 中的所有容器都被成功终止,并且不会再重启。
  • 失败(Failed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。
  • 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

pod的健康检查

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

  • ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
  • TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。
  • HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。

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

  • 成功:容器通过了诊断。

  • 失败:容器未通过诊断。

  • 未知:诊断失败,因此不会采取任何行动。

  • livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success

  • readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success

pod调度

Deployment或RC(全自动调度)

实例详解

NodeSelector(node定向调度)

通过node上的标签实现的
eg:

kubectl lable nodes k8s-node1 disktype=ssd #添加标签
kubectl get nodes --show-labels  #查看标签
#定义pod
apiVersion: v1
kind: Pod
metadata:
  name: nginx-namespace
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 8
  nodeSelector:
    disktype: ssd

NodeAffinity(node亲和度调度)

当前有两种类型的节点关联性,称为requiredDuringSchedulingIgnoredDuringExecution和 preferredDuringSchedulingIgnoredDuringExecution。您可以将它们分别视为“硬”和“软”,在某种意义上,前者指定了将Pod调度到节点上必须满足的规则(就像 nodeSelector但使用更具表现力的语法一样)指定调度程序将尝试强制执行但不能保证的首选项。后者的与要求时尽量达到的选项
名称的“ IgnoredDuringExecution”部分意味着,与nodeSelector工作原理类似,如果节点上的标签在运行时发生更改,从而不再满足Pod上的相似性规则,那么Pod仍将继续在该节点上运行。

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/e2e-az-name
            operator: In
            values:
            - e2e-az1
            - e2e-az2
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0

NodeAffinity语法支持的操作符有:in,notin,exists,doesnotexist,gt,lt。因此,可以通过notin、doesnotexist实现node的排斥功能

使用规则:

  • 如果同时指定nodeSelector和nodeAffinity,则必须满足两个条件,才能将Pod调度到候选节点上。
  • 如果指定了多个nodeSelectorTerms关联nodeAffinity类型,那么只需要其中有一个能匹配即可
  • 如果您指定matchExpressions与关联的多个nodeSelectorTerms,那么只有 matchExpressions在满足所有条件的情况下才能运行该pod
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351