Kubernetes:K8s

什么是Kubernetes?

K8s是一个基于容器技术的分布式架构领先方案。

K8s中Service是分布式集群架构的核心,一个Service对象拥有如下关键特征。

  • 拥有唯一指定的名称(比如mysql-server)
  • 拥有一个虚拟IP(Cluster IP 、Service IP或VIP)
  • 能够提供某种远程服务的能力
  • 被映射到提供这种服务能力的一组容器应用上

K8s设计Pod对象实现隔离,将每个服务进程都包装到相应的Pod中使其成为在Pod中运行的一个容器(Container)。为了建立Service和Pod间的关联关系,k8s给每个Pod贴上一个标签(Label),给运行的MYSQL的Pod铁和三个name=mysql标签,PHP贴上name=php。给相应的Service 定义标签选择器(Label Selector),比如MySQL Service的标签选择器的选择条件为name=mysql,意为该service要作用于包含name=musql Label的Pod。

Pod运行在一个被称为节点的(Node)的环境中,节点可以是物理机、私有云或公有云中的一个虚拟机,通常一个节点上运行几百个Pod;其次,每个Pod中有一个特殊的Pause容器,其他都是业务容器。业务容器共享Pause容器的网络栈和Volume挂在卷,因此他们直接的通信和数据交换更为高效。

集群管理方面,K8s将集群中的机器分为一个master和一些node。Master上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,且都是自动完成的。

Node作为集群中的工作节点,运行着K8sd的kubelet、pkube-proxy服务进程,负责Pod的创建、启动、销毁、监控、重启,以及实现软件模式的负载均衡。

K8s的扩容和服务升级通过RC(Replication Controller)来解决。一个RC定义文件中包括以下三个关键信息:

  • 目标Pod的定义
  • 目标Pod需要运行的副本数量(Replicas)、
  • 要监控的目标Podde 标签。

Kubernetes建立了一套健壮的集群自恢复机制,包括容器的自动重启、自动重调度以及自动备份等。

一、k8s概述和特性:

1.优势:

  • 可“轻装上阵”开发复杂系统
  • 可全面拥抱微服务架构
  • 可随时随地将系统整体搬迁到公有云上。
  • K8s的服务弹性扩容机制可轻松应对突发流量
  • K8s超强的横向扩容能力

2、k8s功能:

      自动装箱:

      自我修复:容器失败时,会自动重启

      水平扩展:通过简单的命令。用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁。

      服务发现:用户不需要使用额外的服务发现机制,能够基于k8s自身能力实现服务发现和负载均衡。

     滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或者批量式更新。

     版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退。

     密钥和配置管理(热部署):在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

     存储编排、批处理

Kubernetes的设计哲学之一:维护应用容器集群一直处于用户所期望的状态。

二、k8s架构组件:

       master(主控节点)和node(工作节点)  master主管调度管理;node执行具体的工作。

master (主控节点) 包含三个组件:APIServer、controller-manager、scheduler。

          APIServer:集群统一入口,以restful方式,交给etcd存储

          scheduler:节点调度,选择node节点应用部署
          controller-manager:处理集群中后台任务,一个资源对应一个控制器。

          etcd :存储系统,保存集群相关的数据。

node(工作节点)包含两个组件:kubelet、kubelet-proxy。

          kubelet: master派到node节点代表,管理本机容器

          kubelet-proxy:提供网络代理,实现负载均衡等操作。

三、k8s三个核心概念:Pod、Controller、Service

Kubernetes主要服务对象是由多个容器组合而成的复杂应用,如弹性、分布式的架构。为此,Kubernetes引入了专门对容器进行分组管理的pod,从而建立了一套将非容器化应用平滑地迁入到容器云上的机制。

Kubernetes不仅提供了APIServer、scheduler、kubelet等底层核心组件。从而使得用户能够放心管理成千上万个容器实例,更提供了pod、service、replication controller等设计理念和服务。

在Kubernetes中pod、service、replication controller统称为“对象”或者“资源”,并通过APIServer组件提供了一套对它们按照RESRTful格式的增、删、改、查和监听接口。

1、pod

    最小部署单元、一组容器的集合、共享网络、生命周期短暂。   

Kubernetes中,能够被创建、调度和管理的最小单元是pod,而非单个容器。一个pod是由若干个Docker容器构成的容器组。(pod意为豆荚,里面容纳了多个豆子,很形象)

pod 可以想象成一个篮子,而容器就是篮子里的鸡蛋,当Kubernetes需要调度容器时,它直接把一个篮子(连同里面的鸡蛋)从一个宿主机调度到另一个宿主机,而不是一个一个地搬运里面的鸡蛋。

篮子和鸡蛋的关系主要表现为以下几点:

一个pod里的容器能有多少资源取决于这个篮子的大小。

label也是贴在篮子上的。

IP分配给篮子而不是容器,篮子里面的所有容器共享这个IP。

哪怕只有一个鸡蛋(容器),Kubernetes仍然会给它分配一个篮子。

pod里面的容器共享network namespace ,并通过volume机制共享一部分存储。

同属一个pod的容器还共享IPC namespace(同一个pod内的应用容器能够使用System V IPC或POSIX消息队列进行通信)、UTC namespace(同一个pod内的应用容器共享机主名)

同一个pod里面的容器有如下两个特性:

    1、通过Kubernetes volume 机制,在容器之间共享内存

    2、可以通过localhost直接访问另一个容器。

2、controller

         * 确保预期的pod副本数量、有状态应用部署、无状态应用部署。

         * 确保所有的node运行同一个pod

         * 一次性任务和定时任务

3、service

         *定义一组pod的访问规则

label:

当系统运行着数量庞大的pod时,用户或者系统管理员如何有效地定位与组织这些pod就成为了一个重要问题。Kubernetes的解决方案是label。每个pod都有一个“labels”--一组键/值对。

通过label,可以在Kubernetes的集群管理工具中方便地实现pod等资源对象的定位和组织。只要传入-l key=value参数即可,例如列举所以匹配标签{"name":"ngnix"}的pod可以这么操作:

$ kubectl get pods -l name=nginx

在Kubernetes中,label是一种重要的且被广泛应用的组织分类和选择Kubernetes对象的机制。

labels属性是一组绑定到Kubernetes对象(如pod)上的键值对,同一对象labels属性的key必须独一无二。label的数据结构非常简单,就是一个key和value均为string的map结构。

网络原理

    K8s里,IP以Pod为单位进行分配。一个Pod内部所有容器共享一个网络堆栈(相当于一个网络命名空间,他们的IP地址、网络设备、配置都是共享的)。

一个Pod内部的应用程序看到的自己的IP地址和端口与集群内其他Pod看到的一致。

K8s对集群网络的要求:

  • 所有容器都可以在不用NAT的方式下同别的容器通信
  • 所有节点都可以在不用NAT的方式下同所有容器通信,反之亦然
  • 容器的地址和别人看到的地址是同一个地址

Docker网络基础:

网络命名空间(Network Namespace):

linux在网络栈中引入了网络命名空间,这些独立的协议栈被隔离到不同的命名空间中。处于不同命名空间中的网络栈是完全隔离的,彼此之间无法通信。通过对网络资源的隔离,就能在一个宿主机上虚拟多个不同的网络环境。Docker正是利用网络的命名空间特性,实现了不同容器之间的网络隔离。

在Linux的网络命名空间中可以有自己独立的路由表及独立的iptables设置来提供包转发、NAT及IP包过滤等功能。为了隔离出独立的协议栈,需要纳入命名空间的元素有进程、套接字、网络设备等。

不同命名空间的网络通信,甚至和外部的的网络通信可通过Veth设备对实现。Veth设备对的重要作业就是打通看不到的协议栈之间的壁垒,连接两个不同的命名空间。两个命名空间之间通,就必须有一个Veth设备对。我们将其中一端称为另一端的peer。

网桥是一个二层的虚拟网络设备,把若干个网络接口“连接”起来,以使得网络接口间的报文能够互相转发。网桥能够解析收发的报文,读取目标MAC地址信息,和自己记录的MAC表结合,来决策报文的转发目标网络接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值