Kubernetes是什么?
在笔者看来,Kubernetes是一个微服务框架,是一个管理容器的开源平台。
它能够提供(官方文档介绍):
-
服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
-
存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
-
自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
-
自动完成装箱计算
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
-
自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
-
密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥
Kubernetes得到一些特点
- 非侵入式,不需要改动原有代码
- 平台无关,各语言都能使用
- 可以实现自动化部署,自动扩缩容。
Kubernetes结构
我们从下往上看
1、既然Kubernetes是一个管理容器的平台,那么首先会有Container;
2、Container会运行在一个Pod上,Pod是Kubernetes中可创建,管理的最小计算单元,Pod可管理一个或多个Container,Pod可被打上标签用于上层组件管理;
3、Pod由一个ReplicaSet来管理,它被称为副本控制器,用于控制相同的Pod在Kubernetes的数量稳定;
4、ReplicaSet会被一个Deployments来管理,Deployments可以为Pod和ReplicaSet提供声明式的更新,也就是说仅需要修改Deployments的配置,就可以动态更新Pods的版本;
5、如何将一组Pods公开为一个对外服务,就要使用到Service,虚线示意即使Pod运行在不同的物理机上,也可被提供为一个服务;
6、我们将运行一组Pod的环境称为Node,Node可以是物理机或虚拟机,Kubernetes集群就是多个Node的组成,一主(Master Node)多从(Worker Node);
7、Worker中还会包括
- kubelet:用于接受Pod的创建描述,并根据此,控制容器引擎进行容器创建;
- kube-proxy:用于实现Service的通信,负载均衡;
- container runtime:运行容器的软件,一般是docker。
8、Master中包括
- DNS:负责Kubernetes内部的域名解析;
- kube-apiserver:提供Kubernetes中各类组件(pod,service等)的增删改查接口;
- kube-scheduler:调度Pod到Node上去;
- kube-controller-manager:负责通过kube-apiserver对Kubernetes集群进行监控,管理。
9、如何存储集群的各类信息?使用etcd;
10、控制Kubernetes的客户端,kubectl。(安装在服务器,可使用kubectl相关命令)
然后我们就能画一个整体结构图了