这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
kubernetes 是谷歌开源的容器集群管理系统。
kubernetes 是个啥
kubernetes 是一个应用编排系统,一个成功的应用编排系统需要有较强的自动化能力, Kubernetes被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理应用程序。
包含如下功能:
- 基于容器的应用部署, 维护和滚动升级。
- 负载均衡和服务发现
- 跨机房和跨地区的集群调度
- 自动伸缩
kubernetes 架构
- etcd 保存了整个集群的状态,主要用来存放数据;
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
- controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
- kubelet 负责维护容器的生命周期;
- Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
- kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡
kubernetes 基本概念
- Pod
- Container(容器)
- Label (
)(标签)
- Replication Controller(副本控制器)
- Service(
)(服务)
- Node(节点)
- Kubernetes Master(Kubernetes主节点)
Container
Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。一般来说可以在一个容器中打包一个应用程序。使用这种一对一的关系,做到资源隔离,可以检测应用程序的性能。
Pod
Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或者多个紧密关联的容器。
Pod 是一组紧密关联的容器(container)集合,共享 Network, IPC 等资源, 是 Kubernetes 调度的基本单位,Pod 内多个容器共享网络和文件系统。
Node
Node 是真正运行 Pod 的主机,可以是虚拟机,也可以是物理机,为了管理 Pod, 每个 Node 机器上要运行容器 (docker)
NameSpace
NameSpace 是对一组资源的抽象整合, 通过划分不同的项目组或者用户组来实现。
Service
Service 是应用服务的抽象,是用来负载均衡和服务发现用的,匹配 标签labels 的 Pod IP和端口组成 endpoints。
Label
Lable 是挂在Pod上面的键值对,Label 是识别 kubernetes 对象的标签, 以 Key/Value 的方式放在对象上。Label 定义好后,其他对象可以通过标签,找到一组 pod。
Annotaions
这个和标签有点类似,标签 label 是用来标志和选择对象,annotations 是用来记录一些附加信息的。