文章目录
- deployments
- pod
- Node
- services
- kubectl 实现应用伸缩
- kubectl 实现滚动更新
- kubernetes架构
deployments
中文文档
http://docs.kubernetes.org.cn/251.htmldeployment是用来创建和更新应用的,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