kubernetes入门篇1

1.kubernetes是什么

        kubernetes是一个全新的基于容器技术的分布式架构领先方案。如果系统设计遵循了Kubernetes的设计思想,那么传统的系统架构中的那些和业务没有多大关系的底层代码或功能模块,都可以从我们的视线中消失,我们不必再费心于负载均衡器的选择和部署实施问题。kubernetes也是一个开发平台,并且不局限于一种语言,因此现有的系统也很容易改造升级并迁移到kubernetes上。最后kubernetes是一个完备的分布式系统支撑平台。

2.为什么要用kubernetes

        使用kubernetes的理由有很多,最重要的理由是,IT行业从来都是由新技术驱动的。当前docker这门容器化技术已经被很多公司采用,从单机走向集群已成为必然,于计算的蓬勃发展正在加速这一进程。

使用Kubernetes会收获哪些好处呢?

首先,可以“轻装上阵”地开发复杂系统。

其次,可以全面拥抱微服务架构。

再次,可以随时地将系统整体“搬迁”到公有云上。

然后,kubernetes内在的服务弹性扩容机制可以让我们轻松应对突发流量。

最后,kubernetes系统架构超强的横向扩容能力可以让我们的竞争力大大提升。

3.kubernetes的基本概念和术语

kubernetes中的大部分概念都可以被看作一种资源对象,几乎所有的资源对象都可以通过kubernetes的kubectl工具执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,kubernetes是一个高度自动化的资源控制系统。

下面介绍kubernetes中重要的资源对象

3.1Master

kubernets里的master指的是集群控制节点,我们执行的所有命令基本都是在master上运行的。master上运行着以下关键进程:

kube-apiserver:提供了HTTP Rest接口的关键服务进程,是kubernets里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。

kube-controller-manager:所有资源对象的自动化控制中心。

kube-scheduler:负责资源调度的进程。

另外master上还需要部署etcd服务,因为资源对象的数据都被保存在etcd中

3.2Node

工作负载节点,当某个node宕机时,其上的工作负载会被master自动转移到其他节点上。每个node上会有如下的进程:

kubelet:负责pod对应的容器的创建、启停等任务,同时于master密切协作,实现集群管理的基本功能。

kube-proxy:实现kubernete service的通信与负载均衡机制的重要组件

docker Engine:docker引擎,负责本机的容器创建和管理工作

常用命令:

kubectl get nodes 查看集群中有多少个node

kubectl describe node nodename 查看某个node的详细信息

3.3 Pod

pod是最重要的基本概念。每个pod都有一个特殊的被称为根容器的pause容器,另外还包含一个或多个紧密相关的用户业务容器。

pod的特殊的组成结构以及为何会有一个全新的pod概念呢?

在一组容器作为一个单元得到情况下,我们难以简单的对“整体”进行判断及有效地行动。引入与业务无关且不易死亡的pause容器作为pod的根容器,已它的状态代表整个容器组成的状态就简单的解决了这个问题。pod里多个业务容器共享pause容器的IP,共享pause容器挂载的volume,这样也很好的解决了它们之间的文件共享问题。kubernetes为每个pod都分配了唯一的IP地址,一个pod里多个容器共享pod IP 地址,在kubernetes中,一个pod里的容器与另外主机上的pod容器能够直接通信。

kubernetes中任意的资源对象都可以采用yaml或者json的格式文件来定义或描述。

Endpoint:pod IP 加上 containerport组成了这个新的概念

pod volume:基于dcker volume的扩展,可以用分布式文件系统作后端存储功能,被定义在pod上,然后被容器挂载到对应的文件系统上。

pod Event:事件的记录。

3.4Label

label是kubernetes中的另外一个核心概念。一个label是一个key=value的键值对,label可以附加到各种资源对象上,一个资源对象可以定义任意数量的label,同一个label也可以添加到任意数量的资源对象上。

label可以通过label selector 查询和筛选拥有某些label的资源对象。matchLabels用于定义一组label,matchExpressions用于定义一组基于集合的筛选条件。

label selector在kubernetes中的重要使用场景如下:

kube-controller进程通过在资源对象RC上定义的label selector来筛选要监控的pod副本数量

kube-proxy 通过在service上的label selector来筛选对应的pod 自动建立每个service到对应pod的路由请求表,从而实现智能负载均衡

通过对node定义的特定的label,并且在pod定义文件中使用nodeslector这种标签调度策略,kube-scheduler进程可以实现pod定向调度的特性。

3.5Replication Controller

RC定义了一个期望的场景,即声名某种pod的副本数量在任意时刻都符合某个预期值。所以RC的定义包括如下:

pod期待的副本数量。

用于筛选目标pod的label selector

当pod副本少于预期数量时,用于创建新的pod的pod模版

Replica Set:与当前RC的唯一区别是,支持基于集合的label selector

RC(Replica Set)的特性和作用:

大多数情况下,我们通过定义一个RC实现pod的创建及副本数量的自动控制

在RC里包括完整的pod定义模版

RC通过label selector 机制实现对pod副本的自动控制

通过改变RC里的pod副本数量,可以实现pod的扩容和缩容

通过改变RC里的pod模版中的镜像版本,可以实现pod的滚动升级。


 

猜你喜欢

转载自blog.csdn.net/smallbird108/article/details/105916657