Rancher 2.0 速览

Rancher能够将Kubernetes的使用成本降低,极大的促进了DevOps的推广和流行

主要特性

  • 能管理运行部署在任何地方的K8S
  • 满足运维日常的关于账号、权限的管理需求,并且能直观的看到集群的运行状态、使用情况
  • 提供了诸如Rancher catalog这样便利的工具,可以快速搭建服务

架构概览

它基于以下几种成熟的技术做的设计:

  • Docker
  • Kubernetes

Rancher由以下几个部分组成:

  • Rancher API Server
    • 用户管理
    • 认证
    • 项目、节点管理
  • Cluster Controller And Agents
    • Controller
      • 配置项目和集群间的访问策略
      • 通过调用必需的Docker machine 驱动和Kubernetes Engine来做逻辑
    • Agent
      • 负载管理,主要做POD的创建和部署
      • 应用的Role、RoleBinding 的创建管理
      • 在集群和Rancher Server之间通信沟通事件、状态、节点信息和健康
  • Authentication Proxy
    • 这个是最基础的功能也是最最重要的功能,Rancher 与Kubernetes Master通过一个Service Account进行管理,无论使用什么Rancher特有的认证方式,都可以在Rancher换来合适的认证信息,并在向K8S Master发起API调用时会携带必要的身份信息。

K8S Cluster

  • etcd Nodes
  • Control Plane Nodes
    • API Server、scheduler、controller manager
  • Worker Nodes
    • Kubelets:用来监控Node运行状态,保证容器健康状态
    • Workloads:k8s pods 和deployments

K8S In Rancher

LoadBalancer & Ingress

默认集群内部服务是只能允许集群内访问的,如果你有需求让外部用户访问的话,必须通过LoadBalancer来暴露。

而一般情况下一个Service只负责处理一个IP地址,如果之后你需要运行多个对外提供访问的服务时,就要创建多个LoadBalancer。而这个操作比较浪费资源。所以推荐使用Ingress解决此问题

Ingress相当于一个转发规则的集合,它需要配合一个或者多个IngressController来动态路由处理请求。当Ingress收到请求时,Ingress Controller将会安排Load Balancer来请求转发给之前配好的具体某服务。

Service Disccovery

当你通过Load Balancer或者Ingress对外暴露服务时,实际上它只能简单地靠IP来工作。为了创建可以解析的域名,你必须创建一个服务记录、DNS 指向、Labeld Pod等用以匹配该IP。

Volume 和 Storage

  • Persistent Volumes
  • Storage Classes:每当有Volume Claim产生或者修改时,便由StorageClass来安排管理Volume的创建、修改

K8S Resources

  • Certificates: 当离开或者加入加密或者解密的数据
  • ConfigMaps:存储一些配置文件信息
  • Secrets:存出一些敏感信息,比如密码、token
  • Registries:保存了用于登录私有仓库的信息

Workloads

  • Pod: 这是一组共享网络命名空间和存储空间的容器,pod的伸缩和管理是由Workload来完成的。
  • Workload:workload描述了pod的发布、更新策略。workloads定义了容器编排、伸缩、更新的规则。它有五种类型
    • Deployments:如果应用是无状态,那么最好使用这种模式来发布管理容器。这种模式下的Pod会被认为相互独立的且无关系的,如果崩了,K8S会把它移除并重新创建
    • SatatefulSets:顾名思义,是一种有状态的发布模式。
    • DaemonSets: 保证集群中每个节点上都会运行这个Pod的一份副本。
    • Jobs:用来运行有限的任务并保证服务达到可期的运行状态,保证指定数量的任务能够成功退出
    • CronJobs:定时运行的任务
  • Services:一般情况下,一个Workload构建起来就是为了让集群内其他Workload来访问或者暴露接口到外部。Service可以满足这些需求
    • ClusterIP:这是默认的ServiceType,暴露给集群内部的一个IP,通过此IP和声明的端口可以访问
    • NodePort:在所有的Node上暴露一个静态端口,并且会自动创建ClusterIP的Service,所有来自集群外部的请求都会通过NodeIP:NodePort的形式访问
    • LoadBalancer:暴露服务是通过指定的Load Balancer来实现的,Nodeport和ClusterIP会自动创建。

Volume 和 Storage

  • Persistent Volume:是提前分配好的Volume,之后可以挂载到POD中,POD启动是依赖PVC绑定PV的。

  • StorageClass: 允许你动态的创建PVC,并且无须先创建的PV, 然后PVC指挥StorageClass创建。有点类似Storage Driver。

ConfigMap

K8S会把ConfigMap认作特殊的Secret类型,所以不能有在同Namespace跟与Secret中同名的情况。因为ConfigMap不存贮敏感信息,所以他们可以自动的更新(自动的意思是不重要的,伴随下次更新就可以变动),并不需要要求容器重新启动。

Secrets

像ConfigMap一样,被Workloads引用作为环境变量或者Volume Mount。任何对Secret的更改并不会自动生效,直到Pods重新启动