Kubernetes
项目简介
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 的系统。
运行原理:
No Comments