pod和容器(容易混淆的地方)
在Kubenetes中,所有的容器均在 pod 中运行,一个pod可以承载一个或者多个相关的docker容器(或rkt,以及用户自定义容器),同一个Pod中的容器可以部署在同一个物理机器(可以叫宿主机)上并且能够共享资源。一个Pod也可以包含多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。
pod是k8s集群管理的最小单元,但是容器包含在pod中,一个pod中有一个pause容器和若干个业务容器,而容器就是单独的一个容器,简而言之,pod是一组容器+pause容器构成,而容器单指一个容器。 所以我们在说pod的时候不能说pod容器怎么怎么样之类的说法。
k8s是管理整个集群中的所有pod,包括调度pod,删除pod,更新pod等。
一、POD(是k8s的核心,各种应用都基本以pod和yaml来进行管理)
Kubernetes 使用 Pod 来管理容器,即用master来进行管理, 每个 Pod 可以包含一个或多个紧密关联的业务容器。一对多的关系。
而pod是部署到node节点上的或者master也可以设置可以部署pod, 假设部署到了node节点上, node节点上必然有docker, 我们可以通过docker命令进入容器
也可以在 master上通过执行 kubectl exec -it mdp-cc-85fd974f8c-slcwk -n default -- /bin/bash 这样的命令进入pod 查看内部情况。
容器是一种便携式、轻量级的操作系统级虚拟化技术,容器化不定是采用docker,但是这里我说的都是docker方式。它使用 NameSpace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。是一对一关系。
二、Node(pod载体)
Node节点是 Pod 真正运行的宿主机,可以是物理机,也可以是虚拟机
为了管理 Pod,每个 Node 节点上至少要安装docker 、安装kubelet(二进制是hyperkube) ,同时需要操作系统支持,centos6就对docker支持不好
三、Namespace(可以理解为隔离资源或者应用)
Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace 的(默认是 default),我们开发的时候不同项目可以设置不同的 namespace,同时用k8s dashboard 令牌方式管理,而 node, persistentVolumes 等则不属于任何 namespace
四、Service(对外提供服务)
Service 是应用服务的抽象,说白点就是nginx配置域名,指向集群master中暴露出来的端口,这个端口实际就是我们暴露的服务, labels 为应用提供负载均衡和服务发现机制。
匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。
五、网络通讯方式
我们考虑一下K8s集群中docker容器之间是如何通讯的?
我们这里我们有几种pod的情况
1)在同一个POD上容器通信.
2)同一个Node,不同POD.
3)不同Node,不同POD.
1) 同一个POD上Container通信
在k8s中每个Pod中管理着一组Docker容器,既然是一组就是多个,每个docker容器,通过docker ps 查看都有一个容器id,
例如在node上
[root@ht5 calico]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8da13e0e551d e76b1866726d "/bin/sh -c 'java ${…" 16 hours ago Up 16 hours k8s_config-server-node_config-server-node-0_default_b0978e90-8f36-11ec-b44a-060eb4000e9d_0 370e764c4422 k8s.gcr.io/pause-amd64:3.0 "/pause" 16 hours ago Up 16 hours
这组Docker容器共享同一个网络命名空间,Pod中的每个Docker容器拥有与Pod相同的IP和port地址空间,并且由于他们在同一个网络命名空间,他们之间可以通过localhost相互访问。
如果我们想看某个pod里面部署了几个容器,我们可以通过 kubectl get pods mypodname -o jsonpath={.spec.containers[*].name} 命令查看。
在master上执行:
[root@fpNet-web-38 ~]# kubectl get pods stp-node-0 -o jsonpath={.spec.containers[*].name}
stp-node
pod和容器(容易混淆的地方)的更多相关文章
- this、new,容易混淆的地方
this.new,容易混淆的地方 情况1 关系 情况2 new Foo() 等价于,推荐的写法是new Foo() new Foo new Foo() 不一样 Foo(), Foo()这种情况下,构造 ...
- 从零开始入门 K8s| 详解 Pod 及容器设计模式
作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 一.为什么需要 Pod 容器的基本概念 我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单 ...
- Kubernetes笔记(五):了解Pod(容器组)
Kubernetes 中, 容器总是以 Pod(容器组)的方式进行调度与运行.因此对 Pod 的理解与掌握是学习 Kubernetes 的基础. 理解 Pod Pod(容器组)是 Kubernetes ...
- Pod和容器的LimitRange原理和实践总结
一.背景介绍 通常情况下,Pod中的容器可以无限制的使用节点上的CPU和内存资源,在共享资源和资源有限的情况下,若不加以限制,某个集群或命名空间的资源可能会消耗殆尽,导致其他节点上优先级低的Pod发生 ...
- 第4 章 : 理解 Pod 和容器设计模式
理解Pod和容器设计模式 本文整理自 CNCF 和阿里巴巴联合举办的云原生技术公开课的课时 4:理解 Pod 和容器设计模式.本次课程中,阿阿里巴巴高级技术专家.CNCF 官方大使张磊为大家介绍了为什 ...
- 为什么我们需要Pod?(容器设计模式sidecar)
Pod,是 Kubernetes 项目中最小的 API 对象 容器的本质是进程,就是未来云计算系统中的进程:容器镜像就是这个系统里的".exe"安装包 Kubernetes 就是操 ...
- LSTM容易混淆的地方
1 如果只是学习怎么用LSTM,那么可以这么理解LSTM LSTM可以看成一个仓库,而这个仓库有三个门卫,他们的功能分别是 遗忘门.决定什么样的物品需要从仓库中丢弃. 输入门.决定输入的什么物品用来存 ...
- (转)Kubernetes 配置Pod和容器(十七) 使用Secrets管理安全证书
转:https://www.jianshu.com/p/530b3642c642 本章节展示了如何把密码秘钥等敏感数据安全的注入到Pod里面. 转换安全数据成base-64表示 假设你有两个秘密数据: ...
- Kubernetes Pod中容器的Liveness、Readiness和Startup探针
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...
随机推荐
- VuePress 博客之 SEO 优化(三)标题、链接优化
前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑
之前因为一些需要,需要转换部分 HTML 标签成 markdown 格式,但是不知不觉就完善到一个相对完整的函数. 然后我就封装成了一个文件放在了 github ,也简单做了两个示例网页. HTML ...
- Python入门随记(1)
1.IDE Interactive Development Enironment,交互式开发环境 2.AI artificial intelligence 3.Python是一种格式严明(严格缩进)的 ...
- [SPDK/NVMe存储技术分析]012 - 用户态ibv_post_send()源码分析
OFA定义了一组标准的Verbs,并提供了一个标准库libibvers.在用户态实现NVMe over RDMA的Host(i.e. Initiator)和Target, 少不了要跟OFA定义的Ver ...
- centOS 7 离线安装 MySQL 5.6 完美安装
centOS 7 离线安装 MySQL 5.6 centOS 7 离线安装 MySQL 5.6 准备环境 1.离线 centOS 7(此处为 centOS 7 最小安装) 2.nginx 安装文件 ( ...
- SpringAOP 失效解决方案、Spring事务失效
SpringAOP 失效解决方案 SpringAOP是基于代理来对目标方法进行增强,但是有的时候又会出现"增强无效"的情况,比如在@Transactional下的某类中的方法内调用 ...
- Spring Cloud 解决了哪些问题?
在使用 Spring Boot 开发分布式微服务时,我们面临的问题很少由 Spring Cloud解决.与分布式系统相关的复杂性 – 包括网络问题,延迟开销,带宽问题,安 全问题.处理服务发现的能力 ...
- java-注解相关
注解 概念:说明程序的,给计算机看 注释:用文字描述程序 先了解一些怎么正常javadoc文档 1:给类或者方法添加doc注释 2:通过命令javadoc 执行 类.java文件 新建的类: /** ...
- Django获取请求的IP地址
if request.META.get('HTTP_X_FORWARDED_FOR'): ip = request.META.get("HTTP_X_FORWARDED_FOR") ...
- 修改openstack Centos镜像的默认用户的密码
Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...