• kubernetes


    项目主页:http://kubernetes.io/
    docker仅能在单机上部署容器,而kubernetes可以统一管理各类容器,形成集群。Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本。Kubernetes支持GCE、vShpere、CoreOS、Azure等平台,也可以直接运行在物理机上。 
    Kubernetes非常适合做微服务的架构。

    其主要功能如下:

    1) 用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。

    2) 以集群的方式运行管理容器。

    3) 解决Docker跨机器容器之间的通讯问题。

    4) Kubernetes的Pods自我修复机制使得容器集群总是运行在用户指定的状态。

    Kubernetes有几个重要的概念:

     

    1. 

    Pod

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

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

        一个Pod中的应用容器共享同一组资源:

      (1)PID命名空间:Pod中的不同应用程序可以看见其他应用程序的进程ID

      (2)网络命名空间:Pod中的多个容器能访问同一个IP和端口范围

      (3)IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。

      (4)UTS命名空间:Pod中的多个容器共享一个主机名

      (5)Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes

         不建议在k8s的一个pod内运行相同应用的多个实例。也就是说一个Pod内不要运行2个或2个以上相同的镜像,因为容易造成端口冲突,而且Pod内的容器都是在同一个Node上的

     一个Pod包含一个或者多个容器。

    Pod的YAML 描述方式:

    clipboard[7]
    运行如下命令就会创建Pod:
    kubectl create -f ./hello-world.yaml
    运行如下命令就会查看Pod状态:
    $ kubectl get pods

    2. minion/node

     

    minion和node的意思是一样的,是一个主机节点的意思。例如一个虚拟机、一个物理主机。注意,一个Pod不会跨越node。就是即使一个Pod有多个容器,里面的容器会同时存在在同一个Node中,不会分别在不同的Node中。 Kubernetes的调度器会根据Pod的资源需求定义来将Pod分配到不同的Node中(如今支持定义CPU需求、内存需求)。Kubernetes的master/slave程序运行在node里面。

     

    3. Replication Controller

     

    Replication 是复制的意思,用来解决Pod的线性扩容缩容问题,Replication Controller可以创建一个pod的多个副本,并且可以保证集群中该Pod的副本数量保持平衡。例如副本数量规定为10,如果某个pod挂了,数量变为9,那么Replication Controller会自动创建一个Pod,恢复到10个副本的水平。 多个副本可以在不同的Node中。 

    Replication Controller的YAML  描述方式:

     

     

    clipboard[8]
    replicas表示副本的数量 
    template是对Pod的描述。ReplicationController根据template创建多个Pod(数量=replicas),标签为app: nginx。
    运行如下命令就会创建Replication Controller:
    kubectl create -f ./nginx-rc.yaml

    4. Service

     

    Service用来解决Pod的服务发现问题,因为Pod的运行状态可以动态变化(机器切换、宕机),所以访问端最好不要直接去访问某个Pod,而是通过service,service能够将请求进行转发。

    服务的YAML描述如下:

    clipboard[9]

    该定义创建了一个服务,会将标签为app:nginx(selector选的)的Pod纳入服务中,也就是说该服务接收到的请求会转发给标签为app: nginx的Pod处理。注意:service是负载均衡的,会自动分配请求给不同的Pod。有没有觉得很方便?把Serivce暴露给客户端,客户端只需要请求service,不需要知道后台是个集群。

    运行如下命令就会创建Service:
    kubectl create -f ./nginx-rc.yaml

    5. Label

     

    标签,用来做逻辑上的标记。用来关联service、replication controller和pod.

     

     

     

    Kubernetes架构

     

    下图为官方的架构图。

     

     

    从图中看出,Kubernetes的架构是典型的master/Slave架构。

    Master负责总体的协调控制,Slave负责具体的任务。Master/Slave的组件如下:

     

    clipboard[10]

     

     

    盗个图,下图能更清晰的展示Kubernates。

     

    clipboard[11]

     

    持续更新~~~

    转载请注明出处:http://www.cnblogs.com/stonehat/p/5148455.html

    转载请注明出处:http://www.cnblogs.com/stonehat/
  • 相关阅读:
    Miller-Rabin素性测试
    ###Canny边缘检测算子
    ###SIFT特征
    建立一个免费的网站
    ###C中的extern-static-const关键词
    ###Git使用问题
    ###Fedora下安装Retext
    ###使用phpmailer自动邮件提醒
    Markdown学习
    有线和无线同时连接,选择其一上网
  • 原文地址:https://www.cnblogs.com/ilinuxer/p/5947685.html
Copyright © 2020-2023  润新知