Rancher2.0 业务逻辑及概念
摘要:本文档重点介绍Rancher2.0 业务逻辑及K8s(Kubernetes)相关概念,为方便理解,文档根据Rancher UI界面从Global 、Cluster、Project 分层次介绍在不同业务层次的相关业务逻辑,资源操作与重要概念。
如图所示,在global层可操作的资源对象有Cluster,Node Drivers, Catalogs,Users, Settings, Security。
Cluster由Kubernetes管理,包含了运行容器应用的机器的集合。
如图,在global层可add Cluster。
通过Edit 可对已存在的Cluster 进行修改,包括 Cluster Namex修改, Member Roles修改,Cluster Options 修改,Customize Node Run Command。
Etcd:etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。用于保存集群信息。
Control:用于集群控制的节点。
Worker:用于具体业务工作的节点。
删除选定Cluster。
Node Driver 用于创建cluster 的 From nodes in an infrastructure provider 方式,处于 active状态的 Node Driver 可在创建集群时被选择。可对Node Drivers 进行的操作如图所示。
Catalog 是Global层的,它被所有的Cluster和Projects 共享。
如图,可以选择启用或者不启用官方的catalogs,可以自定义添加catalogs。Catalogs用于在Project层Launch自己所需要的应用。
在全局层登陆者有权限管理用户时,可对user进行操作,包括 Add User, Deactivate, Delete, Edit。
Add User 包括添加 UserName、Password、Display Name,Global Permissions。通过Global Permission 对添加的User 的权限进行设置。
通常情况下不需要修改Setting中的内容。
Cacerts : 验证ssl证书所需的CA证书,此CA证书仅适用于自签SSL证书。若SSL证书是权威CA机构所颁发,则要求删除此CA证书。
Engine-install-url : 默认的Docker 引擎安装URL(用于大多数Machine Driver)
Engine-iso-url : 默认OS安装URL(用于Machine vSphere Drivers)
Ui-pl : 公司名称专用标签。
Ingress-ip-domain : 用于自动生成Ingress主机的通配域名。
Server-url : 默认的rancher Server的访问地址,必须是HTTPS。集群中的所有的主机都必须能够访问此地址。
System-default-registry :用于RKE部署系统服务时镜像的拉取,其他服务拉取镜像不生效。
在Security中 可以对 Roles 、Pod Security Policies 、Authentication 进行操作。
如图,在Cluster层可操作的资源对象包括 Cluster、Nodes、Storage、Projects\Namespce、Members、Tools。
可启动Launch Kubectl 打开shell界面操作cluster。
可Edit cluster或Delete cluster,具体操作内容同Global层的cluster 中的Edit操作。
对Node的操作包括 :
Cardon:此功能对于在小型维护窗口(如重新启动,升级或停用)期间在节点上执行短任务非常有用。完成后,重新启动并通过取消协调使节点再次可调度。
Delete : 删除该节点。
Drain :此功能对于执行节点维护(如内核升级或硬件维护)非常有用。它可以防止新的pod在重新分发现有pod时部署到节点,以便用户不会遇到服务中断。
Edit:为节点添加 Custom Name,Description, Labels。 其中labels 是 key/value 对,用于注释和做节点调用的决定。
如图,Storage包括Persistent Volumes和 Storage Class。
通过Add Persistent Volume 设定 Name,Volume Plugin,Customize(Customize Advanced options。
过程如图所示:
Project是Ranher中引入的组织对象,可以减轻集群管理的负担。可以使用projects实现muti-tenancy(多租户)。
Project在namespace之外的Kubernetes集群中提供了额外的组织级别。在层次方面: Cluster包含Project , Project 包含 NameSpace。
Rancher Project允许您在Project级别应用资源和访问权限来解决此问题。然后,Project中的每个namespace都会继承这些资源和策略,因此您只需将它们分配给project一次,而不是将它们分配给每个namespace。
在cluster层,如上图所示可以对project和namespace进行管理,如Add Project,Edit Project,Delete Project,Add NameSpace ,Edit namespace , Delete namespace ,move namespace。
对Cluster层的member进行操作,包括添加,删除member。选择已存在User作为member,分配member相关权限。Cluster Permissions包括 :
Owner:Owners have full control over the Cluster and all resources inside it.
Member: Members can manage the resources inside the Cluster but not change the Cluster itself.
Custom: 自定义member,可为User选择的角色有:Create Projects,Manage Cluster Members,Manage Nodes, Manage Storage, View All Projects, View Cluster Members, View Nodes。
Tools中包含三个工具,如图所示:
Alerts : 对Alerts 操作包括 Deactivate,Delete,Add Alerts, Edit, Clone. Alerts 的接收者为Notifier。
Notifier:种类分为Slack,Email, Pagerduty, webhook.
Logging:将日志输入到指定的日志收集工具,可用工具包括:Elasticsearch,splunk,kafka,syslog,fluented.
如图,Project 层 可操作的资源对象包括 Workloads,Catalog Apps,Resources,Namespaces, Members。
Worokloads 是集群上运行的工作单元,可以是pods,也可以是Deployment。Worokloads是为pod设置部署规则的对象。根据这些规则,Kubernetes执行部署并使用应用程序的当前状态更新Worokloads。通过Worokloads,您可以定义应用程序调度,扩展和升级的规则。
Workloads 有不同的分类规则,最流行的是K8s所提供的:
Deployments:部署最适用于无状态应用程序(即,当您不必维护工作负载的状态时)。由部署工作负载管理的Pod被视为独立且一次性的。如果pod遇到中断,Kubernetes会删除它,然后重新创建它。示例应用程序是Nginx Web服务器。
StatefulSets: 与部署相比,最好在应用程序需要维护其身份和存储数据时使用StatefulSet。应用程序就像Zookeeper--一个需要数据库存储的应用程序。
DaemonSets: 守护进程确保群集中的每个节点都运行pod的副本。对于正在收集日志或监视节点性能的用例,这种类似守护进程的工作负载效果最佳。
Jobs: 作业启动一个或多个pod,并确保指定数量的pod成功终止。与管理正在进行的所需应用程序状态相比,作业最适合运行有限任务完成。
CronJobs: CronJobs与工作类似。然而,CronJobs在基于cron的时间表上运行完成。
Deploy:Deploy WorkLoad
如图所示:Deploy Workload包括name设定,workload Type设定,环境变量设定,镜像选择,namespace选择,PortMaping,节点调度,健康检查,Add volumes, Scaling/Upgrade Policy.
Redeploy: 重新部署,
Pause Orchestration:暂停使用该部署。
Delete:删除该部署。
Edit:编辑该部署
Rollback:回滚部署
Add a sidecar: sidecar 是一个container,为了增强或扩展主 container,与主container共享一个pod,因此共享相同network space和 storage。
如图所示,rancher中提供的负载均衡工具是Ingress,通常情况下,service和pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方,Ingress是授权入站连接到达集群服务的规则集合。
Load Banlancing 操作有 Add ingress, Delete Ingress,Edit Ingress。
查看Project中Namespace及Namespace中service信息。可以Edit、Move、Delete namespace. 可以clone Service record。
在Volunme选项中可以对指定的namespace添加Volume Claim。设定 storage class,capabilitiy,及自定义访问模式。
Configure Respositoties, 为流水线设置代码仓库。
通过在Global设定Catalog中launch需要的应用。
如图所示,该对象中保存者Porject中的资源,包括Alerts,Project级的警报;certificates,Project中所用到的相关证书;Cogfig Maps,project中所用到的配置键值对;Registry,Project所用到的注册表,可以设定这些注册表对namespace的可见范围;Secret,储存相关敏感数据。
Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群。
如图所示,在project层对nameSpace操作。
此member是project级的member。拥有的是对project范围内资源的管理。
如图所示,可以删除和添加user为Project Member。其中 Perject Permissio分为 :
Owner: Owners have full control over the Project and all resources inside it.
Member: Members can manage the resources inside the Project but not change the Project itself.
Read Only: Members can view the resources inside the Project but not change the Project itself.
Custom: 可自定义的roles有Create Namespaces,Manage Config Maps,Manage Ingress,Manage Project Members,Manage Secrets,Manage Service Accounts,Manage Services,Manage Volumes,Manage Workloads,View Config Maps,View Ingress,View Project View Secrets,Members,View Service Accounts,View Services,View Volumes,View Workloads。
API & Keys : 查看rancher 所有 api 的 Endpoint : https://192.168.231.130/v3,
API key与特定用户(例如: Default Admin)绑定,可以创建、删除和操作有权访问的所有集群和项目。
Node Template: 添加node Template 在创建cluster 设定 node时使用,可选Template 有 ALiyun ECS,Amazon EC2 等。
Preference : Rancher UI 偏好设置。
Logout:用户登出。