学习笔记十四:K8S最小调度单元POD概述

这篇具有很好参考价值的文章主要介绍了学习笔记十四:K8S最小调度单元POD概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

k8s核心资源Pod介绍

K8s官方文档:https://kubernetes.io/
K8s中文官方文档: https://kubernetes.io/zh/
K8s Github地址:https://github.com/kubernetes/kubernetes
Pod资源对应的官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/

Pod是什么

Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的。
pod相当于一个逻辑主机–比方说我们想要部署一个tomcat应用,如果不用容器,我们可能会部署到物理机、虚拟机或者云主机上,那么出现k8s之后,我们就可以定义一个pod资源,在pod里定义一个tomcat容器,所以pod充当的是一个逻辑主机的角色。

Pod如何管理多个容器

Pod中可以同时运行多个容器。同一个Pod中的容器会自动的分配到同一个 node 上。同一个Pod中的容器共享资源、网络环境,它们总是被同时调度,在一个Pod中同时运行多个容器是一种比较高级的用法,只有当你的容器需要紧密配合协作的时候才考虑用这种模式。例如,你有一个容器作为web服务器运行,需要用到共享的volume,有另一个“sidecar”容器来从远端获取资源更新这些文件。

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

一些Pod有init容器和应用容器。 在应用程序容器启动之前,运行初始化容器。

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

Pod网络

Pod是有IP地址的,假如pod不是共享物理机ip,由网络插件(calico、flannel、weave)划分的ip,每个pod都被分配唯一的IP地址

  • Kubernetes中容器共享的方式
    在k8s中,启动Pod时,会先启动⼀个pause 的容器,然后将后续的所有容器都 "link 到这个pause 的容器,以实现⽹络共享。
    学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

Pod存储

创建Pod的时候可以指定挂载的存储卷。 POD中的所有容器都可以访问共享卷,允许这些容器共享数据。 Pod只要挂载持久化数据卷,Pod重启之后数据还是会存在的。
学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

代码自动发版更新

假如生产环境部署了一个go的应用,而且部署了几百个节点,希望这个应用可以定时的同步最新的代码,以便自动升级线上环境。这时,我们不希望改动原来的go应用,可以开发一个Git代码仓库的自动同步服务,然后通过Pod的方式进行编排,并共享代码目录,就可以达到更新java应用代码的效果。

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

收集业务日志

某服务模块已经实现了一些核心的业务逻辑,并且稳定运行了一段时间,日志记录在了某个目录下,按照不同级别分别为 error.log、access.log、warning.log、info.log,现在希望收集这些日志并发送到统一的日志处理服务器上。
这时我们可以修改原来的服务模块,在其中添加日志收集、发送的服务,但这样可能会影响原来服务的配置、部署方式,从而带来不必要的问题和成本,也会增加业务逻辑和基础服务的藕合度。
如果使用Pod的方式,通过简单的编排,既可以保持原有服务逻辑、部署方式不变,又可以增加新的日志收集服务。
而且如果我们对所有服务的日志生成有一个统一的标准,或者仅对日志收集服务稍加修改,就可以将日志收集服务和其他服务进行Pod编排,提供统一、标准的日志收集方式。
这里的“核心业务服务”、“日志收集服务”分别是一个镜像,运行在隔离的容器环境中。

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

Pod工作方式

在K8s中,所有的资源都可以使用一个yaml文件来创建,创建Pod也可以使用yaml配置文件。或者使用kubectl run在命令行创建Pod(不常用)。

自主式Pod

所谓的自主式Pod,就是直接定义一个Pod资源,如下:

vim pod-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
  name: tomcat-test
  namespace: default
  labels:
    app:  tomcat
spec:
  containers:
  - name:  tomcat-java
    ports:
    - containerPort: 8080
    image: tomcat/tomcat-8.5-jre8:v1
  imagePullPolicy: IfNotPresent

导入镜像 把tomcat.tar.gz上传到k8snode1和k8snode2节点,手动解压:
链接:https://pan.baidu.com/s/1BGUFkkwFnZ-OF80weq0pQQ?pwd=r6ri
提取码:r6ri

ctr -n=k8s.io images import  tomcat.tar.gz

更新资源清单文件

kubectl apply -f pod-tomcat.yaml  

查看pod是否创建成功

kubectl get pods -o wide -l app=tomcat 

但是自主式Pod是存在一个问题的,假如我们不小心删除了pod:

kubectl delete pods tomcat-test

查看pod是否还在

kubectl get pods -l app=tomcat

结果是空,说明pod已经被删除了
通过上面可以看到,如果直接定义一个Pod资源,那Pod被删除,就彻底被删除了,不会再创建一个新的Pod,这在生产环境还是具有非常大风险的,所以今后我们接触的Pod,都是控制器管理的。

控制器管理的Pod(防误删除)

常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。
控制器管理的Pod可以确保Pod始终维持在指定的副本数运行。
如,通过Deployment管理Pod

解压镜像:把nginx.tar.gz上传到k8snode1和k8snode2节点
链接:https://pan.baidu.com/s/1EDLQ8Zt9goRFEo9K83Ufwg?pwd=qv3q
提取码:qv3q

ctr -n=k8s.io images import  nginx.tar.gz
vim nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  labels:
    app: nginx-deploy
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx/nginx:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

更新资源清单文件

kubectl apply -f nginx-deploy.yaml

查看Deployment

kubectl get deploy -l app=nginx-deploy

查看Replicaset

kubectl get rs -l app=nginx

查看pod

kubectl get pods -o wide -l app=nginx

NAME                           READY   STATUS        IP                     
nginx-test-75c685fdb7-6d4lx    1/1     Running       10.244.102.69   
nginx-test-75c685fdb7-9s95h    1/1     Running       10.244.102.68   

删除nginx-test-75c685fdb7-9s95h这个pod

kubectl delete pods nginx-test-75c685fdb7-9s95h
kubectl get pods -o wide -l app=nginx
NAME                           READY   STATUS              IP                        
nginx-test-75c685fdb7-6d4lx    1/1       Running            10.244.102.69   
nginx-test-75c685fdb7-pr8gh    1/1      Running             10.244.102.70 

发现重新创建一个新的pod是nginx-test-75c685fdb7-pr8gh
通过上面可以发现通过deployment管理的pod,可以确保pod始终维持在指定副本数量

可以通过指定配置文件删除对应pod

 kubectl delete -f nginx-deploy.yaml

如何基于Pod运行应用

创建pod流程:

学习笔记十四:K8S最小调度单元POD概述,CKA学习笔记,学习,笔记,kubernetes

kubectl apply -f nginx-deploy.yaml->找到config文件,基于config文件指定的用户访问指定的集群,这样就找到了apiserver文章来源地址https://www.toymoban.com/news/detail-651742.html

  • 通过 kubectl 命令向 apiserver 提交创建pod的请求,apiserver接收到pod创建请求后,会将pod的属性信息(metadata)写入etcd。
  • apiserver触发watch机制准备创建pod,信息转发给调度器scheduler,调度器使用调度算法选择node,调度器将node信息给apiserver,apiserver将绑定的node信息写入etcd
  • apiserver又通过watch机制,调用kubelet,指定pod信息,调用容器运行时创建并启动pod内的容器。
  • 创建完成之后反馈给kubelet, kubelet又将pod的状态信息给apiserver,apiserver又将pod的状态信息写入etcd。

到了这里,关于学习笔记十四:K8S最小调度单元POD概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S pod 均匀调度分配 —— 筑梦之路

      在 k8s 中 通过  kube-scheduler  组件来实现 pod 的调度,所谓调度,即把需要创建的 pod 放到 合适的 node 上,大概流程为,通过对应的  调度算法  和  调度策略 ,为待调度的 pod 列表中的 pod 选择一个最合适的 Node,然后目标节点上的  kubelet  通过 watch 接口监听到  kube-sch

    2024年02月16日
    浏览(31)
  • 【k8s】pod调度——亲和,反亲和,污点,容忍

    官方网址:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution:软策略  p开头 ●requiredDuringSchedulingIgnoredDuringExecution:硬策略  r开头 pod.spec.affinity.podAffinity/podAntiAffinity ●preferredDuringSchedulingIgnoredDuringExecution:软策

    2024年02月05日
    浏览(32)
  • 【K8s】什么是Pod?Pod的调度与控制器

    每个Pod中都可以包含一个或者多个容器 ,这些容器可以分为两类: 1) 用户容器 :用户程序所在的容器,数量可多可少 2) 根容器 :Pause容器,由Kubernetes创建,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据,评估整个Pod的健康状态 可以在根容器上设

    2024年02月06日
    浏览(29)
  • 22-k8s中pod的调度-亲和性affinity

            在k8s当中,“亲和性”分为三种,节点亲和性、pod亲和性、pod反亲和性; 亲和性分类 名称 解释说明 nodeAffinity 节点亲和性 通过【节点】标签匹配,用于控制pod调度到哪些node节点上,以及不能调度到哪些node节点上;(主角node节点) podAffinity pod亲和性 通过【节点+

    2024年02月20日
    浏览(38)
  • 云原生 黑马Kubernetes教程(K8S教程)笔记——第一章 kubernetes介绍——Master集群控制节点、Node工作负载节点、Pod控制单元

    参考文章:kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为

    2024年02月04日
    浏览(39)
  • K8S之运用污点、容忍度设置Pod的调度约束

    taints 是键值数据, 用在节点上 ,定义污点; tolerations 是键值数据, 用在pod上 ,定义容忍度,能容忍哪些污点。 污点 是定义在k8s集群的节点上的键值属性数据,可以决定拒绝那些pod。 给了Node选则的主动权,给Node打个污点, 不容忍 的Pod就调度不上来。 现象:刚部署好的

    2024年02月19日
    浏览(25)
  • 持续集成部署-k8s-资源调度:HPA - Pod 基于负载指标自动水平扩容缩容

    首先我们找一个 Deployment 配置文件: nginx-deploy.yaml

    2024年02月07日
    浏览(41)
  • K8s(二)Pod资源——node调度策略、node亲和性、污点与容忍度

    目录 node调度策略nodeName和nodeSelector 指定nodeName 指定nodeSelector node亲和性 node节点亲和性 硬亲和性 软亲和性 污点与容忍度 本文主要介绍了在pod中,与node相关的调度策略,亲和性,污点与容忍度等的内容 在创建pod等资源时,可以通过调整字段进行node调度,指定资源调度到满足

    2024年01月17日
    浏览(34)
  • Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器: 当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程) 大概步骤:

    2024年02月13日
    浏览(50)
  • K8s学习三(Pod与探针)

    Pod配置文件 写一个自己的配置文件,nginx-po.yaml 探针类型 探针有StartupProbe,LivenessProbe,ReadinessProbe三种类型 有ExecAction,TcpSocketAction,HTTPGetAction三种探测方式。 启动探针的使用(StartupProbe) 对上面的配置文件增加内容 在上面增加了启动探针的三种探测方式,如下 分别执行

    2024年04月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包