Rancher 基础知识
Rancher基础服务
健康检查
Cattle环境中,Rancher通过运行一个叫healthcheck的基础设施服务部署了一套健康检查系统,其原理为在每台主机上部署了healthcheck的容器来实现分布式的健康检查。这些容器在内部利用HAProxy来检查应用的健康状态。一旦容器或服务上启用了健康检查,每个容器将最多被三个运行在不同主机上的healthcheck 容器监控起来。只要有一个HAProxy实例认为其状态正常,该容器将被视为正常。如果所有HAProxy实例都认为其状态不正常,该容器将被视为状态异常。
Metadata服务
Rancher通过基础设施中的Metadata服务为服务和容器提供数据。这些数据用来管理运行中的docker实例。这些数据可以通过调用基于HTTP的API来访问。这些数据包括创建容器,服务时的静态数据,也包括运行时数据,例如:在同一个服务里的其他容器的相关信息。
通过Rancher的Metadata服务,你可以进到任何使用Rancher托管网络的容器的命令行中,并查看运行在Rancher中的容器的信息。通过Metadata服务你可以获取容器,服务,容器所在的应用,容器所在的主机。Metadata是JSON格式的。
DNS服务
Rancher提供一个分布式DNS服务的基础设施服务。这个服务室通过Rancher自己的轻量级DNS服务器和高可用性的控制平面实现的。每个健康容器在连接到另一个服务
负载均衡
-
Rancher支持多种负载均衡驱动,通过在它之上建立代理规则,可以将网络及应用流量分发至指定的容器中。负载均衡的目标服务中的容器都会被Rancher自动注册为负载均衡的目标。在Rancher中,将负载均衡加入到应用中是一件非常容易的事情。
-
默认情况下,Rancher提供一个基于HAProxy的托管的负载均衡,它可以被手动扩容至多台主机。在接下来的例子中将会涉及到负载均衡中不同的配置项,这些配置项主要以HAProxy为参考。我们计划支持除HAProxy以外的其他负载均衡驱动,但这些配置项都会是相同的。
-
负载均衡容器的扩缩容不能超过环境下主机的数量,否则会造成端口冲突,负载容器服务将会被阻碍在activating状态。它会不断去尝试寻找可用的主机并开启端口,直到你修改它的数量或者添加主机.
Cattle中的服务
需要注意的问题
- 当在Rancher中暴露端口时,它只会显示创新时暴露端口。如果端口映射有任何改变,它不会再docker ps中更新,因为Rancher通过iptables规则来实现端口动态变更的
- 健康检查仅适用于托管网络的服务,如果选择任何其他网络,则不能被检察到
- 从服务:Rancher支持通过使用从服务的概念对服务进行分组,从而使一组服务可以同时进行调度和扩缩容。通常创建具有一个或多个从服务的服务,来支持容器之间共享卷和网络。你可能希望你的服务的使用volumes_from和net去连接其他服务。为了实现这一点,你需要在服务直接建立一个从属关系。通过从属关系,Rancher可以将这些服务作为一个单元进行扩容和调度。例如:B是A的从服务,Rancher始终将A和B作为一对进行部署,服务的数量规模将始终保持一致。
Rancher和Kubernetes
灾难恢复
Rancher在三个不同的主机上运行多达三个 etcd 实例。如果运行 etcd 的多数主机出了故障,按以下步骤做灾难恢复:
-
1.在 Kubernetes -> Infrastructure Stacks页面中,展开 Kubernetes 栈。点击 etcd 服务。查找一个处于 running 状态的 kubernetes-etcd 容器。通过 Execute Shell 执行进这个容器中,运行 etcdctl cluster-health。
- 如果输出的最后一行显示 cluster is healthy,那么这会儿没有灾难发生并且etcd集群也正常。
- 如果最后行显示 cluster is unhealthy,记下这个 kubernetes-etcd 容器。这是你唯一的幸存者。使用这个容器做扩展(scale up)可以取代其余的出故障的容器。
-
2.删除处于 Disconnected 状态的主机。确认其中没有主机在运行你的幸存者容器。
-
3.执行进入上述幸存者容器,在shell中运行 disaster。容器会自动重启,并且etcd会自愈成单节点的集群。系统功能会恢复。
-
4.添加新的主机直到有至少拥有先前运行etcd的主机的数量。旧的主机会包含etcd数据卷和备份,这将引起问题。如果你不能添加新主机,你可以先清理主机然后再重新添加这台主机。我们建议运行至少三个主机。如果你正在使用 分隔平面,别忘了给你的主机加上 etcd=true 标签。 随主机的加入并运行 etcd 服务,etcd会扩展回集群的数量。在大部分情况,一切都会自动恢复。如果新的/死掉的容器在 initializing 状态卡住超过三分钟,执行进这些容器并运行 delete。 在任何情况都不要在你的幸存者容器中运行 delete 命令。
注意:无论在rancher调控k8s还是直接部署k8s集群,都需要注意新加入的节点,不需要配置etcd服务,因为原有主机的etcd内容与新加入主机的etcd内容不同,这会引起问题
添加 DOCKER 直接启动的容器到 RANCHER 的网络
docker run -l io.rancher.container.network=true -itd ubuntu bash