文章目录
- deployments
- pod
- Node
- services
- kubectl 实现应用伸缩
- kubectl 实现滚动更新
- kubernetes架构
deployments
中文文档
http://docs.kubernetes.org.cn/251.html
deployment是用来创建和更新应用的,master 会负责将创建好的应用实例调度到集群中的各个节点
应用实例创建完成后,Kubernetes Deployment Controller会持续监视这些实例。如果管理实例的节点被关闭或删除,那么 Deployment Controller将会替换它们,实现自我修复能力。
pod
pod 是 kubernetes 中的最小单位, pod 会被master 分配到指定的node上,直到生命周期结束
(凡人皆有一死来描述pod,没有比这跟准确的了)
Node
Node 是物理机或者虚拟机,被master 管理
kubelet 管理 k8s master 和node 之间的通信,管理机器上运行的pods 和containers 容器
kubectl get 列出资源
kubectl describe 显示资源的详细信息
kubectl logs 打印容器中的容器日志
kubectl exec pod中容器内部执行的命令
services
ReplicationController动态创建新的Pods来保持应用的运行,如果pod数目少了
Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod通常由LabelSelector实现
可以通过type在ServiceSpec中指定一个需要的类型的 Service,Service的四种type:
ClusterIP(默认) - 在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。
NodePort - 通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 <NodeIP>:<NodePort>,可以从集群的外部访问一个 NodePort 服务。
LoadBalancer - 使用云提供商的负载均衡器(如果支持),可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。
ExternalName - 通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容,没有任何类型代理被创建。这种类型需要v1.7版本或更高版本kube-dnsc才支持。
kubectl 实现应用伸缩
在之前模块中,我们创建了一个Deployment,然后通过Service暴露,Deployment创建的Pod来运行应用,当流量增加时,我们需要扩展应用来满足用户需求。
通过Deployment更改副本数可以实现伸缩。
kubectl 实现滚动更新
滚动更新通过Deployments实现应用实例在不中断、不停机情况下更新,新的Pod会逐步调度到可用的资源Node节点上
更新时的Pod数量可以是数字或百分数(pod)来表示。在Kubernetes更新中,支持升级 / 回滚(恢复)更新
与应用伸缩相似,滚动更新是实现流量负载均衡方式。
kubernetes架构
Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化
etcd 保存整个集群的状态
controller manager 负责维护集群的状态,比如故障检测,自动扩展,滚动更新等
scheduler 负责资源的调度,按照预定的调度策略将pod 调度到相应的机器上
kubelet 负责维护容器的生命周期,同时也负责,volume 网络的管理
container runtime 负责镜像管理以及pod和容器的真正运行
kube-proxy 负责为service 提供cluster 内部的服务发现和负载均衡
参考文章: http://docs.kubernetes.org.cn/115.html