Kubernetes


kubernetes-logo.png

项目简介

Kubernetes 是 Google 团队发起并维护的基于 Docker 的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心。

建于 Docker 之上的 Kubernetes 可以构建一个容器的调度服务,其目的是让用户透过 Kubernetes 集群来进行云端容器集群的管理,而无需用户进行复杂的设置工作。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。其核心概念是 Container Pod 。 一个 Pod 由一组工作于同一物理工作节点的容器构成。这些组容器拥有相同的网络命名空 间、IP以及存储配额,也可以根据实际情况对每一个 Pod 进行端口映射。此外, Kubernetes 工作节点会由主系统进行管理,节点包含了能够运行 Docker 容器所用到的服务。

在分布式系统中,部署,调度,伸缩一直是最为重要的也最为基础的功能。Kubernets 就是希 望解决这一序列问题的:https://github.com/kubernetes/kubernetes

快速上手

目前,Kubenetes 支持在多种环境下的安装,包括本地主机(Fedora)、云服务(Google GAE、AWS 等)。下图展示了在单节点使用 Docker 快速部署一套 Kubernetes 的拓扑:

Kubernetes 依赖 etcd 服务来维护所有主节点的状态。

启动 etcd

docker run --net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data

启动主节点

启动 kubelet:

docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube kubelet --api_servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable_server --hostname_override=127.0.0.1 --config=/etc/kubernetes/manifests

启动服务代理

docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2

测试状态

curl 127.0.0.1:8080

查看服务

docker service ls 

这些服务大概分为三类:主节点服务、工作节点服务和其他服务。

主节点服务:

  • apiserver 是整个系统的对外接口,提供 RESTful 方式供客户端和其它组件调用;
  • scheduler 负责对资源进行调度,分配某个 pod 到某个节点上;
  • controller-manager 负责管理控制器,包括 endpoint-controller(刷新服务和 pod 的关 联信息)和 replication-controller(维护某个 pod 的复制为配置的数值)。

工作节点服务:

  • kubelet 是工作节点执行操作的 agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等;
  • proxy 为 pod 上的服务提供访问的代理。

其它服务:

  • etcd 是所有状态的存储数据库;
  • gcr.io/google_containers/pause:0.8.0 是 Kubernetes 启动后自动 pull 下来的测试镜像。

基本概念

kubectl 使用

kubectl 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。

架构设计

基本考虑:

  • 分布式架构,保证扩展性;
  • 逻辑集中式的控制平面 + 物理分布式的运行平面;
  • 一套资源调度系统,管理哪个容器该分配到哪个节点上;
  • 一套对容器内服务进行抽象和 HA 的系统。

运行原理:


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: CoreOS

>> 下一篇: Mesos