Kubernetes 0-1 了解Pod

kubernetes

Pod介绍

Pod,是K8S对象模型中的最小单元,Pod里面包含着一组容器(单个容器或多个紧密耦合的容器),这时候Pod可以理解为一个机器,而Pod里面的容器则理解为该机器里面的进程。

Pod的容器运行时由容器引擎提供,默认的容器引擎是Docker;并且K8S管理的是Pod,而不是容器。

一个Pod内部的容器共享:

  • 存储:一个Pod可以指定一组共享存储卷。
  • 网络:每个Pod分配一个唯一IP(集群内IP),共享网络命名空间,包括 IP 地址和网络端口。Pod内的容器可以使用localhost互相通信,集群内Pod与Pod通信可以使用Pod分配的IP,但是由于Pod的IP是随机分配的,这种互通信的方式不太适合使用。

尽管一个Pod内可以包含多个Pod,但我们在部署应用容器时的最佳实践是一个Pod里面只包含一个应用容器作为主容器,其他容器为主容器服务,称之为辅助容器。例如主容器崩溃了,会有一个辅助容器去重启主容器。辅助容器可以有也可以没有,因为Pod里面容器的生命周期可以被Pod的生命周期取代,而Pod的生命周期可以通过Pod管理器来管理维护。

将我们应用服务隔离单独部署在Pod的好处可以罗列以下:

  • Pod可以分别的调度到各个K8S节点,充分利用了节点的计算资源;
  • 方便我们单独为某个应用服务做扩缩操作。

Pod创建

在K8S集群中一般不会直接单独创建Pod,而是通过Pod管理器。如果单独创建Pod,Pod的进程被结束的话,Pod就永远被删除;使用Pod管理器创建出来的Pod,Pod管理器会负责保证Pod按期调度,即使Pod被删除,也会重新被调度起来。简而言之,Pod的生存由Pod管理器全权负责。

Pod管理器包含很多种,由很早的ReplicationController过渡到ReplicaSet再过渡到当前普遍使用的Deployment,其实这三者能做的事情是类似的,都是调度和监视Pod列表,保证Pod列表与声明的数量和其他期望相符。

除此之外还有其他的管理器:

  • StatefuleSet:带状态的Pod管理器,需要持久存储数据,一般用于创建数据库类型的应用实例,如mysql,redis;
  • DaemonSet:每个符合条件的Node都分配一个Pod,一般用于创建agent服务,如日志收集组件,指标数据收集组件等。

一般通过以下方式创建Pod

  • 单行命令创建Pod
kubectl run nginx --image=nginx:latest --replicas=2

以上命令实际上是创建了一个Deployment资源和由其管理的2个Pod。

  • 定义资源清单,创建Pod

以yaml或者json格式定义Pod资源,大都选择yaml。如果你使用VSCode的话,那么Kubernetes Support插件会成为你的利器。

我们先定义个一个Pod的资源文件pod-sample.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: Always
      restartPolicy: Never
      resources:
        requests:
          memory: "128Mi"
          cpu: "256m"
        limits:
          memory: "256Mi"
          cpu: "512m"
      ports:
        - containerPort: 80

以上是一个简单的Pod定义文件,我们可以从这个文件得到这些信息:

  • 运行nginx镜像,作为Pod的主容器,向外暴露80端口;
  • 每次启动这个Pod都会从网络拉取镜像;
  • 如果主容器不小心挂了,则不会被重启;
  • 容器启动需要的最小资源和运行最大资源。

然后通过kubectl命令创建(下面这行命令也适用于更新Pod):

kubectl apply -f pod-sample.yaml

查看Pod:

kubectl get pod -o wide

通过查看Pod的描述、Pod里面容器的运行日志,或直接进入Pod容器分析定位问题:

# 描述Pod详情
kubectl describe pod <POD_NAME>
# 查看Pod容器控制台运行日志
kubectl logs <POD_NAME>
# 进入Pod
kubectl exec -it <POD_NAME> -c <CONTAINER_NAME> -- <COMMAND>

删除Pod:

kubectl delete -f pod-sample.yaml
kubectl delete pod <POD_NAME>

Pod字段

通过以下命令查看定义Pod资源的字段即作用:

kubectl explain pod
kubectl explain pod.spec

对一些字段简单介绍一下:

imagePullPolicy

镜像拉取策略,有三种,Always、IfNotPresent、Never

  • Always:每次都拉取最新镜像,默认策略;
  • IfNotPresent:如果Pod被调度的Node上已经存在镜像了则直接使用镜像,不存在在拉取;
  • Never:只使用Node上的镜像,即使不存在也不拉取。

restartPolicy

Pod重启策略,有三种:Always、OnFaliure、Never

  • Always:Pod只要终止运行,kubelet就会重启它;
  • OnFaliure:Pod非正常终止,退出码不为零,kubelet就会重启它,正常退出不会重启;
  • Never:退出了就不重启。

nodeSelector

定义Lable对,选择调度到拥有该Label对的Node节点。

livenessProbe

存活指针,可以理解为Pod内容器运行的健康检查,如果健康检查没通过,则重启Pod内容器,这里面的内容有点多,有机会详细讲。

readinessProbe

就绪指针,也是通过健康检查机制,对外呈现Pod的就绪状态,如果健康检查通过,Pod状态为就绪,可以接受外部流量请求。流量无法转发到非就绪状态的Pod。

command

容器启动时的命令列表,和Dockerfile中定义的CMD作用一样。

args

容器启动命令的参数。

env

容器内的环境变量列表,和Dockerfile中定义的ENV作用一样。

resource

可以定义容器启动的最小字段和运行最大分配资源,对Pod的资源使用的控制。

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