Docker+k8s 技术笔记
正文
k8s 四组基本概念
pod/pod控制器
Name/Namespace
Label/label选择器
Service/Ingress
pod
- Pod是k8s里能够被运行的最小逻辑单元 (原子单元)
- 一个pod可以运行多个容器,他们共享UTS+NET+IPC名称空间,容器会实现6个维度的隔离
- 可以把pod理解为豌豆荚,而同一pod里的每个容器是一颗颗豌豆
- 一个pod运行多个容器 边车(sidecar)模式
容器 containers 隔离
Namespace | Constant | 隔离内容 | 内核版本 |
IPC | CLONE_NEWIPC | 信号量,消息队列和共享内存 | Linux 2.6.19 |
NET | CLONE_NEWNET | 网络资源 | 始于Linux 2.6.24 完成于 Linux 2.6.29 |
Mount | CLONE_NEWNS | 文件系统挂载点 | Linux 2.4.19 |
PID | CLONE_NEWPID | 进程ID | Linux 2.6.24 |
UTS | CLONE_NEWUTS | 主机名和域名 | Linux 2.6.19 |
User | CLONE_NEWUSER | 用户ID和组ID | 始于 Linux 2.6.23 完成于 Linux 3.8) |
pod控制器
- pod控制器是pod启动的一种模板,用来保证在k8s里启动的pod应始终按照人们的预期运行(副本数、生命周期、健康状态检查…)
- k8s内提供了众多的pod控制器,常用的有以下几种:
Deployment #生成副本数
Daemonset #要求保证在每个节点上都起一个副本
…
Name
- 名称 每一种功能都叫一种资源 每一种功能的实现都叫做资源的实例化。
- 资源 api版本(apiServer) 类别(kind) 元数据(metadata) 定义清单(spec) 状态(status) 资源是一种逻辑功能的抽象。
- 名称 通常定义在 资源 的 元数据 信息里
Namespace
- 名称空间 做一定程度的隔离 只是将资源分组
- k8s内部的虚拟集群组
- 不同名称空间内的 资源 名称空间可以相同, 相同名称空间内的同种资源 名称不能相同
- 合理分配名称空间 使k8s里的服务 进行分类管理和浏览
- k8s里存在默认的名称空间 default kube-system kube-public
Label
- 标签是k8s特色的管理方式,便于分类管理资源对象
- 标签与资源的关系 多对多
- 标签的组成 key=value
Label选择器
- 给资源打上标签,可以使用标签选择器过滤指定的标签
- 基于等值关系(等于 不等于) 基于集合关系 (属于 不属于 存在)
- 许多资源支持内嵌标签选择
Services
- 在k8s里,每个pod都会被分配一个单独的ip地址,这个地址会随着pod的销毁而消失
- Service 就是用来解决这问题的的核心概念
- 一个services可以看作是一组提供相同服务的pod的对外访问接口
- Service作用于哪些pod 是可以通过pod标签选择器来定义的
Ingress
- ingress是k8s集群里工作在osi网络模型参考下第七层的应用,对外暴露的接口
- Service只能进行L4流量调度,表现形式为 ip+port
- ingress则可以调度不同业务域、不同URL访问路径的业务流量
http://abc.od.com/sh 通过ingress可以决定去寻找哪个location
先寻找services根据标签选择pod
ingress —>service—>pod
docker+k8s技术笔记 正文-组件(三)