Kubernetes
概述
在OpenShift Container Platform,中,Kubernetes通过一组容器或主机来管理集装箱化应用程序,并提供部署、维护和应用程序扩展的机制。Docker可以打包,实例化和运行容器化应用程序。
Kubernetes集群由一个或多个masters和一组nodes组成。您可以为主机配置高可用性(HA)以确保集群单点失效发生。
@提示:OpenShift Container Platform3.5使用Kubernetes 1.5版本和Docker 1.12版本
Masters
master为一个或者多个主机,包括API服务器,控制器管理器服务器和etcd。master管理其Kubernetes集群中的nodes,并调度pod在nodes上运行。
表1. master组件
组件 | 描述 |
---|---|
API服务器 | Kubernetes API服务器提供验证和配置pod的数据,服务和复制控制器。此外,它还可以将pod分配给node,并将pod信息与配置同步。可以作为独立进程运行。 |
ETCD | etcd存储持续的master状态,其他组件将监视etcd的变动以保持所需状态。可以选择将etcd配置为高可用性,通常采用2n + 1对等服务进行部署。 |
控制器管理服务器 | 控制器管理器服务器查看etcd的状态,更改复制控制器对象,然后使用API强制执行所需的状态。该组件可以作为独立进程运行。通常在一个集群下创建一个控制器管理器服务器 |
HAProxy | 可选项,在配置多个主节点高可用性的环境时使用,可将请求负载均匀分配到多个主节点。高级安装方法可以为您配置HAProxy的native 方法。或者,您可以使用该native 方法,但得预先配置自己的负载均衡器。 |
主节点的高可用性配置
在单个主节点的配置中,虽然当主节点或其任何服务失败时,运行的应用程序的可用仍将保留。然而,主节点的故障降低了系统响应或创建新应用程序的能力。您可以选择为主节点配置高可用性(HA),即多个主节点,以确保集群不会发生单点故障。
@提示:不支持在安装后从单个主群集迁移到多个主群。
当使用native
HAProxy的HA方法时,主节点组件需具有以下特性:
角色 | 模式 | 其他 |
---|---|---|
ETCD | 主动 - 主动 | 通过负载均衡实现冗余部署 |
API服务器 | 主动 - 主动 | 由HAProxy管理 |
控制器管理服务器 | 主动 - 被动 | 在一个时间允许一个实例被选举为控制器管理服务器 |
HAProxy | 主动 - 被动 | 分发负载在多个主节点 |
节点
节点为容器提供运行的环境。Kubernetes集群中的每个节点可以被主节点管理。节点还具有运行pod的所需服务,包括Docker服务,kubelet和服务代理。
OpenShift Container Platform可从云提供商,物理系统或虚拟系统创建节点。Kubernetes与这些节点对象进行交互。主节点通过节点对象采集的信息来验证节点是否正常运行,当节点通过主节点持续的运行状况检查后才能被使用。可参考Kubernetes文档,里面提供了更多对节点管理的信息
管理员可以使用CLI管理OpenShift Container Platform实例中的节点。要在启动节点服务器时定义完整的配置和安全选项,请使用专用节点配置文件。
!警告:建议的最大节点数为300
Kubelet
每个节点都有一个kubelet来更新由容器清单指定的节点,容器清单是描述一个pod的YAML文件。kubelet使用一组清单来确保其容器启动并继续运行。示例清单可以在Kubernetes文档中找到。
可以通过以下方式向kubelet提供容器清单:
每20秒检查一次命令行上的文件路径。
在命令行上传递HTTP端点,每20秒检查一次。
观察一个etcd服务器的kubelet,例如/ registry / hosts / $(hostname -f),并对任何更改进行操作。
kubelet监听HTTP并响应一个简单的API来提交一个新的清单。
服务代理
每个节点还运行一个简单的网络代理,以反映在该节点上的API中定义的服务。允许节点在一组后端执行简单的TCP和UDP流转发。
节点对象定义
以下是Kubernetes中的节点对象定义示例:
apiVersion: v1 【1】
kind: Node 【2】
metadata:
creationTimestamp: null
labels: 【3】
kubernetes.io/hostname: node1.example.com
name: node1.example.com 【4】
spec:
externalID: node1.example.com 【5】
status:
nodeInfo:
bootID: ""
containerRuntimeVersion: ""
kernelVersion: ""
kubeProxyVersion: ""
kubeletVersion: ""
machineID: ""
osImage: ""
systemUUID: ""
【1】apiVersion
定义要使用的API版本
【2】将kind
设置为Node
为节点对象的定义
【3】metadata.labels
列出已添加到节点的任何标签
【4】metadata.name
是定义节点对象名称的必需值
【5】spec.externalID
定义可以到达节点的完全限定域名。metadata.name
为空时将被设置为默认值
更多细节请参考REST API