Docker Amazing Arch区块链 | Distributed Ledger Technology

Kubernetes 介绍基本概念

2018-08-15  本文已影响27人  Anson前行
简介

首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
  Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

集群

集群是一组节点,这些节点可以是物理服务器或者虚拟机,在他上面安装了Kubernetes环境。

Master

负责管理集群。 master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。
节点是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。 每个工作节点都有一个 kubelet,它是管理节点并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Docker 或 rkt。一个 Kubernetes 工作集群至少有三个节点。
Master 管理集群,而 节点 用于托管正在运行的应用程序。
当您在 Kubernetes 上部署应用程序时,您可以告诉 master 启动应用程序容器。Master 调度容器在集群的节点上运行。 节点使用 Master 公开的 Kubernetes API 与 Master 通信。用户也可以直接使用 Kubernetes 的 API 与集群交互。

Pod

Pod是一组紧密关联的容器集合,它们共享PID、IPC、Network和UTS namespace,是Kubernetes调度的基本单位。Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

image
在Kubernetes中,所有对象都使用manifest(yaml或json)来定义,比如一个简单的nginx服务可以定义为nginx.yaml,它包含一个镜像为nginx的容器:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Label

Label是识别Kubernetes对象的标签,以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)。
Label不提供唯一性,并且实际上经常是很多对象(如Pods)都使用相同的label来标志具体的应用。
Label定义好后其他对象可以使用Label Selector来选择一组相同label的对象(比如Service用label来选择一组Pod)。Label Selector支持以下几种方式:

Namespace

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services,和deployments等都是属于某一个namespace的(默认是default),而 Node, PersistentVolumes等则不属于任何namespace。

Deployment

否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?

Deployment确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Deployment并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Deployment会替换它,保持总数为3.

如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Deployment会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Deployment会立刻启动2个新Pod,保证总数为5。Deployment还支持回滚和滚动升级。

当创建Deployment时,需要指定两个东西:

Service

Service是应用服务的抽象,通过labels为应用提供负载均衡和服务发现。匹配labels的Pod IP和端口列表组成endpoints,由kube-proxy负责将服务IP负载均衡到这些endpoints上。
每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。

image

基本概念与组件

Kubernetes中的绝大部分概念都抽象成Kubernetes管理的一种资源对象,一些资源对象:

当然了除了上面的这些核心组件,还有一些推荐的插件:

组件通信
Kubernetes 多组件之间的通信原理为

比如最典型的创建 Pod 的流程:

image
用户通过 REST API 创建一个 Pod
上一篇下一篇

猜你喜欢

热点阅读