k8s是一个编排容器的工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以故障转换,如果一个节点的kubelet服务挂掉,导致这个节点不可用,这个节点上的pod会自动漂移到其他节点
- Node : 一个node就是一个运行着K8s节点的虚拟机,pod就运行在上面。
- Pod : Pod是K8s的最小工作单元。每个Pod包含一个或多个容器。
- 可管理性
有些容器天生就是需要紧密联系,一起工作。Pod提供了比容器 更高层次的抽象,将它们封装到一个部署单元中。Kubernetes以Pod 为最小单位进行调度、扩展、共享资源、管理生命周期。
- 通信和资源共享
Pod中的所有容器使用同一个网络namespace,即相同的IP地址和 Port空间。它们可以直接用localhost通信。同样的,这些容器可以共 享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到 Pod中的每一个容器。
- Label : Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node,RC/RS等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改
- selector : 是一个通过匹配labels来定义资源之间关系得表达式,例如为一个负载均衡的service指定所目标Pod
- Replication Controller : RC是为了保证一定数量被指定的Pod的复制品在任何时间都能正常工作,Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod的生命周期。为了满足不同业务场景,Kubernetes开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种 Controller。
- Service : 可以为一组相同功能的pod应用提供统一的入口地址,并将请求负载均衡分发到各个容器应用上。service的负载均衡功能由node节点上的kube-proxy提供,有两种方式,集群内部访问(clusterIP )、集群外部访问(nodeport)
- Volume : Volume 是 Pod 中能够被多个容器器访问的共享目录,概念、用途和目的与 Docker 的 Volume 比较类似,但两者不能等价(了解Volume详情)
- Secret : Secret 存储了敏感数据,Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
- Namespace : Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟 Cluster,每个Cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。
- default:创建资源时如果不指定,将被放到这个Namespace中。
- kube-system:Kubernetes自己创建的系统资源将放到这个 Namespace中。
- flannel : Flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,需要另外下载部署。我们知道当我们启动 Docker 后会有一个用于和容器进行交互的 IP 地址,如果不去管理的话可能这个 IP 地址在各个机器上是一样的,并且仅限于在本机上进行通信,无法访问到其他机器上的 Docker 容器。Flannel 的目的就是为集群中的所有节点重新规划 IP 地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的 IP 地址,并让属于不同节点上的容器能够直接通过内网 IP 通信
- etcd : key-value键值存储数据库,用来存储kubernetes集群的信息的
- apiserver : 用户和 kubernetes 集群交互的入口,封装核心对象的增删改查操作,提供 RESTFul 风格的 API 接口,通过 etcd 来实现持久化并维护对象的一致性
- scheduler : 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- controller-manager : 主要是用于保证 RC 定义的复制数量和实际运行的 pod 数量一致,另外还保证了从 service 到 pod 的映射关系总是最新的
- kubelet : 运行在 minion 节点,负责和节点上的 Docker 交互,例如启停容器,监控运行状态等
- kube-proxy : 运行在 minion 节点,负责为 pod 提供代理功能,会定期从 etcd 获取 service 信息,并根据 service 信息通过修改 iptables 来实现流量转发,将流量负载到要访问的 pod 所在的节点上去