kubernetes入门(03)kubernetes的基本概念
一、Pod
在Kubernetes集群中,Pod是创建、部署和调度的基本单位。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个应用的容器。在同一个Pod内部,多个容器共享存储、网络IP,以及管理容器如何运行的策略选项。Docker是Kubernetes中最常用的容器运行时。
在Kubrenetes集群中,Pod有两种使用方式,如下所示:
一个Pod中运行一个容器
这种模式是最常见的用法,可以把Pod想象成是单个容器的封装,Kubernetes直接管理的是Pod,而不是Pod内部的容器。
一个Pod中同时运行多个容器
一个Pod中也可以同时运行几个容器,这些容器之间需要紧密协作,并共享资源。这些在同一个Pod中的容器可以互相协作,逻辑上代表一个Service对象。每个Pod都是应用的一个实例,如果我们想要运行多个实例,就应该运行多个Pod。
同一个Pod中的容器,会自动的分配到同一个Node上。每个Pod都会被分配一个唯一的IP地址,该Pod中的所有容器共享网络空间,包括IP地址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如,使用宿主机的端口映射)。
我们可以为一个Pod指定多个共享的Volume,它内部的所有容器都可以访问共享的Volume。Volume也可以用来持久化Pod中的存储资源,以防容器重启后文件丢失。
我们可以使用Kubernetes中抽象的Controller来创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。当Pod被创建后,都会被Kuberentes调度到集群的Node上,直到Pod的进程终止而被移除掉。
Pod是在K8s集群中运行部署应用或服务的最小单元,支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
比如:运行一个操作系统发行版的软件仓库:使用一个Nginx容器用来发布软件,另一个容器专门用来从源仓库做同步,这两个容器的镜像不太可能是一个团队开发的,但是他们一块儿工作才能提供一个微服务;
这种情况下,不同的团队各自开发构建自己的容器镜像,在部署的时候组合成一个微服务对外提供服务。
Pod是K8s集群中所有业务类型的基础,可以看作运行在K8s集群中的小机器人,不同类型的业务就需要不同类型的小机器人去执行。
目前K8s中的业务主要可以分为长期伺服型(long-running)、批处理型(batch)、节点后台支撑型(node-daemon)和有状态应用型(stateful application);分别对应的小机器人控制器为Deployment、Job、DaemonSet和PetSet。
pod = pause容器 + 业务容器, 业务容器共享pause容器的网络栈和volume挂载卷。
上述例子中,pause容器,+两个业务容器,业务容器共享pause容器的网络栈和volume挂载卷。
二、Node
Node是Kubernetes集群的工作节点,它可以是物理机,也可以是虚拟机。
我们创建的Pod,都运行在Kubernetes集群中的每个Node节点上。而且,在每个Node上还会存在一个运行容器的daemon进程,比如Docker daemon进程,它负责管理Docker容器的运行。
Node在Kubernetes集群中也是一种资源,内部会创建该资源,定义Node示例如下所示:
三、namespace
在一个Kubernetes集群中,可以使用Namespace创建多个“虚拟集群”,这些Namespace之间可以完全隔离,也可以通过某种方式,使一个Namespace中的Service可以访问到其他Namespace中的Service。
查看当前Kubernetes集群中的Namespace列表,执行如下命令:kubectl get namespaces
Namespace是对一组资源和对象的抽象集合,如可以用来将系统内部的对象划分为不同的项目组或用户组。
- pods, services, replication controllers和deployments等属于某一个namespace(默认是default)
- node, persistentVolumes等则不属于任何namespace
默认情况下,会有两个系统自动创建好的Namespace:
- default:Kubernetes集群中没有Namespace的对象都会放到该默认Namespace中
- kube-system:Kubernetes集群自动创建的Namespace
创建一个名称为myns的Namespace,配置内容如下所示:
四、service
Service是应用服务的抽象,通过labels为应用提供负载均衡和服务发现,匹配labels的Pod IP和端口列表组成endpoints,由kube-proxy负责将服务IP负载均衡到这些endpoints上。
每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。
Service从逻辑上定义了一个Pod的集合以及如何访问这些Pod的策略,有时也被称作是微服务,它与Pod、ReplicaSet等Kubernetes对象之间的关系,描述如下图所示:
上图中,Client请求Service,Service通过Label Selector,将请求转发到对应的一组Pod上。
同时,ReplicaSet会基于Label Selector来监控Service对应的Pod的数量是否满足用户设置的预期个数,最终保证Pod的数量和replica的值一致。
在Kubernetes集群中,每个Node都会运行一个kube-proxy,它主要负责为Service实现一种虚拟IP的代理,这种代理有两种模式:
- userspace模式
这种模式是在Kubernetes v1.0版本加入的,工作在4层(传输层:TCPUDP over IP),称为userspace模式,如下图所示:
- iptables模式
这种模式是在Kubernetes v1.1版本新增的,它工作在七层(应用层:HTTP),称为iptables,如下图所示:
Service定义了4种服务类型,以满足使用不同的方式去访问一个Service,这4种类型包括:ClusterIP、NodePort、LoadBalancer、ExternalName。
- ClusterIP是默认使用的类型,它表示在使用Kubernetes集群内部的IP地址,使用这种方式我们只能在该集群中访问Service。
- NodePort类型,会在Node节点上暴露一个静态的IP地址和端口,使得外部通过NodeIP:NodePort的方式就能访问到该Service。
- LoadBalancer类型,通过使用Cloud提供商提供的负载均衡IP地址,将Service暴露出去。
- ExternalName类型,会使用一个外部的域名来将Service暴露出去(Kubernetes v1.7及以上版本的kube-dns支持该种类型)。
我们可以定义一个Service,对应的配置内容,如下所示:
以上定义的该服务是一个多端口服务,同时为该服务设置了一个负载均衡的IP(78.11.24.19),所有访问该服务的应用,通过该负载均衡IP地址都可以访问到该Service对应的Pod集合中的容器服务(应用服务)。
五、Label
Label是识别Kubernetes对象的标签,以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。
Label不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的label来标志具体的应用。
Label定义好后其他对象可以使用Label Selector来选择一组相同label的对象(比如ReplicaSet和Service用label来选择一组Pod)。
Label Selector支持以下几种方式:
等式,如 app=nginx 和 env!=production
集合,如 env in (production, qa)
多个label(它们之间是AND关系),如 app=nginx,env=test
六、Annotations
Annotations是key/value形式附加于对象的注解。不同于Labels用于标志和选择对象,Annotations则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。
比如deployment使用annotations来记录rolling update的状态。
Node是Kubernetes集群的工作节点,它可以是物理机,也可以是虚拟机。我们创建的Pod,都运行在Kubernetes集群中的每个Node节点上。而且,在每个Node上还会存在一个运行容器的daemon进程,比如Docker daemon进程,它负责管理Docker容器的运行。
Node在Kubernetes集群中也是一种资源,内部会创建该资源,定义Node示例如下所示:
01 |
{ |
02 |
"kind": "Node", |
03 |
"apiVersion": "v1", |
04 |
"metadata": { |
05 |
"name": "10.240.79.157", |
06 |
"labels": { |
07 |
"name": "my-first-k8s-node" |
08 |
} |
09 |
} |
10 |
} |
kubernetes入门(03)kubernetes的基本概念的更多相关文章
- Kubernetes 入门之Kubernetes 的基本概念和术语
Kubernetes是什么? 他是一个全新的基于容器技术分布式架构领先方案: 他也是一个开放的开发平台: 他也是一个完备的分布式系统支撑平台: Kubernetes的基本慨念和术 ...
- Kubernetes入门(一)——Kubernetes v1.18.5 安装部署
Kubernetes的安装有两种方式:一是使用各个厂商封装的Kubernetes发行版,优点是可以一键安装部署,操作简单,缺点也很明显,若安装过程中某一步骤出现问题,很难定位处理:二是使用官方提供的k ...
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- kubernetes入门(04)kubernetes的核心概念(1)
一.ReplicationController/ReplicaSet 在Kubernetes集群中,ReplicationController能够确保在任意时刻,指定数量的Pod副本正在运行.如果Po ...
- 入门 - 复习Kubernetes核心概念 (八)
本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...
- 第一章 Kubernetes入门
第一章 Kubernetes入门 kubernetes是基于容器技术的分布式架构领先方案,是一个完备的分布式系统支撑平台. kubernetes带来的好处:1)全面拥抱微服务:2)统可以随时随地整体“ ...
- Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型
机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...
- 浅入kubernetes(1):Kubernetes 入门基础
目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...
- kubernetes 入门学习
kubernetes 学习 kubernetes 简介 Kubernetes这个名字源自希腊语,意思是"舵手",也是"管理者","治理者"等 ...
- Kubernetes权威指南 第一章:Kubernetes入门
Kubernetes是什么 官网 https://kubernetes.io/ 中文版:https://kubernetes.io/zh/ Kubernetes是谷歌十几年大规模容器管理经验的成果 是 ...
随机推荐
- log4net应用实践(一)
1.背景 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.它是.Net下一 ...
- 基于新浪SAE平台的微信开发
自己的微信公众平台开发差不多了,欢迎关注试用哦,我会不定期在那里分享技术文章! 主要功能: 输入t+中文或者英文返回对应的英中翻译 输入[m]随机来首音乐听,建议在wifi下听 输入[ly+你的留 ...
- redis笔记总结之redis数据类型及常用命令
三.常用命令 3.1 字符串类型(string) 字符串类型是Redis中最基本的数据类型,一个字符串类型的键允许存储的数据的最大容量为512MB. 3.1.1 赋值与取值: SET key valu ...
- Opencv读取并获取视频属性
opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头.常用的操作如下: 1.常用构造函数 1.VideoCapture类的构造函数:C++: VideoCapture::Vid ...
- nginx的自动化安装和启停脚本
个人原创,转载请注明出处和作者,否则依法追究法律责任 author: headsen chen date: 2018-03-07 14:39:11 nginx_install.sh #!/bin/ ...
- xampp配置多端口访问
1.修改D:\xampp\apache\conf\extra中的httpd-vhosts.conf文件,在最底部添加 <VirtualHost *:8080> ##需要监听的端口号 Ser ...
- (Matlab)GPU计算所需的配置
电脑:联想扬天 M4400 系统:win 7 X64 硬件:NVIDIA GeForce GT 740M 独显2G 硬件驱动: 软件: Matlab 2015a %需要安装 Paralle ...
- win10下NeuralStyle的tensorflow版实验
---恢复内容开始--- 首先配置win10下的tensorflow-gpu的运行环境,然后在github上将NeuralStyle拷贝下来,最后根据文档说明参数,运行文件,即可得到自己喜欢的styl ...
- JavaWeb学习笔记四 request&response
HttpServletResponse 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应res ...
- machine learning 之 多元线性回归
整理自Andrew Ng的machine learning课程 week2. 目录: 多元线性回归 Multivariates linear regression /MLR Gradient desc ...