一、ECS日常运维指南
1、概述
云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。
选择云服务器ECS,您可以轻松构建具有以下优势的计算资源:
- 无需自建机房,无需采购以及配置硬件设施。
- 分钟级交付,快速部署,缩短应用上线周期。
- 快速接入部署在全球范围内的数据中心和BGP(Border Gateway Protocol,边界网关协议)机房。
- 成本透明,按需使用,支持根据业务波动随时扩展和释放资源。
- 提供GPU和FPGA等异构计算服务器、弹性裸金属服务器以及通用的x86架构服务器。
- 支持通过内网访问其他阿里云服务,形成丰富的行业解决方案,降低公网流量成本。
- 提供虚拟防火墙、角色权限控制、内网隔离、防病毒攻击及流量监控等多重安全方案。
- 提供性能监控框架和主动运维体系。
- 提供行业通用标准API,提高易用性和适用性。
2、日常操作
日常操作有创建实例、连接ECS实例、管理ECS实例
创建ECS实例详见阿里云文档:
https://help.aliyun.com/document_detail/108442.html?spm=a2c4g.11186623.6.677.23876017wNScz7
连接ECS实例详见阿里云文档:
https://help.aliyun.com/document_detail/71529.html?spm=a2c4g.11174283.6.684.d4bb52feyzp8QK
释放ECS实例详见阿里云文档:
https://help.aliyun.com/document_detail/25441.html?spm=a2c4g.11186623.6.700.2b866764sWoAuP
3、监控
监控查看详见阿里云文档:
https://help.aliyun.com/document_detail/25482.html?spm=a2c4g.11186623.6.1145.130a1d9dWd943T
设置ECS实例报错详见阿里云文档:
https://help.aliyun.com/document_detail/202458.html?spm=a2c4g.11186623.6.1146.10254b40WjOXIZ
监控指标
监控指标 | 阀值 | 措施 |
---|---|---|
内网流入带宽 | >=20480Mbytes | 检查流入数据,配置流量管理 |
进程总数 | >=10240Count | 检查服务器进程报错原因,关掉异常服务及异常进程 |
负载 | >=CPU核数 | 检查服务器高负载报错原因,关掉异常服务及异常进程 |
磁盘读IO | >=25 | 检查服务器是否是小文件生成过多,清理文件 |
磁盘写IO | >=25 | 检查服务器是否是小文件生成过多,清理文件 |
磁盘使用率 | >=80% | 检查是否是日志未清理,或者扩盘 |
inode使用率 | >=80% | 查看节点占用情况,目录文件句柄占用情况遍历指定目录查看对应inode使用情况,删除无用的临时文件,释放inode |
CPU使用率 | >=80% | 检查服务器报错原因,是否为javaGC过多 |
内存使用率 | >=80% | 检查服务器报错原因,是否为内存泄漏 |
4、ECS备份
4.1、主要备份目录
- /root/ 目录:/root/ 目录是管理员的家目录.
- /home/ 目录:/home/ 目录是普通用户的家目录。如果是生产服务器,那么这个目录中也会保存大量的重要数据。
- /etc/ 目录:系统重要的配置文件保存目录,需要备份。
- 其他目录:根据系统的具体情况,备份重要的目录。比如,我们的系统中有重要的日志,或者安装了 RPM 包的 mysql 服务器(RPM 包安装的 mysql 服务,数据库保存在 /var/lib/mysql/ 目录中),那么 /var/ 目录就需要备份;如果我们的服务器中安装了多个操作系统,或编译过新的内核,那么 /boot/ 目录就需要备份。
4.2、备份措施
4.2.1、可编辑脚本使用定时任务备份
1、cron介绍
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。
- /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
- /etc/crontab 这个文件负责调度各种管理和维护任务。
- /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
- 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
2、crontab的使用
我们常用的命令如下:
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有
- * 取值范围内的所有数字
- / 每过多少个数字
- - 从X到Z
- ,散列数字
4.2.2、可使用ECS快照备份
ECS快照操作详见阿里云文档:
https://help.aliyun.com/document_detail/25391.html?spm=a2c4g.11186623.6.900.2f7729e8U0aivu
5、安全
ECS安全问题详见阿里云文档:
https://help.aliyun.com/document_detail/25387.html?spm=a2c4g.11186623.6.921.7ed8493dmplTbq
6、常见问题
ECS实例常见问题详见阿里云文档:
https://help.aliyun.com/knowledge_detail/127067.html?spm=a2c4g.11186623.6.1639.1e2245c1jGZ1E8
二. Kubernetes托管版集群日常维护指南
1.概述
Kubernetes 是主流的开源容器编排平台。为了让用户可以方便地在阿里云上使用 Kubernetes 管理容器应用,阿里云容器服务提供了 Kubernetes 集群支持。
您可以通过容器服务管理控制台创建一个安全高可用的 Kubernetes 集群,整合阿里云虚拟化、存储、网络和安全能力,提供高性能可伸缩的容器应用管理能力,简化集群的搭建和扩容等工作,让您专注于容器化的应用的开发与管理。
阿里云容器服务面向多种业务场景提供多样化的容器集群。
- 托管版集群适合大多数业务场景,是一种最通用的集群。
- Serverless Kubernetes 则适合快速伸缩的敏捷业务场景以及单或多个任务处理的场景。
- 边缘集群则是 IoT、CDN 等边缘业务的必选。
- 加密集群(TEE)则是高数据安全业务的最佳搭档。
此外,容器服务还在基因计算、AI大数据等领域提供了高度集成的解决方案,结合 IaaS 高性能计算、网络能力,发挥容器的最佳性能。在多云混合云领域,阿里云容器服务提供了多集群统一管理能力,用户可在容器服务控制台,统一管理来自线下 IDC,或者其他云上的 Kubernetes 集群。
阿里云容器服务支持对容器应用的全生命周期管理,具有以下功能:
- 集群管理通过控制台一键创建 Kubernetes 集群,支持跨可用区高可用。
一站式容器管理
- 容器应用全生命周期管理
- 高性能 Flannel VPC/Terway 容器网络
- 阿里云云盘、文件存储NAS、对象存储 OSS 等持久化存储支持
- 资源、应用、容器多维度监控
- 多样化的日志报表统计
- 基于角色的权限管理和容器运行时安全
应用市场内容
- 丰富的 Helm chart 组件
- 对接镜像服务
开发者服务
- 提供 OpenAPI 和社区原生 API
- 提供阿里云 Cloudshell 和社区原生 Kubectl 工具
Kubernetes托管版集群只需创建Worker节点,Master节点由阿里云容器服务创建并托管
前提条件:
<font style="color:#333333;">用户账户需有100元的余额并通过实名认证,否则无法创建按量付费的ECS实例和负载均衡</font>
<font style="color:#333333;">随集群一同创建的负载均衡实例只支持按量(流量)付费的方式。</font>
<font style="color:#333333;">Kubernetes集群仅支持专有网络VPC。</font>
<font style="color:#333333;">每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败</font>
<font style="color:#333333;">ECS实例使用限制:支持创建按量付费和包年包月的ECS实例。</font>
2.授权管理
1.授权概述
容器服务ACK的授权体系包含RAM授权和RBAC授权两部分
2.RAM授权
在企业对接RAM的账号系统中,运维人员通过RAM用户管理云服务资源是一个常见场景。然而默认情况下RAM用户没有使用云服务OpenAPI的任何权限,为了保证RAM用户的正常使用,需要对RAM用户授权。
当您需要对集群进行可见性、扩缩容、添加节点等操作时,需要进行RAM授权。
- RAM系统策略授权:用于指定全局资源的读写访问控制。当RAM用户具有阿里云账号下所有集群的运维管理权限时,建议使用系统策略进行快捷授权。为RAM用户添加系统策略权限,请参见为RAM用户授权。容器服务的常用系统策略如下表所示,您可以根据业务需求添加对应的系统策略。
角色名称 | 角色说明 |
---|---|
AliyunCSFullAccess | 当RAM用户需要管理容器服务时的所有权限。 |
AliyunVPCReadOnlyAccess | 当RAM用户在创建集群时选择指定VPC。 |
AliyunECSReadOnlyAccess | 当RAM用户为集群添加已有节点或查看节点详细信息。 |
AliyunContainerRegistryFullAccess | 当RAM用户需要全局管理阿里云账号内的业务镜像。 |
AliyunLogReadOnlyAccess | 当RAM用户在创建集群时选择已有Log Project存储审计日志,或查看指定集群的配置巡检。 |
AliyunAHASReadOnlyAccess | 当RAM用户需要使用集群拓扑功能。 |
AliyunRAMFullAccess | 当RAM用户需要负责阿里云账号内的全局授权管理。 |
AliyunYundunSASReadOnlyAccess | 当RAM用户需要查看指定集群的运行时安全监控。 |
AliyunARMSReadOnlyAccess | 当RAM用户需要查看集群阿里云Prometheus插件的监控状态。 |
AliyunKMSReadOnlyAccess | 当RAM用户在创建Pro集群时启用Secret落盘加密能力。 |
3.RBAC授权 配置子账号RBAC权限
3.1、配置说明
默认情况下子账号(非集群创建者)没有集群内任何K8s资源的访问权限。
- 请先确保目标子账号在RAM管理控制台中至少已被授予指定集群的RAM只读权限。
- 您可以使用容器服务提供的两个预置角色即管理员(拥有集群内全部K8s资源访问权限)和运维人员来对目标子账号进行授权。
- 对于拥有全局权限的管理员子账号,可以在所有集群维度进行一键授权,后续新创建的集群也会自动绑定已经授权的ClusterRole。
- 当运维管理子账号给其他子账号进行RBAC授权时,控制台会过滤其可以授权的集群和命名空间的资源范围,只有当运维管理子账号有指定集群或命名空间的管理员或cluster-admin角色时,才可以给其他子账号进行RBAC授权。
- 支持对多个目标子账号进行批量授权。
- 由于阿里云RAM的安全限制,当您通过容器服务控制台的授权配置涉及到子账号RAM授权的修改时,需要您按照页面上给出的参考策略内容和操作说明,在RAM控制台进行目标子账号的手动授权。
3.2、操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击授权管理。
- 在授权管理页面中的选择子账号页签列表中选择需要授权的子账号,单击管理权限,进入集群RBAC配置页签。
说明 如果您使用子账号授权,请先确保该子账号已完成集群RBAC配置自定义RAM授权策略文档中的RAM授权,同时已被授予集群内RBAC管理员权限或cluster-admin角色。 - 单击集群RBAC配置页面的加号,添加集群或命名空间级别的权限配置,并选择相应的预置角色;也可以单击配置行首的减号删除目标角色,完成后单击下一步。
说明 当前针对子账号的授权,支持在一个目标集群或命名空间上授予一个预置角色和多个自定义角色。集群和命名空间的预置角色定义可查看下面的角色权限说明:表 1. 角色权限说明
角色 | 集群内RBAC权限 |
---|---|
管理员 | 对所有命名空间下所有资源的读写权限。 |
运维人员 | 对所有命名空间下控制台可见Kubernetes资源的读写权限,对集群节点,存储卷,命名空间,配额的只读权限。 |
开发人员 | 对所有命名空间或所选命名空间下控制台可见Kubernetes资源的读写权限。 |
受限用户 | 对所有命名空间或所选命名空间下控制台可见Kubernetes资源的只读权限。 |
自定义 | 权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免子账号获得不符合预期的权限。详情请参见容器服务自定义 RAM 授权策略<br/>。 |
在授权提交页签,如果出现授权成功,表示该子账号之前已被授予RAM权限,此时也已完成RBAC授权,操作结束。如果出现如图 1所示,表示该子账号未被授予RAM权限,请按照页面提示,通过RAM控制台对子账号授予指定集群的只读权限。
- 在授权提交页面,单击复制后,再单击策略管理。图 1. 授权管理
- 跳转到RAM控制台页面,选择权限管理 > 权限策略管理,单击创建权限策略。
- 进入新建自定义权限策略页面,自定义策略名称,配置模式选择脚本配置,使用Ctrl+V,将步骤5.a复制的内容粘贴到策略内容中,单击确定。详细的操作请参见自定义RAM授权策略。
- 选择人员管理 > 用户,在需要授权的用户的右侧,单击添加权限。
- 在弹出的添加权限页面,设置授权范围,设置权限为自定义策略,搜索或者在下表中找到自定义的策略名称,单击策略名称,移动到右侧已选择区域。单击确定,完成对子账号在指定集群的只读能力的授权。
- 此时,返回容器服务控制台,在授权提交页面,单击授权提交,完成子账号RBAC的授权。
- 在授权提交页面,单击复制后,再单击策略管理。图 1. 授权管理
- 配置完成后,您可以使用目标子账号登录容器服务控制台,并进行相关操作。
3.网络管理
1.网络概述
阿里云容器服务Kubernetes版ACK集成Kubernetes网络、阿里云VPC、阿里云SLB,提供稳定高性能的容器网络。本文介绍ACK集群网络及阿里云网络底层基础设施的重要概念,如容器网络CNI、Service、Ingress、提供服务发现能力的DNS等。您可以通过了解这些概念,更合理地设计应用部署模型和网络访问的方式。
2.容器网络CNI
容器化应用会在同一个节点上部署多个业务,而每个业务都需要自己的网络空间。为避免与其他业务网络冲突,需要Pod有自己独立的网络空间,而Pod中应用需要和其他网络进行通信,就需要Pod能够跟不同的网络互相访问。可见容器网络特点如下:
- 每个Pod都拥有自己独立的网络空间和IP地址。不同Pod的应用可以监听同样的端口而不冲突。
Pod可以通过各自的IP地址互相访问。集群中Pod可以通过它独立的IP地址与其他应用互通:
- 同一个集群中,Pod之间相互访问。
- Pod直接访问同一个VPC下的ECS。
- 同一个VPC下的ECS直接访问Pod。
在ACK中,您可以通过两种网络模型实现上述容器网络的能力,分别是Flannel网络模式和Terway网络模式。这两种网络模式采用不同的网络模型
3.Terway网络模式
Terway网络模式采用的是云原生的网络方案,直接基于阿里云的虚拟化网络中的弹性网卡资源来构建的容器网络。Pod会通过弹性网卡资源直接分配VPC中的IP地址,而不需要额外指定虚拟Pod网段。
Terway网络模式的特点是:
- 容器和虚拟机在同一层网络,便于业务云原生化迁移。
- 不依赖封包或者路由表,分配给容器的网络设备本身可以用来通信。
- 集群节点规模不受路由表或者封包的FDB转发表等配额限制。
- 不需要额外为容器规划Overlay的网段,多个集群容器之间只要设置安全组开发端口就可以互相通信。
- 可以直接把容器挂到LoadBalancer后端,无需在节点上端口再做一层转发。
- NAT网关可以对容器做SNAT,无需节点上对容器网段做SNAT:容器访问VPC内资源,所带的源IP都是容器IP,便于审计;容器访问外部网络不依赖conntrack SNAT,降低失败率。
- Terway网络模式支持通过网络策略(NetworkPolicy)配置Pod间网络访问的规则。
网络策略(NetworkPolicy)是一种关于Pod间及Pod与其他网络端点间所允许的通信规则的规范。NetworkPolicy资源使用标签选择Pod,并定义选定Pod所允许的通信规则。更多信息,请参见相关文档中的_使用网络策略Network Policy_ - 在使用Alibaba Cloud Linux 2系统作为节点的操作系统时,Terway网络模式支持使用更高效的IPvlan+eBPF链路,加速容器网络性能。
4.Flannel网络模式
Flannel网络模式中Pod的网段独立于VPC的网段。Pod网段会按照掩码均匀划分给每个集群中的节点,每个节点上的Pod会从节点上划分的网段中分配IP地址。Terway网络基于阿里云VPC的自定义路由能力,来实现跨节点的Pod直接与VPC的互相访问。
Flannel网络模式的特点是:
- 基于阿里云VPC的Flannel网络无封包,相对默认的Flannel VXLAN性能提升20%。
- Pod网段是独立于VPC的虚拟网段。
- 每个节点需要对应一个VPC的路由表条目,一个VPC下面Kubernetes节点数受限于VPC路由表的配额。关于VPC配额管理的详情,请参见相关文档中的_管理配额_。
4.创建Kubernetes托管版集群
Kubernetes托管版集群只需创建Worker节点,Master节点由阿里云容器服务创建并托管,从而您可以更多关注业务本身。本文介绍如何通过容器服务控制台创建Kubernetes托管版集群。
前提条件
说明
您在使用集群过程中,请注意以下限制:
- 用户账户需有100元的余额并通过实名认证,否则无法创建按量付费的ECS实例和负载均衡。
- 随集群一同创建的负载均衡实例只支持按量(流量)付费的方式。
- Kubernetes集群仅支持专有网络VPC。
每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败。如果您需要提高配额, 请提交工单申请。
- 每个账号默认最多可以创建50个集群(所有地域下),每个集群中最多可以添加100个节点。如果您需要创建更多的集群或者节点,请提交工单申请。
说明 Kubernetes集群中,VPC默认路由条目不超过48条,意味着Kubernetes集群使用VPC时,默认路由条目上限是48个,如果需要更大的路由条目数,您需要先对目标VPC提交工单,申请提高配额。 - 每个账号默认最多可以创建100个安全组。
- 每个账号默认最多可以创建60个按量付费的负载均衡实例。
- 每个账号默认最多可以创建20个EIP。
- 每个账号默认最多可以创建50个集群(所有地域下),每个集群中最多可以添加100个节点。如果您需要创建更多的集群或者节点,请提交工单申请。
- ECS实例使用限制:支持创建按量付费和包年包月的ECS实例。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击页面右上角的创建集群。
在ACK托管版页面,完成集群配置。
- 完成集群基础选项配置。
配置项 | 描述 |
---|---|
集群名称 | 填写集群的名称。<br/><br/>说明 集群名称应包含1~63个字符,可包含数字、汉字、英文字符或短划线(-)。 |
集群规格 | 选择集群规格,支持标准版和Pro版。<br/>选中标准版创建标准托管集群。 |
地域 | 选择集群所在的地域。 |
资源组 | 将鼠标悬浮于页面上方的账号全部资源,选择集群所在的资源组。这里显示选择的资源组。![]() |
时区 | 选择集群所要使用的时区。默认时区为浏览器所配置的时区。 |
Kubernetes版本 | 显示当前ACK支持的Kubernetes版本。 |
容器运行时 | 支持Containerd、Docker和安全沙箱。更多信息,请参见如何选择Docker运行时、Containerd运行时、或者安全沙箱运行时?。<br/><br/>说明 Containerd运行时目前在公测阶段,如您需使用请提交工单开放Containerd运行时白名单。 |
专有网络 | 设置集群的网络,您可以选择普通VPC和共享VPC。<br/>+ 共享VPC:VPC的所有者账号(资源所有者)可以将其账号下的VPC内的交换机资源共享给其组织内的其他账号使用。<br/>+ 普通VPC:不具备共享功能的VPC。<br/><br/>说明 Kubernetes集群仅支持专有网络。您可以在已有VPC列表中选择所需的VPC。如果没有您需要的专有网络,可以通过单击创建专有网络进行创建,请参见使用专有网络。 |
虚拟交换机 | 设置虚拟交换机。<br/>您可以在已有虚拟交换机列表中,根据可用区选择1~3个交换机。如果没有您需要的交换机,可以通过单击创建虚拟交换机进行创建,请参见使用交换机。 |
网络插件 | 设置启用的网络插件和插件配置,支持Flannel和Terway网络插件,具体请参见Flannel与Terway对比。<br/>+ Flannel:简单稳定的社区的Flannel CNI插件。但功能偏简单,支持的特性少,例如:不支持基于Kubernetes标准的Network Policy。<br/>+ Terway:阿里云容器服务自研的网络插件,将阿里云的弹性网卡分配给容器,支持Kubernetes的Network Policy来定义容器间的访问策略,支持对单个容器做带宽的限流。说明<br/>+ 在Terway模式下,节点上可以运行的Pod数均受节点的弹性网卡和辅助IP的配额限制。<br/>+ 当专有网络选择共享VPC时,网络插件仅支持Terway。<br/>+ 网络插件选择Terway时,会使用弹性网卡的辅助IP分配给Pod,一个Pod占用一个弹性网卡辅助IP地址。 |
Terway模式 | 设置网络插件为Terway时,需要配置Terway模式:<br/>+ 设置是否选中Pod独占弹性网卡以获得最佳性能<br/>+ 如果选中,Pod将独占一个专有的弹性网卡。<br/>+ 如果不选中,使用弹性网卡的辅助IP分配给Pod,一个Pod占用一个弹性网卡辅助IP地址。<br/>+ 设置是否选中IPvlan<br/>+ 只在弹性网卡共享模式支持选中。<br/>+ 如果选中,采用IPVLAN eBPF作为网卡共享模式虚拟化技术,并且只能使用Alibaba Cloud Linux 2系统,性能优于默认模式。<br/>+ 如果不选中,则使用默认模式,采用策略路由作为网卡共享模式虚拟化技术,同时兼容Centos 7和Alibaba Cloud Linux 2的系统。<br/>+ 说明 当前只有白名单用户可使用上述Pod独占弹性网卡以获得最佳性能功能。提交工单申请使用。<br/>+ 设置是否选中NetworkPolicy支持<br/>+ 只在弹性网卡共享模式下支持选中,默认不选中。<br/>+ 如果选中,集群支持使用Kubernetes的NetworkPolicy策略对Pod进行网络控制。<br/>+ 如果不选中,集群将不会支持使用Kubernetes的NetworkPolicy策略对Pod进行网络控制,这样将不存在网络策略对Kubernetes的API Server产生过大的负载。 |
Pod虚拟交换机 | 网络插件选择Terway时,您需要为Pod分配IP的虚拟交换机。每个Pod虚拟交换机分别对应一个Worker实例的虚拟交换机。 |
Pod网络CIDR | 网络插件选择Flannel时,需要配置Pod网络CIDR。<br/>Pod网络CIDR指定Flannel网络插件需要配置Pod网络CIDR,网段不能和VPC及VPC已有Kubernetes集群使用的网段重复,创建成功后不能修改。而且Service地址段不能和Pod地址段重复,有关Kubernetes网络地址段规划的信息,请参见Kubernetes集群网络规划。 |
Service CIDR | 设置Service CIDR。您需要指定Service CIDR,网段不能与VPC及VPC内已有Kubernetes集群使用的网段重复,创建成功后不能修改。而且Service地址段也不能和Pod地址段重复,有关Kubernetes网络地址段规划的信息,请参见Kubernetes集群网络规划。 |
节点IP数量 | 如果您选择的网络模式为Flannel,您需设置节点IP数量。<br/><br/>说明 节点IP数量是指可分配给一个节点的IP数量,建议保持默认值。 |
配置SNAT | 创建集群时,默认不开通公网。如果您选择的VPC不具备公网访问能力,选中为专有网络配置SNAT后,ACK将为您创建NAT网关并自动配置SNAT规则。 |
API Server访问 | ACK默认为API Server创建一个内网SLB实例,您可修改SLB实例规格。更多信息,请参见实例规格。<br/><br/>注意 删除默认创建的SLB实例将会导致无法访问API Server。<br/>您可设置是否开放使用EIP暴露API Server。API Server提供了各类资源对象(Pod,Service等)的增删改查及Watch等HTTP Rest接口。<br/>+ 如果选择开放,ACK会创建一个EIP,并挂载到公网SLB上。此时,Master节点的6443端口(对应API Server)暴露出来,您可以在外网通过kubeconfig连接并操作集群。<br/>+ 如果选择不开放,则不会创建EIP,您只能在VPC内部用kubeconfig连接并操作集群。 |
RDS白名单 | 设置RDS白名单。将节点IP添加到RDS实例的白名单中。<br/><br/>说明 允许白名单RDS访问Kubernetes集群,RDS必须在当前集群的VPC内。 |
安全组 | 支持选择自动创建普通安全组、自动创建企业级安全组、选择已有安全组。有关安全组的详细内容,请参见安全组概述。 |
1.
2. 完成集群高级选项配置。
配置项 | 描述 |
---|---|
kube-proxy代理模式 | 支持iptables和IPVS两种模式。<br/>+ iptables:成熟稳定的kube-proxy代理模式,Kubernetes service的服务发现和负载均衡使用iptables规则配置,但性能一般,受规模影响较大,适用于集群存在少量的Service。<br/>+ IPVS:高性能的kube-proxy代理模式,Kubernetes service的服务发现和负载均衡使用Linux ipvs模块进行配置,适用于集群存在大量的service,对负载均衡有高性能要求的场景。 |
标签 | 为集群绑定标签。输入键和对应的值,单击添加。<br/><br/>说明<br/>+ 键是必需的,而值是可选的,可以不填写。<br/>+ 键不能是aliyun、http://、https://开头的字符串,不区分大小写,最多64个字符。<br/>+ 值不能是http:// 或https://,可以为空,不区分大小写,最多128个字符。<br/>+ 同一个资源,标签键不能重复,相同标签键(Key)的标签会被覆盖。<br/>+ 如果一个资源已经绑定了20个标签,已有标签和新建标签会失效,您需要解绑部分标签后才能再绑定新的标签。 |
集群本地域名 | 设置是否配置集群本地域名。<br/><br/>说明 默认域名为cluster.local,可自定义域名。域名由两段组成,每段不超过63个字符,且只能使用大小写字母和数字,不能为空。 |
自定义证书SAN | 在集群API Server服务端证书的SAN(Subject Alternative Name)字段中添加自定义的IP或域名,以实现对客户端的访问控制。 |
服务账户令牌卷投影 | 开启服务账户令牌卷投影功能以降低在Pod中使用Service Account遇到的安全性问题,可使得kubelet支持基于Pod粒度的Token签发,并且支持Token audience和过期时间的配置。详情请参见部署服务账户令牌卷投影 |
集群删除保护 | 设置是否启用集群删除保护。为防止通过控制台或API误释放集群。 |
1.
单击下一步:Worker配置,完成Worker节点配置。
选择Worker实例。
- 如果您选择新增实例,需要进行以下配置。
配置项 | 描述 |
---|---|
付费类型 | 容器服务Kubernetes版支持按量付费和包年包月两种节点付费类型。选择包年包月时,需设置以下参数。<br/>+ 购买时长:目前支持选择1、2、3、6个月和1~5年。<br/>+ 自动续费:设置是否自动续费。 |
实例规格 | 支持选择多个实例规格。详情请参见实例规格族。 |
已选规格 | 呈现选中的规格。 |
数量 | 新增Worker实例(ECS实例)的数量。<br/><br/>说明 建议创建时最少选择两台,创建好之后,可以根据您的实际情况加减节点。节点太少,或者规格太低,会影响集群组件的运行。 |
系统盘 | 支持ESSD云盘、SSD云盘和高效云盘。<br/><br/>说明<br/>+ 支持选中开启云盘备份以备份云盘数据。<br/>+ ESSD云盘支持自定义性能级别。ESSD云盘容量越大,可供选择的性能级别越高(460 GiB容量以上可选PL2,1260 GiB以上可选PL3)。更多信息,请参见容量范围与性能级别的关系。 |
挂载数据盘 | 支持ESSD云盘、SSD云盘和高效云盘。挂载数据盘时,支持云盘加密和开启云盘备份。 |
操作系统 | ACK支持的节点操作系统包括:<br/>+ Alibaba Cloud Linux 2(ACK默认的操作系统)您可以选中等保加固对Alibaba Cloud Linux 2操作系统进行等保加固。 注意 等保加固在保障原生镜像兼容性和性能的基础上进行了等保合规适配,使其满足国家信息安全部发布的《GB/T22239-2019信息安全技术网络安全等级保护基本要求》。 等保加固会禁止Root用户通过SSH远程登录。您可通过ECS控制台使用VNC方式登录系统创建可使用SSH的普通用户。具体操作,请参见通过密码认证登录Linux实例。 关于等保加固的详细信息,请参见ACK等保加固使用说明。<br/>+ CentOS 7.x 说明 暂不支持CentOS 8.x及以上的操作系统。 |
登录方式 | + 设置密钥。<br/>+ 密钥对:如您已经创建密钥对,在下拉列表中选择目标密钥对。<br/>+ 新建密钥对:此项用于您还未创建密钥对。创建密钥对,请参见创建SSH密钥对。密钥对创建完毕后,设置该密钥对作为登录集群的凭据。<br/>+ 设置密码。<br/>+ 登录密码:设置节点的登录密码。<br/>+ 确认密码:确认设置的节点登录密码。 |
* 如果您选择**添加已有实例**,则需要预先在此地域下创建ECS云服务器,然后配置**操作系统**、**登录方式**和**密钥对**,配置描述请参见上文。
1. 设置高级选项。
配置项 | 描述 |
---|---|
实例保护 | 设置是否启用实例保护。<br/><br/>说明 为防止通过控制台或API误释放集群节点,默认启用实例保护。 |
实例自定义数据 | 请参见生成实例自定义数据。 |
自定义镜像 | 允许您选择一个自定义ECS镜像。选择自定义镜像后,集群所有节点将基于此镜像进行部署 。有关创建自定义镜像操作,请参见使用自定义镜像创建Kubernetes集群。<br/><br/>说明<br/>+ 目前自定义镜像的操作系统仅支持CentOS 7.x和Alibaba Cloud Linux 2.x。<br/>+ 当前只有白名单用户可使用该功能。提交工单申请使用。 |
自定义节点名称 | 是否开启自定义节点名称。<br/>节点名称由前缀,节点IP地址子串及后缀三部分组成:<br/>+ 前缀和后缀均可由.分隔的一个或多个部分构成,每个部分可以使用小写字母、数字和短划线(-),且首尾必须为小写字母和数字。<br/>+ IP地址段长度指截取节点IP地址末尾的位数,取值范围5~12。<br/>例如:节点IP地址为192.1xx.x.xx,指定前缀为aliyun.com,IP地址段长度为5,后缀为test,则节点名称为aliyun.com00055test。 |
CPU Policy | 设置CPU policy。<br/>+ none:默认策略,表示启用现有的默认CPU亲和方案。<br/>+ static:允许为节点上具有某些资源特征的Pod赋予增强的CPU亲和性和独占性。 |
污点(Taints) | 为集群内所有Worker节点添加污点。 |
1.
- 单击下一步:组件配置,完成组件配置。
配置项 | 描述 |
---|---|
Ingress | 设置是否安装Ingress组件。默认选中安装Ingress组件,请参见Ingress高级用法。 |
存储插件 | 设置存储插件,支持Flexvolume和CSI。Kubernetes集群通过Pod可自动绑定阿里云云盘、NAS、OSS存储服务。请参见存储管理-Flexvolume和存储管理-CSI。 |
监控插件 | 设置是否启用云监控插件。默认选中在ECS节点上安装云监控插件和使用Prometheus监控服务,前者用于在云监控控制台查看所创建ECS实例的监控信息。 |
日志服务 | 设置是否启用日志服务,您可使用已有Project或新建一个Project。默认选中使用日志服务。创建应用时,您可通过简单配置,快速使用日志服务,详情参见通过日志服务采集Kubernetes容器日志。<br/>您可以设置是否选中收集控制平面组件日志,该功能从ACK控制层收集托管集群控制平面组件日志到您账号中的SLS日志服务的Log Project中。更多信息,请参见收集托管集群控制平面组件日志。<br/><br/>说明 ACK Pro托管集群默认选中收集控制平面组件日志。<br/>默认选中安装node-problem-detector并创建事件中心。您可以选择是否在日志服务控制台中创建Ingress Dashboard。 |
工作流引擎 | 设置是否使用AGS。<br/>+ 如果选中AGS,则创建集群时系统自动安装AGS工作流插件。<br/>+ 如果不选中,则需要手动安装AGS工作流插件,请参见AGS命令行帮助。 |
- 单击下一步:确认配置。
- 选中服务协议并单击创建集群。
说明 一个包含多节点的Kubernetes集群的创建时间一般约为十分钟。
执行结果
- 集群创建成功后,您可以在容器服务管理控制台的集群列表页面查看所创建的集群。
- 您可以单击操作列的查看日志,进入集群日志信息页面查看集群的日志信息。您也可以在集群日志信息页面中,单击资源栈事件查看更详细的信息。
在集群列表页面中,找到刚创建的集群,单击操作列中的详情,单击基本信息和连接信息页签,查看集群的基本信息和连接信息。其中:
API Server公网连接端点:Kubernetes的API Server对公网提供服务的地址和端口,可以通过此服务在用户终端使用kubectl等工具管理集群。绑定EIP和解绑EIP功能仅支持托管版Kubernetes集群。
- 绑定EIP:您可以选择在已有EIP列表中绑定EIP或者新建EIP。绑定EIP操作为导致API Server短暂重启,请避免在此期间操作集群。
- 解绑EIP:解绑EIP后您将无法通过公网访问API Server。解绑EIP操作会导致API Server短暂重启,请避免在此期间操作集群。
- API Service内网连接端点:Kubernetes的API server对集群内部提供服务的地址和端口,此IP为负载均衡的地址。
- 测试域名:为集群中的服务提供测试用的访问域名。服务访问域名后缀是
<cluster_id>.<region_id>.alicontainer.com
。
说明 单击重新绑定域名,您可以重新绑定访问域名。
- 您可以通过kubectl连接Kubernetes集群,执行
kubectl get node
查看集群的节点信息。
5.节点管理
1.查看节点
您可以通过命令或者容器服务管理控制台查看Kubernetes集群的节点列表。
在集群管理页左侧导航栏中,选择节点管理 > 节点。
通过kubectl连接到Kubernetes集群后,运行以下命令查看集群中的节点。
kubectl get nodes
2.添加已有节点
可以通过ACK控制台将已有的ECS实例添加到已创建的Kubernetes集群中,目前仅支持添加Worker节点。本文介绍自动添加节点和手动添加节点两种方式。
前提条件
- 创建Kubernetes托管版集群。
- 您需要将待添加的ECS实例添加到Kubernetes集群自动创建的Worker节点安全组里。
说明
您使用集群前,请注意以下限制:
- 默认情况下,每个集群中最多可包含100个节点。如果您需要添加更多节点,请提交工单。
- 添加的云服务器必须与集群在同一地域同一VPC下。
- 添加已有云服务器时,请确保您的云服务器有EIP (专有网络),或者相应VPC已经配置了NAT网关。总之,需要确保相应节点能正常访问公网,否则,添加云服务器会失败。
- ACK仅支持添加同一账号下云服务器。
ACK支持添加以下操作系统的节点:
- Alibaba Cloud Linux 2
- CentOS 7.x(暂不支持CentOS 8.x及以上的操作系统)
- Windows Server 2009和Windows Server 2009 Core
自动添加节点
自动添加节点方式会列出当前账号下可用的ECS云服务器,在Web界面进行安装部署,并自动添加到集群。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
支持以下3种方式进入添加现有云服务器页面。
通过更多进入添加现有云服务器页面。
- 在集群列表页面中,单击目标集群右侧操作列下的更多。
- 在更多下拉列表中单击添加已有节点。
通过节点池进入添加现有云服务器页面。
- 在集群列表页面中,单击目标集群右侧操作列下的节点池。
- 在节点池页面的操作列下单击添加已有节点。
通过应用管理进入添加现有云服务器页面。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的应用管理。
- 在集群管理页左侧导航栏中,单击节点管理。
- 在节点管理页面中,单击添加已有节点。
- 完成选择已有云服务器实例。选择添加方式为自动添加,在已有云服务器的列表中,选择所需的ECS云服务器。
- 单击下一步,完成填写实例信息。
配置项 | 参数 |
---|---|
容器运行时 | 选择为节点配置的容器运行时,如Docker、安全沙箱容器等。 |
系统镜像 | 选择节点使用的操作系统类型版本。 |
自定义镜像 | 选择自定义镜像时,将取代默认系统镜像。 |
数据盘挂载 | 设置是否将容器和镜像存储在数据盘。<br/>+ 如果ECS已挂载数据盘,且最后一块数据盘的文件系统未初始化,系统会自动将该数据盘格式化为ext4,用来存放内容/var/lib/docker、/var/lib/kubelet。 说明 数据盘内原有数据将丢失,请注意备份数据。<br/>+ 如果ECS未挂载数据盘,则不会挂载新的数据盘。 |
CPU Policy | 设置CPU Policy。<br/>+ none:默认策略,表示启用现有的默认CPU亲和方案。<br/>+ static:允许为节点上具有某些资源特征的Pod赋予增强的CPU亲和性和独占性。 |
登录方式 | + 设置密钥设置密钥对作为登录节点的凭证。<br/>+ 设置密码设置节点的登录密码和确认密码。 |
RDS白名单 | 选择想要添加白名单的RDS实例。 |
标签 | 为集群绑定标签。输入键和对应的值,单击添加。<br/><br/>说明<br/>+ 键是必需的,而值是可选的,可以不填写。<br/>+ 键不能是aliyun、http:// 、https://开头的字符串,不区分大小写,最多64个字符。<br/>+ 值不能是http://或https://,可以为空,不区分大小写,最多128个字符。<br/>+ 同一个资源,标签键不能重复,相同标签键(Key)的标签会被覆盖。<br/>+ 如果一个资源已经绑定了20个标签,已有标签和新建标签会失效,您需要解绑部分标签后才能再绑定新的标签。 |
保留实例名称 | 添加节点时,默认开启保留实例名称。如果您不需要保留实例名称,您可以关闭保留实例名称,此时会按照自定义节点名称指定的规则来重命名节点。 |
实例自定义数据 | 请参见生成实例自定义数据<br/>。 |
- 单击下一步,在弹出的窗口中单击确定。
4.监控节点
kubernetes集群与阿里云监控服务无缝集成,您可以查看kubernetes节点的监控信息,了解Kubernetes集群下ECS实例的节点监控指标。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击节点管理。
- 在节点列表页面中,单击目标节点右侧的监控。
- 进入云监控管理控制台,在主机监控页面单击基础监控,查看对应ECS实例的基本监控信息,包括CPU使用率、公网流入带宽、公网流出带宽、磁盘平均BPS、磁盘平均IOPS等指标。
后续步骤
- 查看关于操作系统级别的监控指标,需要安装云监控组件。参见主机监控概览。
- 查看关于进程级别的监控指标,需要安装云监控组件。参见进程监控。
- Kubernetes集群新增了关于应用分组的监控功能,您可以参见基础资源监控进行升级。
5.设置节点调度
您可以通过Web界面设置节点调度,从而合理分配各节点的负载。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击节点管理。
- 在节点管理页面,选择需要维护的节点,单击节点维护。
在节点维护对话框中,进行调度设置。
- 选择设置为不可调度,您在后续进行应用部署时,Pod不会再调度到该节点。
- 选择排空节点(同时设置为不可调度),您在后续进行应用部署时,则Pod不会再调度到该节点,并且该节点上由DaemonSet控制的Pod不会被排空。
- 单击确定。可以看到节点的调度状态发生变化。
后续步骤
如果您需要将不可调度的节点重新上线,您可以单击节点上线,在弹出的对话框中,单击确定,此时该节点状态又变成可调度。
6.查看节点资源请求量和使用量
通过容器服务控制台,您可查看Kubernetes集群各节点资源占用情况。
前提条件
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏中,单击节点管理。在节点管理页面中,您可以查看各个节点CPU和内存的资源使用情况,即请求量和使用量,其计算方式如下:
- CPU请求量 = sum(当前节点所有Pod的CPU request值)/ 当前节点CPU总量。
- CPU使用量 = sum(当前节点所有Pod的CPU实际使用量)/ 当前节点CPU总量。
- 内存请求量= sum(当前节点所有Pod的内存request值)/ 当前节点内存总量。
- 内存使用量 = sum(当前节点所有Pod的内存实际使用量)/ 当前节点内存总量。
7.为容器服务的Docker增加数据盘
本文介绍如何为Docker数据目录挂载数据盘。挂载数据盘可以扩容Docker数据目录,从而当在机器上运行的容器或者镜像数量不断增加时,保证有足够的磁盘空间可以满足使用需求。
Docker 数据目录
Docker的数据通过联合文件系统的方式存储到磁盘上。Docker默认的容器和镜像数据存储在/var/lib/docker目录下。您可以通过du命令查看这个目录目前占用的磁盘大小。
# du -h --max-depth=0 /var/lib/docker 7.9G /var/lib/docker
更换Docker的数据盘
很多Docker镜像较大,因此可能几个镜像就会占用大量磁盘空间。较大的镜像或较多的容器,都会导致磁盘空间的不足。为了满足您增加镜像或容器的需求,您需要为Docker的数据目录增加数据盘。
增加数据盘
完成以下步骤,为Docker的数据目录增加数据盘:
创建ECS数据盘,并挂载到需要扩容的机器上。请参见创建云盘。
- 通过云服务器 ECS 控制台创建需要配置的云盘。
- 单击左侧导航栏中的实例。
- 单击目标ECS实例ID,进入实例详情页。
- 单击左侧导航栏中的本实例云盘。
- 单击右上角的挂载云盘。
- 在弹出的对话框中,选择创建的磁盘作为目标磁盘。单击确定。
- 单击执行挂载,挂载新磁盘到目标ECS实例,并记录挂载点
/dev/xvd*
或者/dev/vd*
。
登录ECS实例,对刚才挂载的磁盘进行格式化。
移动Docker数据到新的磁盘。如果不希望中断节点上正在运行的应用,您需要对应用进行迁移。迁移swarm集群,请参见指定多节点调度。迁移Kubernetes集群,请参见Safely Drain a Node while Respecting Application SLOs。
- 停止Docker Daemon和kubelet,保证迁移时的数据完整。可以使用service kubelet stop和service docker stop命令进行停止。
- 移动Docker的目录到一个备份的目录。例如:mv /var/lib/docker /var/lib/docker_data。
- 然后把新的格式化好的磁盘挂载到/var/lib/docker和/var/lib/kubelet目录。例如:
echo "/dev/xvdb1 /var/lib/container/ ext4 defaults 0 0" >>/etc/fstab echo "/var/lib/container/kubelet /var/lib/kubelet none defaults,bind 0 0" >>/etc/fstab echo "/var/lib/container/docker /var/lib/docker none defaults,bind 0 0" >>/etc/fstab mkdir /var/lib/docker mount -a
1. 把之前备份的Docker数据移动到新的磁盘上。例如:**mv /var/lib/docker_data/* /var/lib/docker/**。
启动Docker Daemon和kubelet,并检查数据位置。
- 您可以通过调度的方式使被迁移走的容器回归到这个节点上来。更多容器服务的相关内容,请参见容器服务。
8.一键采集诊断日志
您可以通过容器服务Kubernetes版控制台同时诊断多个节点并采集相关日志信息。本文介绍如何一键采集被诊断节点的日志。
前提条件
授权将日志采集到OSS
如果您希望将诊断日志采集到OSS中,需要给节点授权,向OSS指定目录写入数据。操作步骤如下。
- 云账号登录RAM控制台。
- 在左侧导航栏的权限管理菜单下,单击权限策略管理。
- 在权限策略名称列表下,单击目标权限策略名称。
说明 RAM支持两种权限策略,其中系统策略只能查看不能修改,自定义策略可以创建、查看和修改。 - 在策略内容页签下,单击修改策略内容。
- 在修改策略内容面板中增加以下授权规则,并填入您的Bucket名称和存放目录。
{ "Action": [ "oss:GetBucket", "oss:PutObject", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:<bucket名称>/<存放诊断日志的目录>/*" ], "Effect": "Allow" }, { "Action": [ "oss:GetBucketInfo" ], "Resource": [ "acs:oss:*:*:<bucket名称>" ], "Effect": "Allow" }
- 单击确定。
选择节点进行诊断
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择节点管理 > 节点。
- 在控制台左侧导航栏,选择集群 > 节点。
- 在节点页面,选择需要被诊断的节点,然后单击节点诊断。
在节点诊断对话框中,执行以下操作。
选中上传到OSS,然后执行以下操作。您可以将采集日志上传到OSS Bucket中。进行此步骤前,需要授权角色将日志采集到OSS,请参见授权将日志采集到OSS。
- 填写OSS Bucket的名称和目录。例如,希望在myBucket的/acs/diagnose目录中上传诊断日志,您可以填入myBucket/acs/diagnose。
- 设置是否选中共享诊断日志。如果选中系统会为诊断日志生成一个临时链接,您可以直接下载链接,也可以将链接共享给ACK支持团队协助诊断。
- 单击确定。完成上述操作后,您可以在控制台获取云助手任务ID, 根据此ID在ECS云助手控制台查看诊断脚本的执行日志。
- 在节点诊断对话框,单击在云助手控制台查看诊断脚本执行日志链接。
- 在云助手页面,单击命令执行结果页签。
- 找到目标命令执行ID,然后在其右侧单击查看。您可以在OSS控制台中对应的目录查看采集的诊断文件。
- 填写OSS Bucket的名称和目录。例如,希望在myBucket的/acs/diagnose目录中上传诊断日志,您可以填入myBucket/acs/diagnose。
- 不选中上传到OSS,然后单击确认。如果不选中上传到OSS,您无需授权角色将日志采集到OSS。您可登录ECS控制台,选择运维与监控 > 发送命令/文件(云助手) > 命令执行结果,查看相关诊断日志文件。
6.应用管理
1.创建无状态应用
您可以使用镜像创建一个无状态应用。本文以Nginx为例说明如何通过镜像来创建无状态应用。
步骤一:配置应用基本信息
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 无状态。
- 在无状态页面中,单击使用镜像创建。
- 在应用基本信息页签中,设置应用的基本信息。
配置项 | 描述 |
---|---|
应用名称 | 设置应用的名称。 |
副本数量 | 即应用包含的Pod数量,默认数量为2。 |
类型 | 定义资源对象的类型,可选择无状态、有状态、任务、定时、定时任务、守护进程集。 |
标签 | 为该应用添加一个标签,标识该应用。 |
注解 | 为该应用添加一个注解(annotation)。 |
时区同步 | 容器与节点是否使用相同的时区。 |
- 说明 本例中选择无状态类型,即Deployment类型。
- 单击下一步。进入容器配置页面。
步骤二:配置容器
在容器配置页签中,配置容器的镜像与资源、端口、环境变量、健康检查、生命周期、数据卷和日志。
说明 在容器配置页签上方,单击添加容器为应用的Pod设置多个容器。
- 在基本配置区域,完成容器的基本配置。
配置项 | 描述 |
---|---|
镜像名称 | + 您可以单击选择镜像,选择所需的镜像并单击确定。本例中为官方Nginx镜像,可以在搜索页签中,选择Docker镜像,然后在文本框中输入nginx进行搜索。<br/>+ 容器镜像服务:在容器镜像服务页签中,可以选择托管在容器镜像服务ACR中的镜像。需要选择镜像所属地域,以及镜像服务实例。关于ACR的更多信息,请参见容器镜像服务企业版概述。 说明 您可以在容器镜像服务页签,根据名称搜索托管在容器镜像服务ACR中的镜像。<br/>+ Docker官方镜像:在Docker官方镜像页签中,可以选择Docker官方提供的容器镜像。<br/>+ 用户收藏:在用户收藏页签中,可以选择您收藏的Docker官方镜像。<br/>+ 搜索:在搜索页签中,可以分别在ACR的特定地域和Docker官方镜像中搜索容器镜像。<br/>+ 您还可以填写私有镜像。填写的格式为domainname/namespace/imagename:tag 。 |
镜像Tag | + 您可以单击选择镜像Tag选择镜像的版本。若不指定,默认为最新版。<br/>+ ACK支持以下三种镜像拉取策略(imagePullPolicy):<br/>+ 优先使用本地镜像(ifNotPresent):如果本地有该镜像,则使用本地镜像,本地不存在时拉取镜像。<br/>+ 总是拉取镜像(Always):表示每次部署或扩容都会从容器镜像服务重新拉取镜像,而不会从本地拉取镜像。<br/>+ 仅使用本地镜像(Never):仅使用本地镜像。<br/>+ 说明 当您选中镜像拉取策略时,默认不设置镜像拉取策略。<br/>+ 单击设置镜像密钥,您可以实现免密拉取镜像,详情请参见使用免密组件拉取容器镜像。 |
资源限制 | 可指定该应用所能使用的资源上限,包括CPU、内存和ephemeral-storage三种资源,防止占用过多资源。 |
所需资源 | 即为该应用预留资源额度,包括CPU和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。 |
容器启动项 | + stdin:将控制台输入发送到容器。<br/>+ tty:将标准输入控制台作为容器的控制台输入。 |
特权容器 | + 选择特权容器,则privileged=true,开启特权模式。<br/>+ 不选择特权容器,则privileged=false,关闭特权模式。 |
Init Container | 勾选该项,表示创建一个Init Container。Init Container包含一些实用的工具,详情请参见Init Containers<br/>。 |
可选:在端口设置区域,单击新增设置容器的端口。
- 名称:设置容器端口名称。
- 容器端口:设置暴露的容器访问端口或端口名,端口号必须介于1~65535。
- 协议:支持TCP和UDP。
可选:在环境变量区域,单击新增设置环境变量。支持通过键值对的形式为Pod配置环境变量。用于给Pod添加环境标志或传递配置等,详情请参见Pod variable。
可选:在健康检查区域,根据需要开启存活检查和就绪检查。关于健康检查的更多信息,请参见Configure Liveness, Readiness and Startup Probes。
- 存活检查(Liveness):用于检测何时重启容器。
- 就绪检查(Readiness):确定容器是否已经就绪,且可以接受流量。
请求类型 | 配置说明 |
---|---|
HTTP请求 | 即向容器发送一个HTTP Get请求,支持的参数包括:<br/>+ 协议:HTTP/HTTPS。<br/>+ 路径:访问HTTP Server的路径。<br/>+ 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。<br/>+ HTTP头:即HTTP Headers,HTTP请求中自定义的请求头,HTTP允许重复的Header。支持键值对的配置方式。<br/>+ 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为3秒。<br/>+ 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。<br/>+ 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。<br/>+ 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。<br/>+ 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。 |
TCP连接 | 即向容器发送一个TCP Socket,Kubelet将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:<br/>+ 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。<br/>+ 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为15秒。<br/>+ 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。<br/>+ 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。<br/>+ 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。<br/>+ 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。 |
命令行 | 通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:<br/>+ 命令行:用于检测容器健康情况的探测命令。<br/>+ 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为5秒。<br/>+ 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为10秒,最小为1秒。<br/>+ 超时时间(秒):即timeoutSeconds,探测超时时间。默认1秒,最小1秒。<br/>+ 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。<br/>+ 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。 |
可选:在生命周期区域,设置容器的生命周期。您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体参见配置生命周期。
- 启动执行:为容器设置预启动命令和参数。
- 启动后处理:为容器设置启动后的命令。
- 停止前处理:为容器设置预结束命令。
可选:在数据卷区域,增加本地存储或云存储声明PVC(Persistent Volume Claim)。
- 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见volumes。
- 云存储声明(PVC):支持挂载云存储。
- 本例中配置了一个云存储类型的数据卷声明disk-ssd,将其挂载到容器的/tmp路径下。
- 可选:在日志配置区域,进行采集配置和自定义Tag设置。
注意 请确保已部署Kubernetes集群,并且在此集群上已安装日志插件。
配置项 | 描述 |
---|---|
采集配置 | 日志库:即在日志服务中生成一个对应的Logstore,用于存储采集到的日志。 |
容器内日志路径:支持Stdout和文本日志。<br/>+ Stdout:表示采集容器的标准输出日志。<br/>+ 文本日志:表示收集容器内指定路径的日志,本例中表示收集/var/log/nginx下所有的文本日志,也支持通配符的方式。 | |
自定义Tag | 您还可以设置自定义Tag,设置Tag后,会将该Tag一起采集到容器的日志输出中。自定义Tag可帮助您给容器日志打上Tag,方便进行日志统计和过滤等分析操作。 |
- 单击下一步。进入高级配置页面。
步骤三:完成高级配置
在高级配置页签中设置访问、伸缩、调度和标签注解。
在访问设置区域,设置暴露后端Pod的方式。说明针对应用的通信需求,您可灵活进行访问设置:
- 内部应用:对于只在集群内部工作的应用,您可以在创建服务时,根据需要虚拟集群IP或节点端口类型的服务,来进行内部通信。
外部应用:对于需要暴露到公网的应用,您可以采用两种方式进行访问设置。
- 创建负载均衡类型的服务:您可以在创建服务时,选择负载均衡类型的服务。通过阿里云提供的负载均衡服务SLB(Server Load Balancer),使得该服务提供公网访问能力。
- 创建路由(Ingress):通过创建路由(Ingress)提供公网访问能力。关于Ingress的更多信息请参见Ingress。
您可以设置暴露后端Pod的方式。本例中选择虚拟集群IP和路由(Ingress),构建一个公网可访问的Nginx应用。
- 配置服务(Service):在服务(Service)右侧,单击创建设置创建服务配置项。
配置项 | 描述 |
---|---|
名称 | 输入服务的名称。本例为nginx-svc。 |
类型 | 选择服务类型,即服务访问的方式。本例中选择虚拟集群IP。<br/>+ 虚拟集群IP:即ClusterIP,指通过集群的内部IP暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的ServiceType。 说明 您的服务类型为虚拟集群IP时,才能设置实例间发现服务(Headless Service)。<br/>+ 节点端口:即NodePort,通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,该ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort> ,可以从集群的外部访问一个NodePort服务。<br/>+ 负载均衡:即LoadBalancer,指阿里云提供的负载均衡服务(SLB),可选择公网访问或私网访问。阿里云负载均衡服务可以路由到NodePort服务和ClusterIP服务。<br/>+ 新建SLB:您可以通过单击修改,修改SLB规格。<br/>+ 使用已有负载均衡:您可以在已有的列表中选择SLB规格。<br/>+ 说明 负载均衡类型支持新建SLB和使用已有SLB,且多个Kubernetes Service可以复用同一个SLB,但是存在以下限制:<br/>+ 使用已有的负载均衡实例会强制覆盖已有监听。<br/>+ Kubernetes通过Service创建的SLB不能复用(会导致SLB被意外删除)。只能复用您手动在控制台(或调用OpenAPI)创建的SLB。<br/>+ 复用同一个SLB的多个Service不能有相同的前端监听端口,否则会造成端口冲突。<br/>+ 复用SLB时,监听的名字以及虚拟服务器组的名字被Kubernetes作为唯一标识符。请勿修改监听和虚拟服务器组的名字。<br/>+ 不支持跨集群复用SLB。 |
端口映射 | 添加服务端口和容器端口。容器端口需要与后端的Pod中暴露的容器端口一致。 |
外部流量策略 | + Local:流量只发给本机的Pod。<br/>+ Cluster:流量可以转发到其他节点上的Pod。<br/><br/>说明 您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。 |
注解 | 为该服务添加一个注解(annotation),配置负载均衡的参数。例如设置service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20 <br/>表示将该服务的带宽峰值设置为20Mbit/s,从而控制服务的流量。更多参数请参见通过Annotation配置负载均衡<br/>。 |
标签 | 为该服务添加一个标签,标识该服务。 |
- 配置路由(Ingress):在**路由(Ingress)**右侧,单击**创建**设置后端Pod的路由规则。详细的路由配置信息,请参见[路由配置说明](https://help.aliyun.com/document_detail/86535.htm#concept-rmj-1yn-vdb)。
注意 通过镜像创建应用时,您仅能为一个服务创建路由(Ingress)。本例中使用一个虚拟主机名称作为测试域名,您需要在hosts文件中添加一条域名映射(<Ingress外部端点> + <Ingress域名>)。在实际工作场景中,请使用备案域名。
101.37.XX.XX foo.bar.com #即ingress的IP。
配置项 | 描述 |
---|---|
名称 | 输入路由的名称。本例为nginx-ingress。 |
规则 | 路由规则是指授权入站到达集群服务的规则。详情请参见路由配置说明<br/>。<br/>+ 域名:输入Ingress域名。本例中使用测试域名foo.bar.com 。<br/>+ 路径:指定服务访问的URL路径,默认为根路径/,本例中不做配置。每个路径 (path)都关联一个backend(服务),在阿里云SLB将流量转发到backend之前,所有的入站请求都要先匹配域名和路径。<br/>+ 服务:选择服务的名称和对应端口。本例中为nginx-svc.<br/>+ 开启TLS:配置安全的路由服务。具体可参见Ingress高级用法。 |
服务权重 | 设置该路径下多个服务的权重。服务权重采用相对值计算方式,默认值为100。 |
灰度发布策略 | 设置灰度规则后,请求头中满足灰度发布匹配规则的请求才能被路由到新版本服务中。如果该服务设置了100%以下的权重比例,满足灰度规则的请求会继续依据权重比例路由到对应服务。容器服务支持多种流量切分方式,适用于灰度发布以及AB测试场景。<br/>+ 基于Request Header的流量切分<br/>+ 基于Cookie的流量切分<br/>+ 基于Query Param的流量切分<br/><br/>说明 目前阿里云容器服务Kubernetes Ingress Controller需要0.12.0-5及其以上版本才支持流量切分特性。<br/>配置参数如下所示:<br/>+ 服务:路由规则配置的服务。<br/>+ 类型:支持Header(请求头)、Cookie和Query(请求参数)的匹配规则。<br/>+ 名称和匹配值:用户自定义的请求字段,名称和匹配值为键值对。<br/>+ 匹配规则:支持正则匹配和完全匹配。 |
注解 | + 单击重定向注解,可为路由添加一条典型的重定向注解。即nginx.ingress.kubernetes.io/rewrite-target:/ ,表示将/path路径重定向到后端服务能够识别的根路径/上面。<br/>+ 您也可以单击添加按钮,输入注解名称和值,即Ingress的annotation键值对,Ingress的注解参见Annotations。 |
标签 | 为Ingress添加对应的标签,标示该Ingress的特点。 |
- 在访问设置区域,您可以看到创建完毕的服务和路由,您可单击变更和删除进行二次配置。
可选:在伸缩配置区域,配置是否开启指标伸缩和定时伸缩,从而满足应用在不同负载下的需求。
- 容器服务支持容器组的指标伸缩,即根据容器CPU和内存资源占用情况自动调整容器组数量。
说明 若要启用自动伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。
- 容器服务支持容器组的指标伸缩,即根据容器CPU和内存资源占用情况自动调整容器组数量。
配置项 | 描述 |
---|---|
指标 | 支持CPU和内存,需要和设置的所需资源类型相同。 |
触发条件 | 资源使用率的百分比,超过该使用量,容器开始扩容。 |
最大副本数量 | 该应用可扩容的容器数量上限。 |
最小副本数量 | 该应用可缩容的容器数量下限。 |
- 容器服务支持容器组的定时伸缩,即定时地对容器服务Kubernetes集群进行扩缩容。关于定时伸缩的详细说明,请参见[创建定时伸缩CronHPA任务](https://help.aliyun.com/document_detail/151557.htm#section-4nl-xmn-i53)。
- 可选:在调度设置区域,设置升级方式、节点亲和性、应用亲和性和应用非亲和性,详情请参见Affinity and anti-affinity。
说明 亲和性调度依赖节点标签和Pod标签。您可使用内置的标签进行调度;也可预先为节点、Pod配置相关的标签。
配置项 | 描述 |
---|---|
升级方式 | 升级方式包括滚动升级(rollingupdate)和替换升级(recreate),详细请参见详情请参见Deployments。 |
节点亲和性 | 设置节点亲和性,通过Worker节点的Label标签进行设置。<br/>节点调度支持硬约束和软约束(Required和Preferred),以及丰富的匹配表达式(In, NotIn, Exists, DoesNotExist, Gt, and Lt):<br/>+ 必须满足,即硬约束,一定要满足,对应requiredDuringSchedulingIgnoredDuringExecution,效果与NodeSelector 相同。本例中Pod只能调度到具有对应标签的Worker节点。您可以定义多条硬约束规则,但只需满足其中一条。<br/>+ 尽量满足,即软约束,不一定满足,对应preferredDuringSchedulingIgnoredDuringExecution。本例中,调度会尽量调度Pod到具有对应标签的Node节点。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。 |
应用亲和性 | 决定应用的Pod可以和哪些Pod部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。<br/>根据节点上运行的Pod的标签(Label)来进行调度,支持硬约束和软约束,匹配的表达式有:In, NotIn, Exists, DoesNotExist 。<br/>+ 必须满足,即硬约束,一定要满足,对应requiredDuringSchedulingIgnoredDuringExecution,Pod的亲和性调度必须要满足后续定义的约束条件。<br/>+ 命名空间:该策略是依据Pod的Label进行调度,所以会受到命名空间的约束。<br/>+ 拓扑域:即topologyKey,指定调度时作用域,这是通过Node节点的标签来实现的,例如指定为kubernetes.io/hostname ,那就是以Node节点为区分范围;如果指定为beta.kubernetes.io/os ,则以Node节点的操作系统类型来区分。<br/>+ 选择器:单击选择器右侧的加号按钮,您可添加多条硬约束规则。<br/>+ 查看应用列表:单击应用列表,弹出对话框,您可在此查看各命名空间下的应用,并可将应用的标签导入到亲和性配置页面。<br/>+ 硬约束条件:设置已有应用的标签、操作符和标签值。本例中,表示将待创建的应用调度到该主机上,该主机运行的已有应用具有app:nginx 标签。<br/>+ 尽量满足,即软约束,不一定满足,对应preferredDuringSchedulingIgnoredDuringExecution。Pod的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。 说明 权重:设置一条软约束规则的权重,介于1~100,通过算法计算满足软约束规则的节点的权重,将Pod调度到权重最大的节点上。 |
应用非亲和性 | 决定应用的Pod不与哪些Pod部署在同一拓扑域。应用非亲和性调度的场景包括:<br/>+ 将一个服务的Pod分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。<br/>+ 给予Pod一个节点的独占访问权限来保证资源隔离,保证不会有其它Pod来分享节点资源。<br/>+ 把可能会相互影响的服务的Pod分散在不同的主机上。<br/><br/>说明 应用非亲和性调度的设置方式与亲和性调度相同,但是相同的调度规则代表的意思不同,请根据使用场景进行选择。 |
调度容忍 | 容忍被应用于Pod,允许这个Pod被调度到相对应的污点上。 |
调度到虚拟节点 | 设置是否调度到虚拟节点。如果您集群中没有虚拟节点,则无法设置该配置项。 |
可选:在标签和注释区域,单击添加设置容器组的标签和注释。
- Pod标签:为该Pod添加一个标签,标识该应用。
- Pod注解:为该Pod添加一个注解(annotation)。
- 单击创建。
步骤四:查看应用
在创建完成页签中查看应用任务。
在创建完成页签中单击查看应用详情。
默认进入新建的nginx-deployment的详情页面。说明您也可以通过以下操作创建路由与服务。如上图所示,在访问方式页签。 - 单击服务右侧的创建,也可以创建服务。
- 单击路由右侧的创建,也可以创建路由。
- 单击左侧导航栏的路由与负载均衡 > 路由,可以看到路由列表下出现一条规则。
- 在浏览器中访问路由测试域名,您可访问Nginx欢迎页。
相关操作
查看无状态工作负载详情
在左侧导航栏单击集群,单击目标集群名称或目标集群操作列下的详情,选择工作负载,在无状态页面单击目标应用名称或目标应用操作列下的详情,在应用详情页面您可以编辑、伸缩、查看Yaml、重新部署、刷新应用。
操作项 | 描述 |
---|---|
编辑 | 在应用详情页面单击编辑,您可以修改应用信息。 |
伸缩 | 在应用详情页面单击伸缩,您可以修改所需容器组数量。 |
查看YAML | 在应用详情页面单击查看Yaml,您可以更新、下载、另存为YAML文件。 |
重新部署 | 在应用详情页面单击重新部署,您可以重新部署应用。 |
刷新 | 在应用详情页面单击刷新,您可以刷新应用。 |
设置已创建的无状态工作负载
在无状态页面的目标应用操作列下,单击更多后,您可以进行以下操作:
操作项 | 描述 |
---|---|
查看Yaml | 查看应用的YAML内容。 |
重新部署 | 重新部署应用。 |
编辑标签 | 为应用设置标签。 |
节点亲和性 | 为应用设置节点亲和性。更多信息,请参见调度配置<br/>。 |
弹性伸缩 | 为应用设置弹性伸缩。更多信息,请参见容器水平伸缩(HPA)<br/>和容器定时伸缩(CronHPA)<br/>。 |
调度容忍 | 设置应用的容忍策略。更多信息,请参见调度配置<br/>。 |
升级策略 | 设置应用升级的策略:<br/>+ 滚动升级:分批次逐步替换应用Pod实例。<br/>+ 替换升级:先暂停老版应用Pod,用新版Pod替换。 |
复制创建 | 复制应用相同的容器设置。 |
回滚 | 回滚至应用之前发布的版本。 |
日志 | 查看应用的日志信息。 |
删除 | 删除应用。 |
2.管理无状态应用
容器组(Pod)是Kubernetes中最小的可部署单元。容器组代表了Kubernetes中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。您可以通过ACK控制台查看容器组(Pod),并进行相关的操作。
1.在集群管理页左侧导航栏中,选择工作负载 > 无状态。
2.选择所有命名空间
找到需要管理的应用名称点击进入 重新部署: 此功能可将应用在不影响业务情况下重新部署一次.
编辑: 此功能可重新编辑应用配置,常用场景为更新镜像的Tag升级版本
伸缩: 此功能可增加或减少应用的副本数量, 图中容器组栏有2个,代表此应用运行了2个副本
容器组:
1.日志: 查看容器运行的日志 2.终端: 容器发生异常时可进入容器内部终端命令行进行排查 3.监控: 点击监控按钮图标,可查看容器资源的占用情况
常见问题:
1.单个容器发生异常,并无法快速解决时可点击 更多-删除. 集群将自动重新启动一个新的副本.
3.调度到指定节点
由于业务场景需要,有时您需要将管控服务部署到Master节点,或者将某些服务部署到具有SSD盘的机器上。通过容器服务管理控制台,您可以快速地将Pod调度到指定的Node节点上。本文介绍如何通过设置节点标签、配置模板等操作,将Pod调度到指定Node节点上。
背景信息
您可通过设置节点标签,然后通过配置nodeSelector
强制约束Pod调度,将Pod调度到指定的Node节点上。关于nodeSelector的详细实现原理,请参见nodeselector。
步骤1 设置节点标签
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择节点管理 > 节点。
- 选择所需的集群,在页面右上角单击标签与污点管理,进入标签与污点管理页面。
- 在节点列表中,选择所需节点,然后单击左下角的添加标签。
在弹出的添加对话框中,输入标签的名称和值,然后单击确定。
- 名称:标签名称由字母、数字、中划线(-)、下划线(_)、小数点(.)组成,且必须以字母或者数字开头和结尾。
- 值:标签值可以为空字符串或由字母、数字、中划线(-)、下划线(_)、小数点(.)组成,且必须以字母或者数字开头和结尾。
步骤2 部署Pod到指定节点
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 无状态。
- 在无状态页面,单击页面右上角的使用模板创建。
对模板进行相关配置,部署一个Pod。
- 集群:选择所需的集群。
- 命名空间:选择资源对象所属的命名空间,本例中是Default。
- 示例模板:本示例选择自定义模板。
- 本示例的编排模板如下。
apiVersion: v1 kind: Pod metadata: labels: name: hello-pod name: hello-pod spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: hello-pod ports: - containerPort: 8080 protocol: TCP resources: {} securityContext: capabilities: {} privileged: false terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always nodeSelector: group: worker ##注意与前面配置的节点标签一致 status: {}
- 单击创建后,会提示部署状态信息。
验证结果
您可以选择以下任意一种方式查看Pod是否已成功部署到指定节点上。
- 部署成功后,单击页面底部提示信息中的Pod名称,进入该Pod的详情页,查看Pod详情。您可看到Pod的标签、所处的节点ID等信息,表明该Pod已经成功部署到具有
group:worker
标签的指定节点上。 - 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 无状态。
- 在工作负载页面,单击容器组页签,单击所需的Pod名称,进入该Pod的详情页。
4.查看容器组(Pod)
容器组(Pod)是Kubernetes中最小的可部署单元。容器组代表了Kubernetes中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。您可以通过ACK控制台查看容器组(Pod),并进行相关的操作。
查看容器组详细信息
- 登录容器服务管理控制台。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
查看容器组。
- 单击容器组页签,然后单击目标容器组右侧的详情,查看容器组的详细信息。
- 选择目标工作负载,然后在目标工作负载的列表中,单击应用名称或者其右侧的详情,查看相关的容器组信息。
- 您可以在应用管理页,单击左侧导航栏中的服务,选择所需的服务并单击服务的名称,查看该服务下的工作负载,然后单击目标工作负载查看容器组。
说明 您可对容器组进行编辑和删除操作,对于通过部署(例如Deployment)创建的容器组,建议您通过Deployment进行管理。
查看容器组日志
您可以在工作负载的应用列表中或者容器组列表中查看容器的日志。
- 在容器组页签的容器组列表中,选择目标容器组,然后单击其右侧的日志,查看容器的日志信息。
- 选择目标工作负载,然后在其应用列表下选择目标应用,在操作列下,选择更多 > 日志,查看容器的日志信息。
5.变更容器配置
您可以通过容器服务管理控制台变更容器组(Pod)的配置。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 容器组。
- 在容器组页面,选择所需的容器组,单击右侧的编辑。
- 更新容器组的配置并单击更新。
6.手动伸缩容器应用
应用创建后,您可以根据自己的需求来进行服务扩容或缩容。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 选择命名空间,选择所需的Deployment,单击右侧的伸缩。
- 在弹出的对话框中,设置所需容器组的数量,将其调整为4,然后单击确定。
说明 Kubernetes的Deployment资源默认的更新方式就是rollingUpdate,所以在更新过程中,会保证最小可服务的容器个数,该个数也可以在模板里面调整。
7.查看镜像列表
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,选择市场 > 容器镜像服务。
在镜像仓库页面,单击创建镜像仓库。
7.服务
在Kubernetes中,Pod虽然拥有独立的IP,但Pod会被快速地创建和删除,因此不能通过Pod直接对外提供服务。通过服务(Service)能够解耦前端和后端的关联,从而实现松耦合的微服务设计。
1.服务Service概述
由于云原生的应用,通常需要敏捷的迭代和快速的弹性,且单一容器和其相关的网络资源的生命非常短暂,所以需要固定的访问地址,以及自动负载均衡实现快速的业务弹性。ACK采用Service方式为一组容器提供固定的访问入口,并对这一组容器做负载均衡。实现原理如下:
- 创建Service对象时,ACK会分配一个相对固定的Service IP地址。
- 通过字段selector选择一组容器,以将这个Service IP地址和端口负载均衡到这一组容器IP和端口上。
Service网络支持以下多种模式分别对接不同来源和类型的客户端的访问:
- ClusterIPClusterIP类型的Service用于集群内部的应用间访问,如果您的应用需要暴露到集群内部提供服务,需使用ClusterIP类型的Service暴露。
说明 创建Service时默认的Service类型为ClusterIP。 - NodePortNodePort类型的Service将集群中部署的应用向外暴露,通过集群节点上的一个固定端口暴露出去,这样在集群外部就可以通过节点IP和这个固定端口来访问。
- LoadBalancerLoadBalancer类型的Service同样是将集群内部部署的应用向外暴露,不过它是通过阿里云的负载均衡进行暴露的,相对于NodePort方式,有更高的可用性和性能。关于如何通过LoadBalancer类型Service暴露应用,请参见通过使用已有SLB的服务公开应用和通过使用自动创建SLB的服务公开应用。
- Headless ServiceHeadless Service类型的Service是在Service属性中指定clusterIP字段为None类型。采用Headless Service类型后,Service将没有固定的虚拟IP地址,客户端访问Service的域名时会通过DNS返回所有的后端Pod实例的IP地址,客户端需要采用DNS负载均衡来实现对后端的负载均衡。
- ExternalNameExternalName类型的Service将集群外部的域名映射到集群内部的Service上,例如将外部的数据库域名映射到集群内部的Service名,那么就能在集群内部通过Service名直接访问。
关于Service的负载均衡配置需要注意内容,请参见Service的负载均衡配置注意事项。
2.创建服务
- 登录容器服务管理控制台。 https://cs.console.aliyun.com/
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择服务与路由 > 服务。
- 单击页面右上角的创建。
- 在创建服务对话框中,设置相关参数。
- 在创建服务对话框中,设置相关参数。
参数 | 描述 |
---|---|
名称 | 设置服务的名称。 |
类型 | 选择服务类型,即服务访问的方式。包括:<br/>+ 虚拟集群IP:即ClusterIP,指通过集群的内部IP暴露服务。选择该值,服务只能够在集群内部可以访问,这也是默认的Service类型。 说明 您的服务类型为虚拟集群IP时,才能设置实例间发现服务(Headless Service)。您可以使用无头Service与其他服务发现机制进行接口,而不必与Kubernetes的实现捆绑在一起。<br/>+ 节点端口:即NodePort,通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort> ,可以从集群的外部访问一个NodePort服务。<br/>+ 负载均衡:即LoadBalancer,指阿里云提供的负载均衡服务(SLB),可选择公网访问或私网访问。阿里云负载均衡服务可以路由到NodePort服务和ClusterIP服务。<br/>+ 新建SLB:您可以通过单击修改,修改SLB规格。<br/>+ 使用已有负载均衡: 您可以在已有的列表中选择SLB规格。<br/>+ 说明 负载均衡类型支持新建SLB和使用已有SLB,且多个Kubernetes Service可以复用同一个SLB,但是存在以下限制:<br/>+ 使用已有的负载均衡实例会强制覆盖已有监听。<br/>+ Kubernetes通过Service创建的SLB不能复用(会导致SLB被意外删除)。只能复用您手动在控制台(或调用OpenAPI)创建的SLB。<br/>+ 复用同一个SLB的多个Service不能有相同的前端监听端口,否则会造成端口冲突。<br/>+ 复用SLB时,监听的名字以及虚拟服务器组的名字被Kubernetes作为唯一标识符。请勿修改监听和虚拟服务器组的名字。<br/>+ 不支持跨集群复用SLB。 |
关联 | 选择服务要绑定的后端应用。若不进行关联部署,则不会创建相关的Endpoints对象,您可自己进行绑定,请参见services-without-selectors<br/>。 |
外部流量策略 | 设置外部流量策略。<br/>+ Local:流量只发给本机的Pod。<br/>+ Cluster:流量可以转发到集群中其他节点上的Pod。<br/><br/>说明 您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。 |
端口映射 | 添加服务端口(对应Service YAML文件中的port <br/>)和容器端口(对应Service YAML文件中的targetPort <br/>),容器端口需要与后端的Pod中暴露的容器端口一致。 |
注解 | 为该服务添加一个注解(Annotation),配置负载均衡的参数。您可以选择自定义注解或阿里云注解。例如设置service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2 <br/>表示将该服务的带宽峰值设置为2Mbit/s,从而控制服务的流量。更多参数请参见通过Annotation配置负载均衡<br/>。 |
标签 | 您可为该服务添加一个标签,标识该服务。 |
3.管理服务
- 在集群管理页左侧导航栏中,选择服务与路由 > 服务。
- 找到所需的服务名称,点击详情,即可看到服务绑定的容器
- 内部端点: 集群内部使用此地址进行连接
- 外部端点: 在使用阿里云负载均衡服务时,可通过外部端点连接服务3
8.配置项
在容器服务管理控制台上,您可以通过配置项菜单或使用模板来创建配置项。您可以使用配置项保存不需要加密的配置信息和配置文件。本文介绍如何创建配置项。
1.创建配置项
- 在集群管理页左侧导航栏中,单击配置管理。
- 选择配置项页签,在配置项页面,选择需要创建配置项的集群和该配置项所属的命名空间,然后单击创建。
输入配置项名称,然后单击+添加,填写配置项名称和值,最后单击确定。
- 配置项名称:指定配置项的文件名,名称可以包含小写字母、数字、连字符(-)或者点号(.),名称不能为空。其他资源对象需要引用配置文件名来获取配置信息。
- 配置项:填写配置项名称和配置项的值。您也可以单击从文件导入创建配置项。
- 单击确定。您可以在配置项列表中看到test-config配置文件。
2. 管理配置项
- 找到所需管理的配置项,点击编辑,可更新内容
- 创建无状态服务时可通过,数据卷功能将配置文件加载至容器中
9.存储管理
1.概述-CSI
目前阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)集群支持两种存储插件Flexvolume和CSI。本文介绍两种存储插件特性及如何选择合适的存储插件。
Flexvolume和CSI存储插件的区别
插件名称 | 插件特性 | 参考文档 |
---|---|---|
Flexvolume | Flexvolume插件是Kubernetes社区较早实现的存储卷扩展机制。ACK从上线起,即支持Flexvolume类型数据卷服务。Flexvolume插件包括以下三部分。<br/>+ Flexvolume:负责数据卷的挂载、卸载功能。ACK默认提供云盘、NAS、OSS三种存储卷的挂载能力。<br/>+ Disk-Controller:负责云盘卷的自动创建能力。<br/>+ Nas-Controller:负责NAS卷的自动创建能力。 | 有关Flexvolume的详细概述,请参见Flexvolume概述。<br/>有关如何升级Flexvolume存储插件,请参见管理组件。 |
CSI | CSI插件是当前Kubernetes社区推荐的插件实现方案。ACK集群提供的CSI存储插件兼容社区的CSI特性。CSI插件包括以下两部分:<br/>+ CSI-Plugin:实现数据卷的挂载、卸载功能。ACK默认提供云盘、NAS、OSS三种存储卷的挂载能力。<br/>+ CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种存储卷创建能力。 | 有关CSI的详细概述,请参见CSI概述和alibaba-cloud-csi-driver。<br/>有关如何升级CSI存储插件,请参见CSI存储插件升级指南。 |
使用推荐
- 针对新建集群,推荐您使用CSI插件。ACK会跟随社区持续更新CSI插件的各种能力。
- 针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK会持续支持Flexvolume插件。
使用须知
- 在创建集群的时候确定插件类型。
- 不支持Flexvolume和CSI插件在同一个集群中使用。
- 不支持Flexvolume转变到CSI插件。
2.安装插件
CSI插件包括CSI-Plugin和CSI-Provisioner两部分。您可以在容器服务Kubernetes版Container Service for Kubernetes(ACK)中,安装CSI-Plugin和CSI-Provisioner存储插件。
说明 CSI插件需要您的集群版本大于1.14,且初始化集群的时候选择使用CSI插件。或者自行配置节点kubelet参数,确保enable-controller-attach-detach
为true。
注意事项
- 使用Flexvolume需要kubelet关闭
--enable-controller-attach-detach
选项。默认阿里云Kubernetes集群已经关闭此选项。 - 在kube-system命名空间部署CSI。
安装CSI-Plugin和CSI-Provisioner
ACK集群默认安装CSI-Plugin和CSI-Provisioner。如果您的集群中没有安装该插件,您可以手动安装。详情请参见alibaba-cloud-csi-driver。
验证安装
您可以连接Master节点验证插件的安装情况。连接Master节点的具体步骤,请参见SSH访问Kubernetes集群。
- 执行以下命令,输出若干(节点个数)Running状态的Pod列表。
kubectl get pod -n kube-system | grep csi-plugin
- 执行以下命令,输出一个Running状态的Pod列表。
kubectl get pod -n kube-system | grep csi-provisioner
3.云盘存储卷使用说明
您可以在阿里云容器服务Kubernetes集群中使用阿里云云盘存储卷。
目前,阿里云CSI插件支持通过PV/PVC方式挂载云盘,包括静态存储卷和动态存储卷。
使用说明
- 云盘为非共享存储,通过PV/PVC使用云盘时,一个云盘只能同时被一个Pod挂载。
- 推荐使用有状态应用(StatefulSet)挂载使用云盘。无状态应用(Deployment)挂载云盘时Replica需要为1,不能保证挂载、卸载的优先顺序。
使用云盘存储卷前需要先申请一个云盘,并获得磁盘ID。详情请参见创建云盘。说明申请云盘时,请遵循如下容量限制:
- 高效云盘:最小20 GiB。
- SSD云盘:最小20 GiB。
- ESSD云盘:最小20 GiB。
- 集群中只有与云盘在同一个可用区(Zone)的节点才可以挂载云盘。
- 待挂载的云盘类型必须是按量付费,包年包月的云盘无法被挂载。当您把集群中的ECS实例从按量付费转换成包年包月时,不可以把云盘一起变成包年包月,否则云盘将不能被挂载使用。
4.通过控制台使用云盘静态存储卷
Pod不能共享一个云盘数据,一个Pod挂载一个云盘。只需要本文主要为您介绍如何通过控制台使用云盘静态存储卷。
前提条件
您已经创建好一个Kubernetes集群,并且在该集群中部署CSI插件。
- 您已经创建好一个按量付费的云盘。请参见创建云盘。
创建PV
登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击存储卷。
- 在存储卷页签,单击右上角的创建。
在创建存储卷对话框中配置参数。
- 存储卷类型:支持云盘、NAS、OSS三种云存储类型。本文中选择为云盘。
- 存储驱动:支持Flexvolume和CSI。本文中选择为CSI。
- 访问模式:默认为ReadWriteOnce。
- 云盘ID:您可以选择与集群属于相同地域和可用区下处于待挂载状态的云盘。
- 文件系统类型:您可以选择以什么数据类型将数据存储到云盘上,支持的类型包括ext4、ext3、xfs、vfat。默认为ext4。
- 标签:为该数据卷添加标签。
- 参数配置完成后,单击创建。
创建PVC
登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击存储卷。
- 在存储声明页签,单击右上角的创建。
在创建存储声明对话框中,配置参数。
- 存储声明类型:支持云盘/NAS/OSS三种云存储类型。本文中选择云盘。
- 名称:创建的数据卷的名称,数据卷名在命名空间内必须唯一。
- 分配模式:本文中选择已有存储卷。
说明 若未创建存储卷,您可以设置分配模式为创建存储卷,配置创建存储卷参数,详情请参见创建PV。 - 已有存储卷:单击选择已有存储卷,在目标存储卷右侧操作列单击选择,选择存储卷。
- 总量:所创建存储卷的容量。
说明 所创建的存储卷容量不能超过磁盘容量。 - 访问模式:默认为ReadWriteOnce。
- 单击创建。创建成功后可以在列表中看到csi-disk-pvc,并且已绑定相应的存储卷。
创建应用
登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 在无状态页签中,单击使用镜像创建。
- 在应用基本信息页签中,设置应用的基本信息。
配置项 | 描述 |
---|---|
应用名称 | 设置应用的名称。 |
命名空间 | 设置应用部署所处的命名空间,默认使用default命名空间。 |
副本数量 | 即应用包含的Pod数量,默认数量为2。 |
类型 | 定义资源对象的类型,可选择无状态、有状态、任务、定时、定时任务、守护进程集。 |
标签 | 为该应用添加一个标签,标识该应用。 |
注解 | 为该应用添加一个注解(annotation)。 |
时区同步 | 容器与节点是否使用相同的时区。 |
- 说明 本例中选择无状态类型,即Deployment类型。
- 单击下一步。进入容器配置页面。
设置容器配置。本例主要为您介绍数据卷的配置。其他界面参数请参见使用镜像创建无状态Deployment应用。数据卷支持配置本地存储和云存储。
- 本地存储:支持主机目录(HostPath)、配置项(ConfigMap)、保密字典(Secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见volumes。
- 云存储:支持云存储类型。
- 本例中配置了一个云盘类型的数据卷,将该云盘挂载到容器中/tmp路径下,在该路径下生成的容器数据会存储到云盘中。
- 所有的信息都配置完成后,单击创建。创建成功后,您就可以正常使用数据卷。
您也可以通过命令行的方式使用云盘静态存储卷,请参见通过YAML使用云盘静态存储卷。
10.安全管理
1.安全体系概述
从运行时安全、可信软件供应链和基础架构安全三个维度介绍阿里云容器服务Kubernetes版的安全体系,包括安全巡检、策略管理、运行时监控和告警、镜像扫描、镜像签名、云原生应用交付链、默认安全、身份管理、细粒度访问控制等。
运行时安全
安全巡检集群的应用开发人员应该遵循权限的最小化原则配置应用部署模板,攻击者往往是利用应用Pod中开启的不必要的特权能力发起逃逸攻击,因此阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)提供了应用运行时刻的安全配置巡检能力,帮助您实时了解当前状态下运行应用的配置是否存在安全隐患。
巡检结果支持以报表化的方式展示,同时展示巡检对应扫描项的说明和修复建议。您还可以配置定期巡检,对应的扫描结果会写入到SLS指定的日志库中存储。具体操作,请参见使用配置巡检检查集群workload安全隐患。
- 策略管理PSP(PodSecurityPolicy)是Kubernetes中Pod部署时重要的安全校验手段,能够有效地约束应用运行时的行为安全。它能够在应用部署时对Pod进行强制的安全校验,在集群的安全纵深防护中发挥了像AppArmor,SELinux这类策略引擎的作用。
PSP是Kubernetes原生的集群维度资源模型,通过API Server的Admission Controller准入机制,在应用部署时刻对Pod的安全参数进行强制校验。如果参数配置不满足指定PSP策略的定义,API Server会禁止该Pod的部署请求。
ACK集群默认开启了PSP特性,并且在控制台提供了一键化的PodSecurityPolicy Admission Controller开启关闭能力。同时基于原生的PSP模型提供了对应的策略定制编写和面向指定ServiceAccount的绑定能力。在降低了PSP使用门槛的同时,也能够避免因为应用PSP策略绑定导致已有应用无法再次部署的使用问题。更多信息,请参见使用PSP安全策略。 运行时监控和告警当容器应用通过API Server的认证鉴权和准入控制校验成功部署后,在云原生应用零信任的安全原则下,还需要在容器应用的运行时刻提供相应的安全监控和告警能力。因此,阿里云容器服务和云安全中心深度集成了告警处理和漏洞检测能力,集群管理员可以在应用运行时提供监控和告警能力,主要的容器侧攻击防护行为如下:
- 恶意镜像启动告警。
- 病毒和恶意程序的查杀。
- 容器内部入侵告警。
- 容器逃逸和高风险操作预警。
- 您可以在集群管理页面的安全管理 > 运行时刻安全监控页面实时接收到相应告警,并根据页面提示查看和处理告警详情。具体操作,请参见使用运行时刻安全监控。
- 安全沙箱管理相比于原有Docker运行时,安全沙箱为您提供的一种新的容器运行时选项,可以让您的应用运行在一个轻量虚拟机沙箱环境中,拥有独立的内核,具备更好的安全隔离能力。
安全沙箱特别适合于不可信应用隔离、故障隔离、性能隔离、多用户间负载隔离等场景。在提升安全性的同时,对性能影响非常小,并且具备与Docker容器一样的用户体验,例如日志、监控、弹性等。关于安全沙箱管理的详细介绍,请参见安全沙箱概述。 - ACK-TEE机密计算当面向诸如金融,政府等有很强安全诉求的应用场景时,ACK-TEE机密计算提供了基于硬件加密技术的云原生一站式机密计算容器平台 ,它可以帮助您保护数据使用(计算)过程中的安全性、完整性和机密性,同时简化了可信或机密应用的开发、交付和管理成本。
机密计算可以让您把重要的数据和代码放在一个特殊的可信执行加密环境(Trusted Execution Environment,TEE)中,而不会暴露给系统其他部分,其他应用、BIOS、OS、Kernel、管理员、运维人员、云厂商,甚至除了CPU以外的其他硬件均无法访问机密计算平台数据,极大减少敏感数据的泄露风险,为您提供了更好的控制、透明度和隐秘性。更多信息,请参见ACK-TEE机密计算介绍。
可信软件供应链
镜像扫描容器镜像服务支持所有基于Linux的容器镜像安全扫描,可以识别镜像中已知的漏洞信息。您可以收到相应的漏洞信息评估和相关的漏洞修复建议,为您大幅降低使用容器的安全风险。容器镜像服务也接入了云安全的扫描引擎,可支持镜像系统漏洞、镜像应用漏洞和镜像恶意样本的识别。关于镜像扫描的详细介绍,请参见安全扫描容器镜像。
- 镜像签名在容器镜像管理中,您可以通过内容可信的机制保障镜像来源的安全性及不被篡改。镜像的创建者可以对镜像做数字签名,数字签名将保存在容器镜像服务中。通过在部署前对容器镜像进行签名验证可以确保集群中只部署可信授权方签名的容器镜像,降低在您的环境中运行意外或恶意代码的风险,确保从软件供应链到容器部署流程中应用镜像的安全和可溯源性。关于镜像签名和验签的配置使用流程,请参见使用kritis-validation-hook组件实现自动验证容器镜像签名。
- 云原生应用交付链在容器安全高效交付场景中,您可以使用容器镜像服务的云原生应用交付链功能,配置镜像构建、镜像扫描、镜像全球同步和镜像部署等,自定义细粒度安全策略,实现全链路可观测、可追踪的安全交付。保障代码一次提交,全球多地域安全分发和高效部署,将DevOps的交付流程全面升级成DevSecOps。关于云原生应用交付链的详细介绍,请参见创建交付链。
基础架构安全
默认安全阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)集群节点,ControlPlane组件配置基于CIS kubernetes benchmark默认安全阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)集群节点,ControlPlane组件配置基于
- 每个新建的集群会默认分配一个与之对应的安全组,该安全组对于公网入方向仅允许ICMP请求。创建的集群默认不允许公网SSH连入,如果您需要配置通过公网SSH连入到集群节点,具体操作,请参见[通过SSH访问Kubernetes集群](https://help.aliyun.com/document_detail/86491.htm#task-1664343)。
- 集群节点通过NAT网关访问公网,可进一步减少安全风险。
- 在托管集群的Worker节点上,遵循权限最小化原则,节点上绑定的RAM角色对应的阿里云资源访问权限经过了最小化收敛。更多信息,请参见[托管集群节点RAM角色收敛公告](https://help.aliyun.com/document_detail/163473.htm#concept-2485733)。
- 身份管理ACK集群内所有组件之间的通讯链路均需要TLS证书校验,保证全链路通讯的数据传输安全,同时ACK管控侧会负责集群系统组件的证书自动更新。RAM账号或角色扮演用户均可以通过控制台或OpenAPI的方式获取连接指定集群API Server的Kubeconfig访问凭证,具体操作,请参见获取集群kubeconfig接口。ACK负责维护访问凭证中签发的身份信息,对于可能泄露的已下发Kubeconfig,可以及时进行吊销操作,具体操作,请参见吊销集群的KubeConfig凭证。
在集群创建时,ACK支持服务账户令牌卷投影(Service Account Token Volume Projection)特性以增强在应用中使用ServiceAccount的安全性。具体操作,请参见部署服务账户令牌卷投影。 细粒度访问控制基于Kubernetes RBAC实现了对ACK集群内Kubernetes资源的访问控制,它是保护应用安全的一个基本且必要的加固措施。ACK在控制台的授权管理页面中提供了命名空间维度的细粒度RBAC授权能力,主要包括以下几点。
- 根据企业内部不同人员对权限需求的不同,系统预置了管理员、运维人员、开发人员等对应的RBAC权限模板,降低了RBAC授权的使用难度。
- 支持多集群和多个子账号的批量授权。
- 支持RAM角色扮演用户的授权。
- 支持绑定用户在集群中自定义的ClusterRole。
- 更多信息,请参见配置子账号RBAC权限。
ACK同时支持以组件管理的方式安装Gatekeeper组件,提供基于OPA策略引擎的细粒度访问控制能力。具体操作,请参见组件介绍。 审计ACK和SLS日志服务进行了深度集成,支持多种审计日志的采集、检索和图表化展示功能,具体包括以下三种:
- 集群API Server审计日志:帮助您记录或追溯集群访问者的日常操作,是集群安全运维中的重要环节。在集群审计页面,您可以查看内容丰富的审计报表,同时可基于日志内容设置对指定资源类型操作的实时告警。具体操作,请参见使用集群审计功能。
- Ingress流量审计:通过不同的可视化流量报表帮助您了解集群Ingress的整体状态,比如服务访问的PV和UV,成功和失败比例,以及延迟信息等全方位的流量监控,同时支持基于日志服务提供的机器学习算法,通过多种时序分析算法从Ingress的指标中自动检测异常点,提供问题发现的效率。具体操作,请参见Ingress访问日志分析与监控。
- 事件监控审计:基于事件的监控可以帮助您通过事件获取,实时诊断集群的异常和安全隐患。更多信息,请参见事件监控。
- Secret落盘加密Kubernetes原生的Secret模型在Etcd落盘时只经过了Base64编码,为了保护Secret中敏感数据的落盘安全性,在ACK Pro托管集群中,您可以使用在阿里云密钥管理服务KMS(Key Management Service)中创建的密钥加密Kubernetes集群Secret,实现应用敏感数据的落盘加密。具体操作,请参见使用阿里云KMS进行Secret的落盘加密。
2.在Kubernetes中实现HTTPS安全访问
容器服务ACK集群支持多种应用访问的形式,最常见形式如<SLB-Instance-IP>:<Port>
、<NodeIP>:<NodePort>
和域名访问等。ACK集群默认不支持HTTPS访问,如果您希望能够通过HTTPS进行应用的访问,容器服务ACK和阿里云负载均衡服务为您提供安全的HTTPS访问。本文通过实际案例演示的HTTPS访问配置,帮助您在容器服务ACK中配置自己的证书。
前提条件
- 创建Kubernetes托管版集群。
创建集群的服务器证书,包括公钥证书和私钥。
- 您可通过以下命令快速创建集群的服务器证书。
openssl genrsa -out tls.key 2048
- 输出:
Generating RSA private key, 2048 bit long modulus ................................................................+++ ........................................................................................+++ e is 65537 (0x10001)
ls
- 输出:
You are about to be asked to enter information that will be incorporated ... ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:zhejiang Locality Name (eg, city) [Default City]:hangzhou Organization Name (eg, company) [Default Company Ltd]:alibaba Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your server's hostname) []:foo.bar.com #注意,您需要正确配置域名。 Email Address []:a@alibaba.com
- 您也可以选择购买阿里云签发证书。具体操作,请参见[选择阿里云签发证书](https://help.aliyun.com/document_detail/129370.htm#task-1597562)。
背景信息
根据访问的方式不同,当前可以分为两种配置证书的方式:
- 在前端SLB上配置证书。
- 在Ingress中配置证书。
在SLB上配置HTTPS证书
该方式有如下特点:
- 优点:证书配置在SLB上,为应用外部访问的入口,在集群内部进行应用的访问依然用的是HTTP访问方式。
- 缺点:需要维护较多的域名与IP地址的对应关系。
- 适用场景:应用不使用Ingress暴露访问方式,通过LoadBalancer类型的Service进行应用访问的暴露。
准备工作:
您已在该ACK集群中创建一个Nginx应用,该应用采用LoadBalancer类型的服务(Service)对外提供访问。更多信息,请参见使用镜像创建无状态Deployment应用。
示例:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择服务与路由 > 服务。
- 选择集群的命名空间和服务,单击外部端点,您可通过
<SLB IP>:<Port>
的方式访问该应用。 - 登录负载均衡管理控制台。
配置SSL证书。
- 如果您是通过命令方式创建集群的服务器证书,您需要使用前提条件中创建的公钥证书和私钥上传非阿里云签发证书。具体操作,请参见上传非阿里云签发证书。
- 如果您是通过购买方式获取阿里云签发证书,请跳过此步骤。关于创建阿里云签发证书的操作,请参见选择阿里云签发证书。
- 在证书列表中,找到目标证书名称下面的证书ID。
- 在容器服务管理控制台的服务列表中,找到之前创建的服务,单击右侧操作列下的更新。
- 在更新服务对话框中的注解区域,添加以下两个注解内容。
注解 | 名称 | 值 |
---|---|---|
注解一 | service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | https:443 |
注解二 | service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | ${YOUR_CERT_ID} |
- 说明 将${YOUR_CERT_ID}替换成步骤7配置SSL证书生成的证书ID。
您还可以使用YAML方式添加注解内容,完整YAML示例如下:
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}" name: nginx namespace: default spec: ports: - name: https port: 443 protocol: TCP targetPort: 80 - name: http port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: LoadBalancer
在Ingress上配置证书
该方法有以下特点:
- 优点:无需改动SLB的配置。每一个应用都可以通过Ingress管理自己的证书,互不干扰。
- 适用场景:每个应用都需要单独的证书进行访问,或者集群中存在需要证书才能访问的应用。
准备工作:
您已在该Kubernetes集群中创建一个Tomcat应用,该应用的服务(Service)采用ClusterIP的方式提供访问。本例中准备使用Ingress对外提供HTTPS访问服务。更多信息,请参见使用镜像创建无状态Deployment应用。
示例:
- 根据前提条件中准备好的证书执行以下命令创建Secret。
说明 在这里需要正确配置域名,否则后续通过HTTPS访问会有问题。
kubectl create secret tls secret-https --key tls.key --cert tls.crt
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择命名空间与配额,单击右上角创建。
可选:在创建路由对话框中,配置可HTTPS访问的路由,完成后单击创建。更多详细的路由配置信息,请参见创建路由(Ingress)。本例中进行如下配置。
- 名称:输入该路由的名称。
- 域名:即是前面配置的正确域名,与ssl证书中配置的保持一致。
- 服务:选择Tomcat应用对应的Service,端口为8080。
- 开启TLS:开启TLS后,选择已创建的Secret。
- 您也可采用YAML文件的方式创建路由(Ingress),本例对应的YAML示例文件如下。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tomcat-https spec: tls: - hosts: - foo.bar.com secretName: secret-https rules: - host: foo.bar.com http: paths: - path: / backend: serviceName: tomcat-svc servicePort: 8080
- 返回路由列表,查看创建的路由(Ingress),本例中域名为
foo.bar.com
,并查看端点和域名,您也可进入路由详情页进行查看。
说明 本例中以foo.bar.com
作为测试域名,您需要在hosts文件中创建一条记录。
47.110.119.203 foo.bar.com #其中IP地址即是路由的端点。
- 在浏览器中访问
[https://foo.bar.com](https://foo.bar.com)
。
说明 由于创建了TLS证书访问,所以要用HTTPS来进行域名访问,针对该应用,本例以foo.bar.com
为示例,在本地进行解析。在具体使用场景中,请使用备案过的域名。
3.更新即将过期证书
通过控制台更新Kubernetes集群即将过期的证书。
前提条件
- 您已经成功创建一个Kubernetes集群,参见创建Kubernetes专有版集群,且集群证书即将过期。
- 您已经了解并做好更新证书前的准备工作,参见集群证书更新说明。
操作步骤
- 登录容器服务管理控制台。
执行结果
- 更新证书页面,显示更新成功。
- 集群列表页面,目标集群无更新证书提示。
4.吊销集群的KubeConfig凭证
在常见的多租场景下,容器服务会为不同角色的用户签发带有其身份信息的KubeConfig凭证用于连接集群。当企业内部员工离职或是某签发KubeConfig遭到疑似泄露等情况发生时,吊销该集群的KubeConfig可有效保障集群的安全。本文主要介绍在容器服务中如何吊销已经分发的用户KubeConfig凭证。
前提条件
- 如果您需要吊销的是Serverless Kubernetes集群的KubeConfig凭证,请选择2019年9月6号以后创建的集群。
如果您需要吊销的是专有版或者托管版Kubernetes集群的KubeConfig凭证:
- 当前用户是主账号,则2019年10月15日之前创建的Kubernetes集群无法吊销主账号KubeConfig凭证。
- 当前用户是子账号,则可以对管理范围内的Kuberneres集群吊销KubeConfig凭证。
吊销KubeConfig凭证包含以下两种场景:
- 当前用户可以吊销自身的KubeConfig凭证。
- 主账号可以吊销其子账号的KubeConfig凭证。
吊销自身KubeConfig凭证
注意 吊销KubeConfig后,用户就无法使用原KuberConfig连接集群,请谨慎操作。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
说明
如果您使用主账号登录,请选择2019年10月15日及以后创建的集群。
如果您需要吊销的是Serverless Kubernetes集群的KubeConfig凭证,请选择2019年9月6号以后创建的集群。 - 在集群信息页面,选择连接信息页签,单击吊销 KubeConfig。
- 在弹出的对话框中单击确定。吊销当前账号下该集群的KubeConfig凭证。此时,系统会自动为您分配新的KubeConfig凭证。
主账号吊销其子账号的KubeConfig凭证
- 使用主账号登录容器服务管理控制台。
- 在Kubernetes菜单下,选择左侧导航栏中的授权管理。
- 在授权管理页面的子账号页签,在需要吊销的子账号右侧单击吊销 KubeConfig。此时会弹出该子账号名下所有的集群ID。
- 找到需要吊销的集群所对应的集群ID,单击吊销 KubeConfig。
- 在弹出的对话框中单击确定。
5.集群证书更新说明
当集群证书过期前两个月左右,在容器服务控制台集群列表页面会出现更新证书的红色按钮提示您更新证书,同时您会收到相应的站内信或短信通知。
您可以通过单击该红色按钮进行集群证书的自动更新,整个更新时长依据集群节点个数而定,一般5~10分钟即可完成更新。更新成功后相应证书有效期会延长五年。
注意事项
- 在证书更新过程中集群kube-apiserver,kube-controller-manager,kube-scheduler,kubelet等系统组件将有短暂的重启过程,如果您的服务逻辑强依赖apiserver等系统组件,请您在证书更新前确认服务在更新过程中的可用性。
- 建议您在非业务高峰期执行更新操作。
6.更新Kubernetes集群已过期的证书
更新Worker节点已过期的证书
- 以Root权限登录任意Master节点。
- 执行以下命令,获取集群RootCA私钥。
cat /etc/kubernetes/pki/ca.key
3.执行以下命令,获取通过base64编码后集群的根私钥。
- 若获取的集群RootCA私钥,有一行空行,执行以下命令:
sed '1d' /etc/kubernetes/pki/ca.key| base64 -w 0
- 若获取的集群RootCA私钥,无空行,执行以下命令:
cat /etc/kubernetes/pki/ca.key | base64 -w 0
- 以Root权限登录任意Worker节点。
- 在任意目录下执行如下命令,更新Worker节点已经过期的证书。
docker run -it --privileged=true -v /:/alicoud-k8s-host --pid host --net host \ registry.cn-hangzhou.aliyuncs.com/acs/cert-rotate:v1.0.0 /renew/upgrade-k8s.sh --role node --rootkey ${base64CAKey}
11.日志管理
1.概述
阿里云容器服务 Kubernetes 集群提供给您多种方式进行应用的日志管理。
- 通过使用日志服务进行Kubernetes日志采集,您可以方便地使用日志服务采集应用日志,从而更好地利用阿里云日志服务提供给您的各种日志统计分析等功能。
- 通过阿里云容器服务提供的开源 Log-pilot 项目,利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案,您可以方便地搭建自己的应用日志集群。
2.通过日志服务采集Kubernetes容器日志
阿里云容器服务Kubernetes集群集成了日志服务,您可在创建集群时启用日志服务,快速采集Kubernetes集群的容器日志,包括容器的标准输出以及容器内的文本文件。
步骤一:启用日志服务组件Logtail
您可以在创建集群时勾选使用日志服务,启用Logtial组件;也可以为已有集群安装Logtail组件。
创建集群时启用Logtail:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击页面右上角的创建集群,详情请参见创建Kubernetes集群。
- 在选择集群模板页面选择模板类型。
- 在组件配置中,选中日志服务配置项,表示在新建的Kubernetes集群中安装日志插件
当勾选使用日志服务后,会出现创建Project(日志服务管理日志的组织结构,具体可见项目)的提示,目前有两种方式可选。
- 配置完成后,单击右下角创建集群,在弹出的窗口中单击确定,完成创建。完成创建后,您可在集群列表页面看到创建的Kubernetes集群。
为已有集群启用Logtail:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择运维管理 > 组件管理,并在可选组件区域找到logtail-ds。
- 在logtail-ds组件右侧,单击安装。
- 在安装组件对话框中单击确认。
如果您已安装旧版本的日志服务组件,可以在可选组件区域,升级组件。
步骤二:创建应用时配置日志服务
您可以在创建应用的同时配置日志服务,从而对容器的日志进行采集。目前支持控制台向导和YAML模板两种方式创建应用。
通过控制台向导创建:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 选择集群的命名空间和无状态页签,单击页面右上角的使用镜像创建。
- 在应用基本信息页签,设置应用名称、副本数量和类型,单击下一步,进入容器配置页面。
- 进入容器配置页面中,本例中选择nginx镜像,对容器采集进行配置。以下仅介绍日志服务相关的配置,其他的应用配置可参见使用镜像创建无状态Deployment应用。
进行日志配置。单击+号创建新的采集配置,每个采集配置由Logstore名称和日志采集路径两项构成。
- Logstore名称:您可以使用它来指定所采集日志存储于哪个Logstore,如果该Logstore不存在的话,我们会自动为您在集群关联的日志服务Project下创建相应的Logstore。
说明 名称中不能包含下划线(_),可以使用-来代替。 - 日志采集路径:您可以用它来指定希望采集的日志所在的路径,如使用/usr/local/tomcat/logs/catalina.*.log来采集tomcat的文本日志。
说明 如果指定为stdout则表示采集容器的标准输出和标准错误输出。
每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集,如果您需要更丰富的采集方式,可以前往日志服务控制台,进入相应的Project(默认是k8s-log前缀)和Logstore对配置进行修改。
- Logstore名称:您可以使用它来指定所采集日志存储于哪个Logstore,如果该Logstore不存在的话,我们会自动为您在集群关联的日志服务Project下创建相应的Logstore。
- 自定义Tag。单击+号创建新的自定义Tag,每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。
- 当完成所有配置后,可单击右上角的下一步进入后续流程,后续操作可参见使用镜像创建无状态Deployment应用。
通过YAML模板创建
- 在集群管理页左侧导航栏中,单击工作负载。
- 选择集群的命名空间和无状态页签,单击页面右上角的使用模板创建
- YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用env来为container增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMounts和volumes。以下是一个简单的Pod示例:
apiVersion: v1 kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: ######### 配置 环境变量 ########### - name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log - name: aliyun_logs_mytag1_tags value: tag1=v1 ############################### ######### 配置volume mount ########### volumeMounts: - name: volumn-sls-mydemo mountPath: /var/log volumes: - name: volumn-sls-mydemo emptyDir: {} ###############################
根据您的需求按照以下顺序进行配置。说明如果您有更多的日志采集需求,请参见步骤三(可选):配置环境变量的高级参数。
通过环境变量来创建您的采集配置和自定义Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。- 创建采集配置的规则如下:
- name: aliyun_logs_{Logstore名称} value: {日志采集路径}
* 示例中创建了两个采集配置,其中`aliyun_logs_log-stdout`这个env表示创建一个Logstore名字为log-stdout,日志采集路径为stdout的配置,从而将容器的标准输出采集到log-stdout这个Logstore中。
说明 Logstore名称中不能包含下划线(_),可以使用 - 来代替。
* **创建自定义Tag**的规则如下:
- name: aliyun_logs_{任意不包含'_'的名称}_tags value: {Tag名}={Tag值}
* 配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。
1. 如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的volumnMounts。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的volumeMounts。
- 当YAML编写完成后,单击创建,即可将相应的配置交由Kubernetes集群执行。
步骤三(可选):配置环境变量的高级参数
通过容器环境变量配置采集支持多种配置参数,您可根据实际需求设置高级参数来实现日志采集的特殊需求。
注意 通过容器环境变量配置采集日志的方式不适用边缘场景。
字段 | 说明 | 示例 | 注意事项 |
---|---|---|---|
aliyun_logs_{key} | + 必选项。{key}只能包含小写字母、数字和-。<br/>+ 若不存在aliyun_logs_{key}_logstore,则默认创建并采集到名为{key}的logstore。<br/>+ 当值为stdout表示采集容器的标准输出;其他值为容器内的日志路径。 | + <br/>plain - name: aliyun_logs_catalina stdout + <br/>plain - name: aliyun_logs_access-log /var/log/nginx/access.log | + 默认采集方式为极简模式,如需解析日志内容,建议使用日志服务控制台并参见通过DaemonSet-控制台方式采集Kubernetes文件、通过DaemonSet-控制台方式采集Kubernetes标准输出或通过DaemonSet-CRD方式采集日志进行配置。<br/>+ {key}需保持在K8s集群内唯一。 |
aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 | <br/>plain - name: aliyun_logs_catalina_tags app=catalina | - |
aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时为您安装时所选的Project。 | <br/>plain - name: aliyun_logs_catalina_project my-k8s-project | Project需与您的Logtail工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 | <br/>plain - name: aliyun_logs_catalina_tags my-logstore | - |
aliyun_logs_{key}_shard | 可选。值为创建Logstore时的shard数,有效值为1~10。当不存在该环境变量时值为2。 | <br/>plain - name: aliyun_logs_catalina_shard 4 | - |
aliyun_logs_{key}_ttl | 可选。值为指定的日志保存时间,有效值为1~3650。<br/>+ 当取值为3650时,指定日志的保存时间为永久保存。<br/>+ 当不存在该环境变量时,默认指定日志的保存时间为90天。 | <br/>plain - name: aliyun_logs_catalina_ttl 3650 | - |
aliyun_logs_{key}_machinegroup | 可选。值为应用的机器组。当不存在该环境变量时与安装Logtail的默认机器组一致。 | <br/>plain - name: aliyun_logs_catalina_machinegroup my-machine-group | - |
- 定制需求1:将多个应用数据采集到同一Logstore如果您需要将多个应用数据采集到同一Logstore,可以设置 aliyun_logs_{key}_logstore参数,例如以下配置将2个应用的stdout采集到stdout-logstore中:
应用1设置的环境变量为:
######### 配置 环境变量 ########### - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore
- 应用2设置的环境变量为:
######### 配置 环境变量 ########### - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore
定制需求2:将不同应用数据采集到不同的Project如果您需要将不同应用的数据采集到多个Project中,您需要进行以下操作:
- 在每个Project中创建一个机器组,选择自定义标识,标识名为k8s-group-{cluster-id},其中{cluster-id}为您的集群ID,机器组名称您可以自定义配置。
- 每个应用的环境变量中配置project、logstore、machinegroup信息,其中机器组名称为您在步骤1中创建的机器组名,例如:
######### 配置 环境变量 ########### - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_project value: app1-project - name: aliyun_logs_app1-stdout_logstore value: app1-logstore - name: aliyun_logs_app1-stdout_machinegroup value: app1-machine-group
步骤四:查看日志
本例中查看通过控制台向导创建的tomcat应用的日志。完成配置后,tomcat应用的日志已被采集并存储到日志服务中,您可以通过以下步骤来查看您的日志:
- 安装成功后,进入日志服务控制台。
- 在进入控制台后,在Project列表区域选择Kubernetes集群对应的Project(默认为k8s-log-{Kubernetes集群ID}),进入日志库列表页签。
- 在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击
并单击查询分析。 - 本例中,在日志查询页面,您可查看tomcat应用的标准输出日志和容器内文本日志,并可发现自定义tag附加到日志字段中。
更多信息
默认情况下,日志服务会使用极简模式来采集您的数据(按行采集、不解析)。如果您需要更复杂的配置,可以参见以下日志服务文档并前往日志服务控制台进行配置修改。
- 除了通过控制台配置采集以外,您还可以直接通过CRD配置来对Kubernetes集群进行日志采集,具体可参见通过DaemonSet-CRD方式采集日志。
- 对于异常的排查,可以参见Logtail排查简介。**
3.收集托管集群控制平面组件日志
阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)支持收集托管集群控制平面组件日志,将日志从ACK控制层采集到您账号中的SLS日志服务的Log Project中。本文主要介绍如何开启收集托管集群控制平面组件日志功能和查看集群控制平面组件日志。
前提条件
您账号下SLS日志服务中的日志库配额充足。
说明 一个账号默认情况下日志库配额为50。
背景信息
相关控制平面control plane组件日志可以帮助您更安全有效地运维集群,您可以在创建ACK标准托管集群或ACK Pro托管集群的时候通过选中收集控制平面组件日志的选项开启相关组件的日志收集能力,日志将以日志流的形式发送到您账号下指定的SLS日志服务的Log Project中,且将以SLS日志服务统一的按量付费方式进行计费。更多信息,请参见按量付费。
开启收集控制平面组件日志
在创建集群时的组件配置的配置向导页面,在控制平面组件日志区域选中开启选项。关于如何创建集群的详细信息,请参见创建Kubernetes托管版集群或创建Kubernetes Pro版集群。
说明
- 创建ACK Pro托管集群时会默认选中开启选项,ACK标准托管版集群默认不选中。
- 控制平面组件日志支持选择使用已有Project。
查看集群控制平面组件日志
当托管集群创建完成后,有以下两种方式查看集群控制平面组件日志。
方式一:通过日志服务控制台查看目标集群控制平面组件日志。
- 登录日志服务控制台。
- 在Project列表区域,单击目标集群对应的日志服务Project名称。
- 在日志存储页面左侧的日志库列表选择目标控制平面组件的日志库,当前支持kube-apiserver,kube-scheduler和kube-controller-manager三种控制平面组件日志查询方式。具体操作,请参见SLS官方文档。
方式二:通过容器服务控制台查看目标集群控制平面组件日志。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
查看三种控制平面组件。
通过集群信息入口查看三种控制平面组件。
- 在集群信息管理页面单击集群资源页签,在列表中单击控制平面组件日志对应的Project链接。
- 在日志存储页面左侧的日志库列表选择目标控制平面组件的日志库,当前支持kube-apiserver,kube-scheduler和kube-controller-manager三种控制平面组件的日志查询。具体操作,请参见SLS官方文档。
通过运维管理入口查看三种控制平面组件。
- 在集群管理左侧导航栏,选择运维管理 > 日志中心。
- 单击控制平面组件日志页签,然后选择目标的组件查看相应的组件日志信息。
控制平面组件Logstore说明
当前ACK支持收集以下三种类型的控制平面组件日志,每种日志服务Logstore对应一个Kubernetes控制层面组件。关于这些组件的更多信息,请参见Kubernetes组件。
组件 | Logstore | 说明 |
---|---|---|
kube-apiserver | apiserver | kube-apiserver组件是暴露Kubernetes API接口的控制层面的组件。更多信息,请参见kube-apiserver<br/>。 |
kube-controller-manager | kcm | kube-controller-manager组件是Kubernetes集群内部的管理控制中心,内嵌了Kubernetes发布版本中核心的控制链路。更多信息,请参见kube-controller-manager<br/>。 |
kube-scheduler | scheduler | kube-scheduler组件是Kubernetes集群的默认调度器。更多信息,请参见kube-scheduler<br/>。 |
12.监控管理
1.基础资源监控
源监控是Kubernetes中最常见的监控方式,通过资源监控可以快速查看负载的CPU、内存、网络等指标的使用率。在阿里云容器服务中,资源监控已经与云监控互通,新建的集群默认安装与集成云监控。本文介绍如何在控制台查看基础资源的监控。
操作步骤
- 登录容器服务管理控制台。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,单击工作负载。
- 在页面上方选择命名空间,单击无状态页签。
- 选择所需的Deployment,单击右侧的监控,进入到云监控的相应的监控视图页面。
- 您可以单击维度中的分组或实例,分别通过两个维度查看监控数据。
- 可选:如需设置告警,您可以在左侧导航栏单击报警规则并进行设置,详情请参见管理报警规则。分组级别的指标以group开头,实例级别的指标以pod开头。
2.应用性能监控
对于部署在容器服务Kubernetes版中的Java及PHP应用,您可以使用应用实时监控服务ARMS对其进行监控,实现自动发现应用拓扑、自动生成3D拓扑、自动发现并监控接口、捕获异常事务和慢事务,大幅提升线上问题诊断的效率。
前提条件
- 创建Kubernetes集群
- 开通和升级ARMS
说明 PHP应用监控处于公测期,使用不会产生费用。
背景信息
应用实时监控服务ARMS(Application Real-Time Monitoring Service)是一款阿里云应用性能管理(APM)类监控产品。只要为部署在容器服务Kubernetes版中的Java应用安装ARMS应用监控组件,您无需修改任何代码,就能借助ARMS对Java应用进行全方位监控,以便您更快速地定位出错接口和慢接口、重现调用参数、检测内存泄漏、发现系统瓶颈,从而大幅提升线上问题诊断问题的效率。ARMS应用监控的详细信息请参见应用监控概述。
安装ARMS应用监控组件
- 登录容器服务管理控制台。
- 在左侧导航栏选择市场 > 应用目录,在阿里云应用页签下搜索并单击ack-arms-pilot。
- 在应用目录 - ack-arms-pilot页面上,在右侧的创建面板中选择前提条件中创建的集群,并单击创建。
为容器服务Kubernetes版授权
执行以下操作步骤为容器服务Kubernetes版授予ARMS资源的访问权限。
- 使用主账号登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在目标集群的信息管理页面上,单击集群资源页签上的Worker RAM角色链接。
- 在RAM访问控制控制台的RAM角色管理页面上,单击权限管理页签上的目标权限策略名称链接。
- 在策略内容页签上单击修改策略内容,并在右侧的修改策略内容面板将以下内容添加到策略内容中,最后单击确认。
{ "Action": "arms:*", "Resource": "*", "Effect": "Allow" }
为Java应用开启ARMS应用监控
以下步骤分别对应创建新应用和已有应用这两种情况。
如需在创建新应用的同时开启ARMS应用监控,请按以下步骤操作:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载 > 无状态。
- 在无状态页面右上角单击使用模板创建。
- 在使用模板创建页面上选择示例模板,并在模板(YAML格式)中将以下
annotations
添加到spec / template / metadata层级下。
说明 请将替换为您的应用名称。
annotations: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>"
创建一个无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:
展开查看完整示例YAML文件(Java)apiVersion: v1 kind: Namespace metadata: name: arms-demo **---** apiVersion: apps/v1beta1 <font style="color:#888888;"># for versions before 1.8.0 use apps/v1beta1</font> kind: Deployment metadata: name: arms-springboot-demo namespace: arms-demo labels: app: arms-springboot-demo spec: replicas: 2 selector: matchLabels: app: arms-springboot-demo template: metadata: annotations: armsPilotAutoEnable: <font style="background-color:#FFF0F0;">"on"</font> armsPilotCreateAppName: <font style="background-color:#FFF0F0;">"arms-k8s-demo"</font> labels: app: arms-springboot-demo spec: containers: - resources: limits: cpu: 0.5 image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1 imagePullPolicy: Always name: arms-springboot-demo env: - name: SELF_INVOKE_SWITCH value: <font style="background-color:#FFF0F0;">"true"</font> - name: COMPONENT_HOST value: <font style="background-color:#FFF0F0;">"arms-demo-component"</font> - name: COMPONENT_PORT value: <font style="background-color:#FFF0F0;">"6666"</font> - name: MYSQL_SERVICE_HOST value: <font style="background-color:#FFF0F0;">"arms-demo-mysql"</font> - name: MYSQL_SERVICE_PORT value: <font style="background-color:#FFF0F0;">"3306"</font> **---** apiVersion: apps/v1beta1 <font style="color:#888888;"># for versions before 1.8.0 use apps/v1beta1</font> kind: Deployment metadata: name: arms-springboot-demo-subcomponent namespace: arms-demo labels: app: arms-springboot-demo-subcomponent spec: replicas: 2 selector: matchLabels: app: arms-springboot-demo-subcomponent template: metadata: annotations: armsPilotAutoEnable: <font style="background-color:#FFF0F0;">"on"</font> armsPilotCreateAppName: <font style="background-color:#FFF0F0;">"arms-k8s-demo-subcomponent"</font> labels: app: arms-springboot-demo-subcomponent spec: containers: - resources: limits: cpu: 0.5 image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1 imagePullPolicy: Always name: arms-springboot-demo-subcomponent env: - name: SELF_INVOKE_SWITCH value: <font style="background-color:#FFF0F0;">"false"</font> - name: MYSQL_SERVICE_HOST value: <font style="background-color:#FFF0F0;">"arms-demo-mysql"</font> - name: MYSQL_SERVICE_PORT value: <font style="background-color:#FFF0F0;">"3306"</font> **---** apiVersion: v1 kind: Service metadata: labels: name: arms-demo-component name: arms-demo-component namespace: arms-demo spec: ports: <font style="color:#888888;"># the port that this service should serve on</font> - name: arms-demo-component-svc port: 6666 targetPort: 8888 <font style="color:#888888;"># label keys and values that must match in order to receive traffic for this service</font> selector: app: arms-springboot-demo-subcomponent **---** apiVersion: apps/v1beta1 <font style="color:#888888;"># for versions before 1.8.0 use apps/v1beta1</font> kind: Deployment metadata: name: arms-demo-mysql namespace: arms-demo labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - resources: limits: cpu: 0.5 image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1 name: mysql ports: - containerPort: 3306 name: mysql **---** apiVersion: v1 kind: Service metadata: labels: name: mysql name: arms-demo-mysql namespace: arms-demo spec: ports: <font style="color:#888888;"># the port that this service should serve on</font> - name: arms-mysql-svc port: 3306 targetPort: 3306 <font style="color:#888888;"># label keys and values that must match in order to receive traffic for this service</font> selector: app: mysql **---**
执行结果
在无状态或有状态页面,目标应用的操作列将出现ARMS控制台按钮。
说明 若操作列没有出现ARMS控制台按钮,请检查您是否已授权容器服务访问ARMS资源。
13.常见故障问题解决
1.主机资源占用过高
主机CPU或内存占用过高, 需从 系统服务和容器组 两个方面查看.
通过SSH连接进入主机,输入 top 命令.
按P(大写) – 以 CPU 占用率大小的顺序排列进程列表
按M(大写) – 以内存占用率大小的顺序排列进程列表
查看是否是系统服务占用过高
通过 集群-工作组-容器组,选择指定节点,查看资源占用
容器组异常可通过在无状态应用中删除单个相应的容器组.(不是删除无状态应用)
2. rsyslog服务内存占用异常
通过SSH连接进入主机, 执行下面的命令即可
rm -rf /var/log/journal/* && systemctl restart rsyslog
3. 主机磁盘占用过多
通常为日志文件占用过多,SSH进入主机,清理过期无用的日志
4.节点出现故障
在集群-节点管理-节点菜单中 选择节点排水,可将主机上的容器组全部迁移至其他机器,进行维护
维护完成后通过调度设置,将节点重新设置为可调度
三、Redis运维指南
1、Redis日常操作
Redis日常操作有创建实例、配置白名单、账号配置、连接数据库
创建实例详见阿里云文档:
https://help.aliyun.com/document_detail/26351.html?spm=a2c4g.11186623.6.627.5475254bMMfik0
配置白名单详见阿里云文档:
https://help.aliyun.com/document_detail/107043.html?spm=a2c4g.11186623.6.628.3add4bd72mHpDz
账户配置详见阿里云文档:
https://help.aliyun.com/document_detail/92665.html?spm=a2c4g.11186623.6.737.7f183b69bZyFLj
连接数据库详见阿里云文档:
https://help.aliyun.com/document_detail/43847.html?spm=a2c4g.11186623.6.630.14803b69kC2JAo
2、监控
监控详见阿里云文档:
https://help.aliyun.com/document_detail/122091.html?spm=a2c4g.11186623.6.754.4ea213fds83JmX
阈值报警 | ||
---|---|---|
监控指标 | 阈值 | 说明 |
CPU使用率 | 80% | CPU使用率过高 |
内存使用率 | 60% | 内存不足 |
连接数使用率 | 80% | 连接数达到100%,redis将拒绝新连接创建 |
流入带宽使用率 | 80% | 流入带宽异常 |
流出带宽使用率 | 80% | 流出带宽异常 |
最大响应时间 | 3000(us) | 根据业务情况设置报警值 |
事件报警 | ||
---|---|---|
监控指标 | 阈值 | 说明 |
主动运维事件 | 80% | 实例进行运维操作如:实例迁移 |
异常 | 60% | 实例发生了异常,如:高可用切换 |
维护 | 80% | 实例发生维护 |
3、备份
Redis备份与恢复详见阿里云文档:
https://help.aliyun.com/document_detail/43886.html?spm=a2c4g.11186623.6.783.4fca30864R3YAq
4、常见问题
Redis常见问题详见阿里云文档:
https://help.aliyun.com/knowledge_detail/146768.html?spm=a2c4g.11186623.6.1009.2389441but8bt8
四、RDS运维指南
1、RDS日常操作
RDS日常操作有创建实例、配置白名单、申请或者释放外网地址、创建数据库和账号、连接RDS实例
创建实例详见阿里云文档:
https://help.aliyun.com/document_detail/164594.html?spm=a2c4g.11186623.6.591.320d2944Kz2jBF
配置白名单详见阿里云文档:
https://help.aliyun.com/document_detail/43185.html?spm=a2c4g.11186623.6.669.bb0135b20ZEHH4
申请或者释放外网地址详见阿里云文档:
https://help.aliyun.com/document_detail/26128.html?spm=a2c4g.11186623.6.725.2857d89eepp957
创建数据库和账号详见阿里云文档:
https://help.aliyun.com/document_detail/87038.html?spm=a2c4g.11186623.6.672.7bad11daCmuJmq
连接RDS实例详见阿里云文档:
https://help.aliyun.com/document_detail/144867.html?spm=a2c4g.11186623.6.724.2ab11fbbkc2wt8
2、监控
RDS监控详见阿里云文档:
https://help.aliyun.com/document_detail/102074.html?spm=a2c4g.11186623.6.804.95da41cbmGqi1D
3、备份与恢复
详见阿里云文档:
https://help.aliyun.com/document_detail/53622.html?spm=a2c4g.11186623.6.1692.528f7a5fMSjtgG
4、安全
详见阿里云文档:
https://help.aliyun.com/document_detail/66893.html?spm=a2c4g.11186623.6.1688.18c6287e0vYzSP
5、常见问题处理
详见阿里云文档:
https://help.aliyun.com/knowledge_detail/145564.html?spm=a2c4g.11186623.6.1887.3feb61392H6xsd
五、PolarDB运维指南
1、PolarDB日常操作
PolarDB日常操作有创建PolarDB数据库集群、设置集群白名单、创建数据库账号、查看连接地址、连接数据库集群
创建PolarDB数据库集群详见阿里云文档:
https://help.aliyun.com/document_detail/58769.htm?spm=a2c4g.11186623.2.3.55006252a4ObXI#task-1580301
设置集群白名单详见阿里云文档:
https://help.aliyun.com/document_detail/68506.htm?spm=a2c4g.11186623.2.4.55006252XYHPCC#task-1580301
创建数据库账号详见阿里云文档:
https://help.aliyun.com/document_detail/68508.htm?spm=a2c4g.11186623.2.5.55006252RdHGtO#task-1580301
查看连接地址详见阿里云文档:
https://help.aliyun.com/document_detail/68510.htm?spm=a2c4g.11186623.2.6.550062525lJOKf#task-1580301
连接数据库集群详见阿里云文档:
https://help.aliyun.com/document_detail/68511.htm?spm=a2c4g.11186623.2.7.55006252kzFvLT#task-1580301
2、监控
监控详见阿里云文档:
https://help.aliyun.com/document_detail/68555.html?spm=a2c4g.11186623.6.687.4e3b2264sAGTUG
3、备份恢复
备份与恢复详见阿里云文档:
https://help.aliyun.com/document_detail/72672.html?spm=a2c4g.11186623.6.672.1c55f9e5SqGK8I
4、常见问题处理方案
常见问题处理方案详见阿里云文档:
https://help.aliyun.com/document_detail/119094.html?spm=a2c4g.11186623.6.865.1e1171fcVm53fA
六、Elasticsearch运维指南
1、日常操作
日常操作有创建集群实例、访问实例、创建索引、创建文档并插入数据、搜索数据、删除索引、释放实例
详见阿里云文档:
2、监控
详见阿里云文档:
https://help.aliyun.com/document_detail/137967.html?spm=a2c4g.11186623.6.640.7f229184DR87f0