Kubernetes 入门

K8s是Google开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容、缩容等一整套功能。

在K8s中,Service(服务)是分布式集群加架的核心,一个Service对象拥有如下关键特征:

 

  • 拥有一个唯一指定的名字。
  • 拥有一个虚拟IP的端口号。
  • 能提供某种远程服务能力。
  • 被映射到了提供这种服务能力的一组容器应用上。

Service的服务进程目前都基于Socket通信方式对外提供服务,虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(IP+PORT)访问点,但Kubernetes能够让我们通过Service(虚拟ClusterIP+Service Port)连接到指定的Service上。

Node(节点)

在较早的版本中也被称为Minion,在每个Node上运行用于启动和管理Pod的服务-Kubelet,并能够被Master管理。在Node上运行的服务进程包括Kubelet、kube-proxy和docker daemon。

(1)Node管理

我们说K8s创建一个Node,仅仅表示K8s在系统内部创建一个Node对象,创建后即会对其进行一系列健康检查,包括是否可以连通、服务是否正常启动、是否可以创建Pod等。

(2)Node controller对Node进行管理

Node controller是K8s Master中的一个组件,用于管理Node对象,它的两仆要功能包括:集群范围内的Node信息同步,以及单个Node的生命周期管理。

 

 

Pod

Pod是K8s的最基本的操作单元,包含一个或多个紧密相关的容器,一个Pod可以被一个容器化的环境看作应用层的“逻辑宿主机”(Logical Host),一个Pod中的多个容器应用通常是紧耦合的,Pod在Node上被创建、启动或者销毁。

为什么K8s使用Pod在容器之上再封装一层呢?一个很重要的原因是,Docker容器之间通信受到Docker网络机制的限制,在Docker的世界中,一个容器需要通过link方式才能访问另一个容器提供的服务,大量容器之间的link将是一件非常繁重的工作,通过Pod的概念将多个容器组合在一个虚拟的“主机”内,可以实现容器之间仅通过Localhost就能相互通信。

 

(1)POD的定义

对于Pod的定义通过Yaml或Json格式的配置文件来完成。

 

Label(标签)

Label以key/value键值对的形式附加到各种上对象上,label定义了这些对象的可识别属性,用来对它们进行管理和选择。label可以在创建对象时附加到对象上,也可以在对象创建后通过API进行管理 。

 

Replication Controller(RC)

RC用来定义Pod副本的数量,在Master内,Controller Manager进程通过RC的定义来完成Pod的创建、监控、启停等操作。

可以说,通过对Replication Controller的使用,K8s实现了应用集群的高可用性。

RC的定义使用yaml或json格式的配置文件来完成。

 

Service(服务)

一个Service可以看作一组提供相同服务的Pod的对外访问接口,Service作用于哪些Pod是通过label selector来定义的。

Service的定义同样使用yaml或json格式的配置文件来完成。

(1)Service的Cluster IP

Pod的IP地址是Docker Daemon根据docker0网桥的IP地址段进行分配的,但Service的Cluster IP地址是K8s系统中的虚拟IP地址,是由系统动态分配的。

(2)外部访问Service

由于Service对象在Cluster IP Range池中分配到的IP只能在内部访问,所以其他Pod都可以无障碍地访问到它。但如果这个Service作为前端服务,准备为集群外的客户端提供服务,就需要给这个服务提供公共IP了。

K8s支持两种对外提供服务的Service的type定义:NodePort和LoadBalance。

(3)多端口的服务

有很多情况下,一个服务都需要对外暴露多个端口。这种情况下,可以通过端口命名,使各Endpoint不会因重名而产生歧义。

 

Volume(存储卷)

Volume是Pod中能够被多个容器访问的共享目录,K8s中的Volume与Pod生命周期相同,但与容器的生命周期不相关。

Volume类型:

(1)EmptyDir

在Pod分配到Node时创建,同一个Pod中所有容器都可以读写EmptyDir中相同文件。当Pod从Node上称除时,EmptyDir中数据也会永久删除。

(2)hostPath

在Pod上挂载宿主机上的文件或目录。

(3)gcePersistentDisk

表示使用Google compute Engine上永久磁盘。

(4)awsElasticBlockStore

Amazon web Services的EBS Volume。

(5)nfs

使用NFS提供的共享目录挂载到Pod中。

(6)iscsi

使用iScSi存储设备上的目录挂载到Pod中。

(7)glusterfs

使用开源的GlusterFS网络文件系统的目录挂载到Pod中。

(8)rbd

使用Linux块设备共享存储挂载到Pod中。

(9)gitRepo

通过挂载一个空目录,并从GIT库clone一个git repository以供Pod使用。

(10)secret

用于Pod提供加密的信息,通过tmfs实现。

(11)persistentVolumeChain

从PV中申请所需要空间。

 

Namespace(命名空间)

通过将系统内部的对象“分配”到不同的Namespace中,K8s集群启动后,会创建一个名为“default”的namespace。

 

Annotation(注解)

Annotation与Label类似,也使用key/value键值对的形式进行定义,但Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。

 

 

最后欢迎大家访问我的个人网站:1024s

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值