1. 应用部署
1.1. 功能截图
1.2. 知识点
说明K8S应用部署分为部署包创建和镜像创建两种方式,部署包创建的流程是上传部署包->构建镜像->上传镜像到镜像仓库->创建应用,镜像创建的流程是选择镜像->从镜像仓库下载镜像->创建应用。以及应用支持多容器部署,应用类型分为主应用和副应用,主应用有且只有一个,副应用可以有多个。应用分为基础配置和高级配置,基础配置为创建应用必输项,高级配置为可选项,包括标签、节点调度、Pod调度、服务代理、弹性伸缩、环境变量、存储、k8s健康检查、资源限制等。可以根据实际情况按需设置。
K8S应用部署支持deployment、dasmonset、job、cronjob4种类型。deployment:Deployment可以用来管理集群上的无状态应用,Deployment中的所有Pod都是相互等价的,并且在需要的时候被换掉,使用场景如微服务应用;dasmonset:DaemonSet确保全部(或者某些)节点上运行一个Pod的副本;当有节点加入集群时,也会为他们新增一个 Pod。当有节点从集群移除时,这些Pod也会被回收。删除 DaemonSet将会删除它创建的所有Pod。使用场景如网络插件(flannel、calico)、日志采集(filebeat)、其它Agent;job:表示普通任务,创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成时,Job将跟踪成功的完成情况。当达到指定的成功完成数时,Job即完成。删除Job将清理它创建的Pods。使用场景如离线数据处理、一次性执行任务;cronjob:表示定时任务,CronJob启动时会根据Cron表达式设置创建符合条件的Job。使用场景通知、备份数据。
1.3. 功能详述
应用部署可以创建、部署、还原、修改、删除应用和添加为模板、查看操作历史、视图切换,以及查看Pod日志、终端、事件和Yaml等操作。
1.3.1. 列表查看
点击应用部署菜单展示应用列表页面。不同的名称空间展示不同的应用。
字段说明:
- 名称空间:名称空间(namespace)是K8S提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。例如,可以使用名称空间来划分应用程序生命周期环境(如开发、测试、生产)。
- 应用:应用编号,不能重复,不同集群间的应用编号也不能相同
- 镜像:创建应用所使用的镜像版本,如果应用有多个镜像,则展示主应用的镜像
- 类型:应用支持deployment、dasmonset、job、cronjob 4种类型。deployment:Deployment可以用来管理集群上的无状态应用,Deployment中的所有Pod都是相互等价的,并且在需要的时候被换掉,使用场景如微服务应用;dasmonset:DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本;当有节点加入集群时,也会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。使用场景如网络插件(flannel、calico)、日志采集(filebeat)、其它Agent;job:表示普通任务,创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成时,Job将跟踪成功的完成情况。当达到指定的成功完成数时,Job即完成。删除Job将清理它创建的Pods。使用场景如离线数据处理、一次性执行任务;cronjob:表示定时任务,CronJob启动时会根据Cron表达式设置创建符合条件的Job。使用场景通知、备份数据。
- 启动/总数:启动的应用实例数和应用实例总数。
- 状态:应用状态,目前有全部启动、部分启动和全部停止三种状态。
- Pod名称:Pod的名称,即应用实例的名称。
- 状态:Pod的状态。
- 运行节点:Pod运行的节点主机名。
- 创建时间:Pod创建的时间。
1.3.2. 创建
点击创建按钮跳转到创建应用页面,输入相应信息创建应用,并且可以查看操作结果日志,应用支持deployment、dasmonset、job、cronjob 4种类型。应用创建分为部署包创建和镜像创建两种方式,部署包创建的流程是上传部署包->构建镜像->上传镜像到镜像仓库->创建应用,镜像创建的流程是选择镜像->从镜像仓库下载镜像->创建应用。以及应用支持多容器部署,应用类型分为主应用和副应用,主应用有且只有一个,副应用可以有多个。应用分为基础配置和高级配置,基础配置为创建应用必输项,高级配置为可选项,包括标签、节点调度、Pod调度、服务代理、弹性伸缩、环境变量、存储、k8s健康检查、资源限制等。可以根据实际情况按需设置。
字段说明:
- 群组编号:群组编号,不能重复,与应用注册的群组ID要保持一致。
- 名称空间:选择在哪个名称空间部署应用,名称空间(namespace)是K8S提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。例如,可以使用名称空间来划分应用程序生命周期环境(如开发、测试、生产)。
- 类型:应用支持deployment、dasmonset、job、cronjob 4种类型。类型说明参照列表查看功能。
- 重启策略:重启策略是指Pod中的容器停止后,是否重新启动的一个策略,支持Always、OnFailure、Never三种策略,Always表示当容器终止退出后,总是重启容器,默认策略;OnFailure表示当容器异常退出(退出状态码非0)时,才重启容器;Never表示当容器终止退出后,从不重启容器。
- 副本数:部署的实例数,该选项只有类型选择deployment时才生效。
- 调度:cron表达式,该选项只有类型选择cronjob时才生效。
- 仓库:镜像仓库,目前支持Harbor私有仓库。
- 应用名称:Pod中容器的名称。
- 应用类型:应用类型分为主应用和副应用,主应用有且只有一个,副应用可以有多个。
- 部署方式:应用部署方式,支持本地部署包上传和镜像部署两种方式,本地部署包上传表示通过上传应用部署包来部署应用,部署包格式目前支持tar和tar.gz包,镜像部署方式表示通过镜像来部署应用。
- 部署包上传:上传部署包,目前支持tar和tar.gz包,该选项只有部署方式选择本地部署包上传时才生效
- 镜像:创建应用所使用的镜像,支持展示仓库中存在的镜像列表,该选项只有部署方式选择镜像部署时才生效。
- 版本:镜像或者部署包的版本,支持展示镜像的版本列表。
- 端口映射:将容器内部端口映射到外部宿主机端口,保证应用从集群外可以访问,可以为端口指定名称,服务(Service)可以通过名称进行引用端口。容器端口表示容器内部端口,公共主机端口表示宿主机端口,主机IP表示要绑定外部端口的主机IP,支持多个端口的映射,支持TCP和UDP两种协议的端口映射,默认TCP协议。
- 环境变量:可以给应用配置环境变量。
- 存储:存储表示将容器内数据直接映射到宿主机环境的指定文件目录之中或者指定PVC。存储使容器可以持久化和共享数据,因为容器无法持久化数据,当容器删除的时候,容器中保存的数据会丢失。存储类型目前支持hostPath和PVC两种,hostPath表示将容器内数据直接映射到宿主机环境的指定文件目录之中,PVC 是用户存储的一种声明,PVC 和 Pod 比较类似,Pod 消耗的是节点,PVC 消耗的是 PV 资源,Pod 可以请求 CPU 和内存,而 PVC 可以请求特定的存储空间和访问模式。对于真正使用存储的用户不需要关心底层的存储实现细节,只需要直接使用 PVC 即可。
- 卷名称:存储卷名称。
- 路径或节点:宿主机指定文件或者目录,该选项只有存储类型为hostPath时才生效。
- 路径类型:支持7种类型,DirectoryOrCreate:在指定路径上如果不存在目录,则创建;Directory:在指定路径上必须存在目录;FileOrCreate:在指定路径上如果不存在文件,则创建,权限设置为 0644;File:在指定路径上必须存在文件;Socket:在给定路径上必须存在的 UNIX 套接字;CharDevice:在给定路径上必须存在的字符设备;BlockDevice:在给定路径上必须存在的块设备。该选项只有存储类型为hostPath时才生效。
- pvc名称:选择pvc名称,该选项只有存储类型为pvc时才生效。
- 是否只读:存储可以进行读写和只读挂载,只读挂载表示容器内无法对挂载的目录进行写操作。该选项只有存储类型为pvc时才生效。
- 容器挂载路径:容器内路径。
- 卷内子路径:为了支持一个pod多次使用同一个存储卷而设计,如果是存储卷挂载在容器,指的是存储卷目录的子路径,如果是配置项configMap、Secret,则指的是挂载在容器的子路径。1个pod中可以拉起多个容器,有时候希望将不同容器的路径挂载在存储卷的子路径,这个时候需要用到卷内子路径(subpath)。存储卷支持将configMap、Secret挂载在容器的路径,但是会覆盖掉容器路径下原有的文件,如何支持选定configMap、Secret的每个key-value挂载在容器中,且不会覆盖掉原目录下的文件,这个时候也可以用到subpath。
- 只读:存储可以进行读写和只读挂载,只读挂载表示容器内无法对挂载的目录进行写操作。
- k8s健康检查:Pod中容器的k8s健康检查支持就绪检查和存活检查,就绪检查表示检查容器内的应用是否能够正常对外提供服务,如果探测失败,则这个Pod将会从服务中删除,请求将不会发送到该Pod。存活检查表示可以用来检查容器内应用的存活的情况来,如果检查失败会杀掉容器进程,是否重启容器则取决于Pod的重启策略。
- 检查类型:支持httpGet(HTTP请求)、exec(运行命令)和tcpSocket(TCP连接)三种。HTTP请求会根据容器IP、端口及访问路径发起一次HTTP请求,如果返回码在200到400之间表示成功;运行命令会在容器中执行特定的命令,命令退出返回0表示成功;TCP连接会根据容器IP地址及特定的端口进行TCP检查,端口开放表示成功。
- 检查间隔:每次k8s健康检查的间隔,单位秒。
- 初始延迟:Pod启动后首次进行检查的等待时间,单位秒。
- 超时时间:每次k8s健康检查的超时时间,单位秒。
- 成功阈值:从上次检查失败后重新认定检查成功的检查次数阈值(必须是连续成功)。
- 失败阈值:从上次检查成功后重新认定检查失败的检查次数阈值(必须是连续失败)。
- 检查端口:请求或k8s健康检查的端口。
- 请求路径:http请求的路径,例如:/healthz。该选项只有检查类型为HTTP请求时才生效。
- 运行命令:容器中运行命令。该选项只有检查类型为运行命令时才生效。
- 资源限制:如果节点有足够的可用资源,容器就有可能使用更多资源。可以指定容器使用CPU和内存资源的数量。如果为Pod中的容器指定资源请求时,调度程序将决定将Pod放置在哪个节点上。并且,K8S会处理限制,以便不允许运行中的容器使用的资源超过设置的限制。
- CPU预留:表示运行Pod的节点CPU必须满足运行Pod的最基本需求才能运行Pod。单位m,1 core (核心)= 1000 m(毫核)。
- CPU限制:表示限制Pod中容器使用的最大CPU。
- 内存预留:表示运行Pod的节点内存必须满足运行Pod的最基本需求才能运行Pod。单位MiB。
- 内存限制:表示限制Pod中容器使用的最大内存。
- 标签:可以给应用添加标签,便于分类管理资源对象。
- POD标签:可以给Pod设置标签,标签定义好后,其他对象可以使用 Label Selector (标签选择器)来选择一组相同标签的Pod进行分组和管理。
- 节点调度:可以指定Pod运行在哪个节点。
- POD调度:有时候我们希望调度的时候能考虑 Pod 之间的关系,而不只是Pod和节点的关系。例如,希望Pod A和B部署在同一个机房或机器上,因为这些服务可能会对网路延迟比较敏感,需要低延时;或者希望Pod C和D尽量分开部署,即使一台主机甚至一个机房出了问题,也不会导致两个服务一起挂而影响服务可用性,提升故障容灾的能力。支持新增规则,会基于节点上已经运行的pod标签来约束新Pod的调度。
- 类型:支持Pod亲和性和反亲和性调度,亲和性表示Pod可以和哪些Pod运行于"同一位置",反亲和性表示Pod不能和哪些pod运行于"同一位置"。"同一位置"取决于节点的位置拓扑。例如:当位置拓扑为主机名"kubernetes.io/hostname"时,"同一位置" 意味着同一个节点,不同节点即不同的位置。
- 优先级:支持首选和最好两种。首选表示Pod必须部署到满足条件的节点上,如果没有满足条件的节点,就不停重试。最好表示Pod优先部署到满足条件的节点上,如果没有满足条件的节点,就忽略这些条件,按照正常逻辑部署。
- 范围:支持当前POD的名称空间和指定POD的名称空间。当前POD的名称空间表示待调度Pod所属的名称空间。指定POD的名称空间表示选择多个名称空间。
- 位置拓扑:表示用于划分节点是否为同一位置或同一区域。例如:当位置拓扑设置为主机名"kubernetes.io/hostname"时,"同一位置" 意味着同一个节点,不同节点即不同的位置。
- 服务代理:服务代理(Service)表示可以为一组具有相同功能的Pod提供一个统一的入口地址,并且将请求进行负载分发到后端的各个Pod上。
- 服务类型:支持NodePort和ClusterIP两种。NodePort表示为服务在集群内每台机器上绑定一个端口,这样K8S集群外就可以通过节点IP和节点端口方式来访问集群内服务;ClusterIP表示分配一个仅集群内部可以访问的虚拟IP,集群外无法访问该服务。
- 服务名称:服务的名称。
- 集群IP:集群内部可以访问的虚拟IP,不指定则自动分配。
- 端口名称:服务(Service)可以通过名称进行引用端口。
- 监听端口:K8S集群内部服务之间访问的端口。集群外部无法通过该端口访问集群内服务。
- 协议:支持TCP和UDP两种。
- 目标端口:容器内的端口。
- 节点端口:在集群内每台机器上绑定一个端口,这样K8S集群外就可以通过节点IP和节点端口方式来访问集群内服务。
- 弹性伸缩:弹性伸缩(HPA)是K8S的一种资源对象,能够根据某些指标对应用的Pod数量进行动态伸缩,使运行在集群中的应用对指标的变化有一定的自适应能力。目前支持设置CPU和内存阈值,当Pod使用的CPU或者内存大于设置的阈值时,则动态扩容Pod数量来缓解集群的压力;当Pod使用的CPU或者内存小于设置的阈值时,则动态收缩Pod数量。
- 名称:弹性伸缩规则的名称。
- 描述:弹性伸缩规则的描述。
- 最小副本数:收缩后Pod的最小数量不能小于设置的副本数。
- 最大副本数:扩容后Pod的最大数量不能大于设置的副本数。
- 数据来源:目前支持Resource,及根据CPU和内存设置阈值。
- 监控项:支持CPU和内存两种。
- 计算方式:支持平均值和平均百分比。平均值表示当前应用的每个Pod使用CPU或者内存的平均大小;平均百分比表示当前应用的每个Pod使用CPU或者内存的平均百分比大小。
- 阈值:可以设置CPU和内存的阈值,当超过阈值时触发规则。
1.3.3. 部署
应用创建成功后,如果需要更新版本,就需要用到应用部署,点击部署按钮进入部署页面:
选择需要部署的应用,点击下一步进入选择版本页面:
点击容器配置按钮,选择需要更新的容器,如果有多个容器,可以只选择更新部分容器或者更新所有容器版本,未选择的容器版本不变。应用部署分为部署包创建和镜像创建两种方式,部署包创建的流程是上传部署包->构建镜像->上传镜像到镜像仓库->创建应用,镜像创建的流程是选择镜像->从镜像仓库下载镜像->创建应用。
点击部署按钮,应用开始部署,点击操作结果可以实时查看部署日志。
1.3.4. 历史
点击历史按钮跳转到操作历史页面,通过点击列表可以查看详细应用信息和操作日志,并且可以根据时间字段进行查询。
1.3.5. 还原
对部署类操作可以点击还原按钮将应用还原到操作前版本。
1.3.6. 修改
点击修改按钮修改应用配置。字段说明参照创建功能。
1.3.7. 删除
点击删除按钮可以删除应用,支持删除多个应用,如果当前应用包含非docker实例,则无法删除应用,需要到资源中心删除。
1.3.8. 添加为模板
点击添加为模板按钮,输入模板编号和描述,可以为当前应用新增一个配置模板。之后可以通过部署模板菜单->快速创建功能创建应用,避免重复输入应用配置,可以更快速、方便的创建应用。
1.3.9. Pod详情
点击Pod名称,可以跳转到Pod详情页面,查看Pod相关信息。
1.3.10. 日志
点击日志按钮,可以查看Pod中容器的日志。如果应用有多个Pod,可以切换不同的Pod进行日志查看,并且支持查询日志的行数,默认最新的100行。
1.3.11. 终端
点击终端按钮,可以连接到相应的容器终端中,进行相关操作。连接前需要到资源中心->服务器->SSH控制台输入用户名和密码,并且记住密码。之后无需设置即可连接到终端。
字段说明:
- 解释器:目前支持/bin/bash、/bin/sh和/bin/ash,默认为/bin/sh。
- 使用自定义命令:是否使用自定义命令连接容器控制台,默认关闭。
1.3.12. 事件
点击事件按钮,可以查看应用事件详情信息,如果应用状态不正常,可以方便进行排查。
1.3.13. yaml
点击yaml按钮,可以查看应用yaml格式配置。
1.3.14. 容器视图切换
点击应用视图按钮,可以跳转到应用列表页面,应用页面点击容器视图按钮,可以跳转到容器列表页面。
1.3.15. 应用列表查看
点击应用视图按钮展示应用列表页面。
字段说明:
- 应用:应用编号,不能重复。
- 应用名称:应用的名称。
- 启动/总数:启动的应用实例数和应用实例总数。
- 应用状态:应用状态,目前有全部启动、部分启动和全部停止三种状态。
- 实例:应用实例编号,不能重复。
- 实例名称:应用实例名称。
- 当前版本:应用实例当前版本。
- IP:应用实例IP地址。
- 端口:应用探针管理端口。
- 状态:实例状态。
1.3.16. 诊断
点击诊断按钮,跳转到应用详情页面,详细操作请前往应用中心菜单->应用诊断室->诊断单元。
1.3.17. 传统部署切换
当容器化部署应用运行出现问题或者不想继续使用容器应用,这种场景下我们需要提供传统和容器应用之间的快速一键切换,可以快速做到一键的方式切换到传统部署方式,在切换失败,支持还原操作。传统部署切换的前提是宿主机需要安装代理节点agent。
点击应用视图按钮,切换到应用页面,修改应用配置。
选择应用,点击传统部署切换按钮,将会进行容器应用和传统应用的切换,点击操作结果可以查看操作日志,点击刷新按钮可以查看最新应用状态。
1.3.18. 传统部署还原
点击历史按钮,进入操作历史页面,点击还原按钮,将传统应用还原为容器应用,点击查询按钮可以查询还原操作的日志。
2. 部署模板
2.1. 功能截图
2.2. 知识点
说明部署模板主要作用是更快速、方便的创建应用,使应用配置可以复用,不用每次创建应用时输入应用配置。
2.3. 功能详述
部署模板支持新增、修改、删除、批量导出、批量导入和快速创建功能。
2.3.1. 列表查看
点击部署模板菜单展示部署模板列表页面。
字段说明:
- 编号:模板编号,不能重复。
- 名称:模板名称。
- 版本:模板版本,按照点号分隔子版本,一个应用支持多个版本的模板,新增模板时版本支持手动输入,如果通过应用部署->添加为模板新增模板,则模板版本为应用当前版本。
- 描述:模板描述,用于输入一些模板说明信息。
2.3.2. 新增
点击新增按钮,输入模板配置进行新增模板。字段说明参照应用部署->创建功能。
2.3.3. 修改
点击修改按钮修改模板配置。字段说明参照应用部署->创建功能。
2.3.4. 删除
点击删除按钮删除模板。
2.3.5. 批量导出
选择模板,点击批量导出按钮导出模板,支持导出多个模板,方便其它环境导入使用。导出为json格式文件。
2.3.6. 批量导入
点击批量导入按钮、选择json格式的模板文件,导入模板。支持导入多个模板,如果模板编号重复,则跳过相关的模板。
2.3.7. 快速创建
点击快速创建按钮,可以使用当前模板的配置快速创建应用,创建成功后可以在应用部署菜单查看新创建的应用,通过该功能可以更快速、方便的创建应用。
3. 自定义项目
3.1. 功能截图
3.2. 知识点
说明K8S中一个应用可能包含Pod、控制器、服务代理等多个资源,而且资源比较分散,当查找一个应用关联哪些资源时比较麻烦。自定义项目主要用于解决这个问题,用户可以新增一个自定义项目,将一个应用关联的资源添加在一个项目中,方便管理。一个自定义项目相当于一个应用。
3.3. 功能详述
自定义项目支持新增、修改、删除、查看项目详情等操作。
3.3.1. 列表查看
点击自定义项目菜单展示项目列表页面。
字段说明:
- 编号:自定义项目编号,不能重复。
- 名称:自定义项目名称。
- 名称空间数:自定义项目包含的名称空间数。
- POD数:自定义项目包含的Pod数。
- 服务代理数:自定义项目包含的服务代理数。
- 控制器数:自定义项目包含的控制器数。
- 状态:自定义项目的状态,支持健康、警告、异常、未知4种状态,根据名称空间和Pod状态进行汇总。
- 创建时间:自定义项目创建的时间。
- 描述:自定义项目的描述,用于编写项目的描述信息。
3.3.2. 新增
点击新增按钮,输入自定义项目配置进行新增自定义项目。自定义项目可以包含多个名称空间、服务代理和控制器。
3.3.3. 修改
点击修改按钮修改自定义项目配置。
3.3.4. 删除
点击删除按钮删除自定义项目。
3.3.5. 项目详情
点击自定义项目编号,跳转到详情页面。展示名称空间、Pod、服务代理、控制器子菜单。
查看名称空间列表。点击名称可以跳转到名称空间详情。字段说明参照基础资源->名称空间功能。
点击Pod子菜单可以查看Pod列表,点击Pod名称可以跳转到Pod详情页面,支持查看Pod日志、终端、事件、yaml文件。字段说明参照基础资源->POD管理功能。
点击服务代理子菜单可以查看服务代理列表,点击服务代理名称可以跳转到服务代理详情页面。字段说明参照基础资源->服务代理功能。
点击控制器子菜单可以查看控制器列表,点击控制器名称可以跳转到控制器详情页面。字段说明参照基础资源->控制器功能。