• 关于 kubectl阿里云镜像 的搜索结果

问题

通过kubectl create制定编排文件的方式不行吗?

初商 2019-12-01 19:46:27 4 浏览量 回答数 0

回答

背景 人工智能与机器学习已经被广泛应用到各个领域,近些年来各种各样的训练模型被提出,更多的训练任务跑到了云上。然而上云之后,想要轻松、持久地运行训练任务,仍有一些痛点,例如: 环境搭建:例如如果需要GPU实例,你必须首先购买GPU实例并安装GPU驱动,即便你把训练任务容器化后,还需要安装 gpu runtime hook ,使用 ASK + ECI,这些都不需要你操心 缺乏弹性:环境准备好,任务跑完后,为了节约成本,也许你需要释放闲置资源,下次启动任务时再重新创建实例配置环境,或者是计算节点不够,需要扩容,同样需要再次配置环境,使用ASK+ECI,能真正做到让你根据自己的业务按需使用,按需付费 本文将会介绍如何使用阿里云Serverless Kubernetes(ASK) + ECI,快速完成一个github上基于GPU的 TensorFlow 训练任务。 具体步骤 创建以及操作集群的详细步骤参考:操作Serverless Kubernetes集群的方式 前往容器服务控制台创建 Serverless Kubernetes集群,指定地域、vpc、vSwitch(如果你要走公网拉取镜像,或者训练任务需要出公网,请配置NAT网关)ask-create 集群创建完成后,点【管理】,按照提示完成 kubectl 的安装与配置 为了加速 GPU 镜像的拉取,ECI 提供了 ImageCache 功能,并且通过virtual kubelet无缝集成到Kubernetes CRD 中。第一次需要拉取镜像,时间取决于镜像大小,请耐心等待 创建 ImageCache:kubectl create -f imagecache.yaml imagecache.yaml 内容如下: apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: tensorflow spec: images: - registry-vpc.cn-zhangjiakou.aliyuncs.com/eci/tensorflow:1.0 # 训练任务的镜像,建议放到阿里云vpc私网仓库 可以通过命令查询进度:kubectl get imagecache tensorflow 使用镜像缓存,创建训练任务:kubectl create -f gpu_pod.yaml gpu_pod.yaml 内容如下: apiVersion: v1 kind: Pod metadata: name: tensorflow annotations: k8s.aliyun.com/eci-gpu-type: "P4" # GPU规格,或者你可以指定指定和ECS一样的instanceType创建 如:k8s.aliyun.com/eci-instance-type: "ecs.gn5i-c2g1.large" k8s.aliyun.com/eci-image-cache: "true" # 开启镜像缓存自动匹配 spec: containers: - image: registry-vpc.cn-zhangjiakou.aliyuncs.com/eci/tensorflow:1.0 # 训练任务的镜像 name: tensorflow command: - "sh" - "-c" - "python models/tutorials/image/imagenet/classify_image.py" # 触发训练任务的脚本 resources: limits: nvidia.com/gpu: "1" # 容器所需的GPU个数 volumeMounts: - name: nfs-pv mountPath: /tmp/imagenet volumes: - name: nfs-pv # 训练结果持久化到NAS文件存储 nfs: path: /share server: 0912430d-1nsl.cn-zhangjiakou.extreme.nas.aliyuncs.com restartPolicy: OnFailure 使用以下命令查询Pod事件信息和日志 kubectl describe pod tensorflow kubectl logs tensorflowlogs NAS存储里已经有训练完成的数据nas panda 在 ECI 控制台可以看到运行成功的实例,运行成功表示实例已经到达终态,此时ECI会回收底层计算资源,不再对该Pod进行计费eci 总结 使用 ASK + ECI,只需要以下几步,就可以轻松启动一个基于GPU实例的训练任务: 准备好训练模型的容器镜像,准备好训练数据/结果的路径 创建 ASK 集群 准备好3个yaml文件,在集群中依次创建 同时使用此方案的优势: 按需付费,免运维 一次配置,无限次复用 镜像缓存给你带来极致弹性的体验 数据与训练模型解耦,训练数据持久化(ECI同时支持阿里云云盘)

1934890530796658 2020-03-20 18:25:25 0 浏览量 回答数 0

回答

本文档介绍 Helm 的基本概念和使用方式,演示在阿里云的 Kubernetes 集群上利用 Helm 来部署示例应用 WordPress 和 Spark。 前提条件 通过 Helm 部署应用之前,利用阿里云容器服务来创建 Kubernetes 集群。参见创建Kubernetes集群。 在 Kubernetes 集群创建的同时,Tiller 将会被自动部署到集群之中,并且在所有的 master 节点上自动安装 Helm CLI 以及配置指向阿里云的 Chart 存储库。 查看您集群中 Kubernetes 的版本。 仅支持 Kubernetes 版本 1.8.4 及以上的集群。对于 1.8.1 版本的集群,您可以在集群列表中进行集群升级操作。 背景信息 在 Kubernetes 中,应用管理是需求最多、挑战最大的领域。Helm 项目提供了一个统一软件打包方式,支持版本控制,简化 Kubernetes 应用分发与部署中的复杂性。阿里云容器服务在应用目录管理功能中集成了 Helm 工具,并进行了功能扩展,支持官方 Repository,让您快速部署应用。您可以通过命令行或容器服务控制台界面两种方式进行部署。 本文档介绍 Helm 的基本概念和使用方式,演示在阿里云的 Kubernetes 集群上利用 Helm 来部署示例应用 WordPress 和 Spark。 Helm 基本概念 Helm 是由 Deis 发起的一个开源工具,有助于简化部署和管理 Kubernetes 应用。 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用 Kubernetes 构建的应用,它包含以下几个基本概念。 Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。 Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。 Repository:用于发布和存储 Chart 的存储库。 Helm 组件 Helm 采用客户端/服务器架构,由如下组件组成: Helm CLI 是 Helm 客户端,可以在 Kubernetes 集群的 master 节点或者本地执行。 Tiller 是服务器端组件,在 Kubernetes 集群上运行,并管理 Kubernetes 应用程序的生命周期。 Repository 是 Chart 存储库,Helm 客户端通过 HTTP 协议来访问存储库中 Chart 的索引文件和压缩包。 通过控制台界面部署应用 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中的市场 > 应用目录,进入应用目录列表页面。 选择一个 chart(本示例选择 WordPress),单击该 chart,进入 chart 详情页面。 chart详情 在页面右侧,填写部署的基本信息。 集群:应用要部署到的集群。 命名空间:选择命名空间。默认为 default。 发布名称:填写应用发布的名称。 部署基本信息 单击参数,对配置进行修改。 本示例中使用云盘的动态数据卷绑定一个PVC,参见云盘存储卷使用说明。 说明 您需要预先创建一个云盘存储卷(PV),并且存储卷的容量不能小于PVC定义的数值。 修改参数配置 配置完成后,单击创建,部署成功后,默认进入该应用的发布页面。 创建应用 单击左侧导航栏中的路由与负载均衡 > 服务,选择所需的集群和命名空间,找到对应的服务,您可获取 http/https 外部端点的地址。 服务 单击上面的访问地址,进入 WordPress 博客发布页面。 通过命令行部署应用 通过命令行部署应用时,您可以 SSH 登录 Kubernetes 集群的 master 节点 (Helm CLI 已自动安装并已配置Repository)进行操作,参见SSH 访问 Kubernetes 集群。您也可以在本地安装配置 kubectl 和 Helm CLI。 本示例以在本地安装配置 kubectl 和 Helm CLI 并部署 WordPress 和 Spark 应用为例进行说明。 安装配置 kubectl 和 Helm CLI。 在本地计算机上安装和配置 kubectl。 参见通过kubectl连接Kubernetes集群。 若要查看 Kubernetes 目标集群的信息,键入命令 kubectl cluster-info。 在本地计算机上安装 Helm。 安装方法,参见 Install Helm。 部署 WordPress。 下面我们将利用 Helm,来部署一个 WordPress 博客网站。 输入以下命令。 helm install --name wordpress-test stable/wordpress 说明 阿里云 Kubernetes 服务提供块存储(云盘)的动态存储卷支持,您需要预先创建一个云盘存储卷。 得到以下的结果。 NAME: wordpress-test LAST DEPLOYED: Mon Nov 20 19:01:55 2017 NAMESPACE: default STATUS: DEPLOYED ... 利用如下命令查看 WordPress 的 release 和 service。 helm list kubectl get svc 利用以下命令查看 WordPress 相关的 Pod,并等待其状态变为 Running。 kubectl get pod 利用以下命令获得 WordPress 的访问地址。 echo http://$(kubectl get svc wordpress-test-wordpress -o jsonpath='{.status.loadBalancer.ingress[0].ip}') 通过上面的 URL,可以在浏览器上看到熟悉的 WordPress 站点。 也可以根据 Charts 的说明,利用如下命令获得 WordPress 站点的管理员用户和密码。 echo Username: user echo Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) 如需彻底删除 WordPress 应用,可输入如下命令。 helm delete --purge wordpress-test 使用第三方的 Chart 存储库 您除了可以使用预置的阿里云的 Chart 存储库,也可以使用第三方的 Chart 存储库(前提是网络是可达的)。使用如下命令格式添加第三方 Chart 存储库。 helm repo add 存储库名 存储库URL helm repo update 关于 Helm 相关命令的说明,您可以参见 Helm 文档。 参考信息 Helm 催生了社区的发展壮大,越来越多的软件提供商,如 Bitnami 等公司,开始提供高质量的 Charts。您可以在 https://kubeapps.com/ 中寻找和发现已有的 Charts。

1934890530796658 2020-03-31 15:46:51 0 浏览量 回答数 0

海外云虚拟主机包年25元/月起

海外独享虚拟主机全面上线,助力构建海外网站,提升公司国际形象;全球有效覆盖,超高性价比;建站入门首选,助力出口,适合跨境贸易企业。

问题

【精品问答】Cloud Shell 云命令行

问问小秘 2020-04-24 17:38:41 6 浏览量 回答数 1

回答

本文主要介绍虚拟节点和ECI,以及如何通过Virtual Node Addon插件部署虚拟节点创建ECI Pod。 虚拟节点和弹性容器实例ECI 阿里云弹性容器实例ECI(Elastic Container Instance)是面向容器的无服务器弹性计算服务,提供免运维、强隔离、快速启动的容器运行环境。使用ECI无需购买和管理底层 ECS 服务器,让用户更加关注在容器应用而底层基础设施的维护工作。用户可按需创建ECI,仅为容器配置的资源付费(按量按秒计费)。 虚拟节点Virtual Node来源于Kubernetes社区的Virtual Kubelet技术,其实现了Kubernetes与弹性容器实例ECI的无缝连接,让 Kubernetes 集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。关于Virtual Kubelet的工作原理及其架构,请参见Virtual Kubelet 因为Virtual Node可以轻松支持更高弹性和Pod容量,灵活动态的按需创建ECI Pod,免去集群容量规划的麻烦,所以它非常适合运行在如下多个场景,帮助用户极大降低计算成本,提升计算弹性效率。 在线业务的波峰波谷弹性伸缩:如在线教育、电商等行业有着明显的波峰波谷计算特征。使用虚拟节点可以显著减少固定资源池的维护,降低计算成本。 数据计算:使用虚拟节点承载Spark、Presto等计算场景,有效降低计算成本。 CI/CD Pipeline:Jenkins、Gitlab-Runner。 Job任务:定时任务、AI。 阿里云容器服务基于虚拟节点和ECI提供了多种Serverless Container产品形态,包括Serverless Kubernetes(ASK)和ACK on ECI,充分支撑各种弹性和免节点运维场景的用户诉求。virtual node 在ACK集群中部署虚拟节点Addon 说明 在Serverless Kubernetes集群中我们无需手动部署虚拟节点Addon,用户可以直接创建ECI Pod。托管版或专属版则需要先部署ack-virtual-node addon后才可以创建ECI Pod。 在容器服务Kubernetes版(ACK)集群中部署虚拟节点Addon前, 您需要创建一个 Kubernetes 托管版或者专属版集群。详情请参见创建 Kubernetes 托管版集群。 您需要开通弹性容器实例服务。登录弹性容器实例控制台开通相应的服务。 您需要确认集群所在区域在ECI支持的地域列表内。登录弹性容器实例控制台查看已经支持的地域和可用区。 登录容器服务管理控制台。 在控制台左侧导航栏中,单击市场 > 应用目录,并在右侧选中ack-virtual-node。 在应用目录-ack-virtual-node页面,单击参数,配置虚拟节点参数。 参数 参数含义 获取路径 ECI_REGION 地域名称 您可以在集群基本信息的基本信息区域中,获取地域的值。 说明 例如,华东1:cn-hangzhou ECI_VPC 集群的VPC 您可以在集群基本信息的集群资源区域中,获取虚拟专有网络 VPC的值。 ECI_VSWITCH 虚拟交换机 您可以在节点列表单击某个节点,在实例详情页签的配置信息区域中,获取虚拟交换机的值。 说明 请确认当前交换机在ECI支持的可用区列表中。 虚拟交换机支持多可用区。因此,这里可以填写多个vSwitch,例如ECI_VSWITCH: "vsw-xxxxxxx1, vsw-xxxxxxx2, vsw-xxxxxxx3"。 ECI_SECURITY_GROUP 安全组ID 您可以在节点列表单击某个节点,在本实例安全组页签的安全组列表区域中,获取安全组ID的值。 ECI_ACCESS_KEY 用户AccessKey 请参见如何获取AccessKey。 ECI_SECRET_KEY 用户SecretKey 请参见如何获取AccessKey。 ALIYUN_CLUSTERID 集群ID 您可以在集群基本信息的基本信息区域中,获取集群ID的值。 配置完成后,在右侧的创建页面,选择对应的集群,可以看到命名空间已设定为kube-system,发布名称已设定为ack-virtual-node,单击创建。创建插件 安装完成后,在控制台左侧导航栏中,单击集群 > 节点,在节点列表页面可以看到添加了虚拟节点virtual-node-eci。添加节点 执行以下命令查看virtual-node-controller和virtual-node-admision-controller部署状态。详情请参见在CloudShell上通过kubectl管理Kubernetes集群。 kubectl -n kube-system get statefulset virtual-node-eci NAME READY AGE virtual-node-eci 1/1 1m kubectl -n kube-system get deploy ack-virtual-node-affinity-admission-controller NAME READY UP-TO-DATE AVAILABLE AGE ack-virtual-node-affinity-admission-controller 1/1 1 1 1m kubectl -n kube-system get pod|grep virtual-node-eci virtual-node-eci-0 1/1 Running 0 1m kubectl get no|grep virtual-node-eci virtual-node-eci-0 Ready agent 1m v1.11.2-aliyun-1.0.207 调度Pod到虚拟节点 说明 此操作不适用于Serverless Kubernetes集群。 当集群中存在虚拟节点时,您可以把Pod调度到虚拟节点上,Virtual Node Controller将会创建出相应的ECI Pod。您可以通过以下三种方法操作。 配置Pod的nodeSelector和tolerations。 虚拟节点有特殊的Taints,Pod需要配置nodeSelector和tolerations后才能指定调度到虚拟节点上。示例如下: apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists 配置Pod标签。 基于virtual-node-affinity-admission-controller的webhook,对于有特定label(eci=true)的Pod,webhook会将其自动调度到虚拟节点上。示例如下: kubectl run nginx --image nginx -l eci=true kubectl get pod -o wide|grep virtual-node-eci nginx-7fc9f746b6-r4xgx 0/1 ContainerCreating 0 20s 192.168.1.38 virtual-node-eci-0 配置Namespace标签。 基于virtual-node-affinity-admission-controller的webhook,对于有特定label的namespace(virtual-node-affinity-injection=enabled)中创建的Pod,webhook会将其自动调度到虚拟节点上。示例如下: kubectl create ns vk kubectl label namespace vk virtual-node-affinity-injection=enabled kubectl -n vk run nginx --image nginx kubectl -n vk get pod -o wide|grep virtual-node-eci nginx-6f489b847d-vgj4d 1/1 Running 0 1m 192.168.1.37 virtual-node-eci-0 修改虚拟节点Controller的配置 说明 此操作不适用于Serverless Kubernetes集群。 虚拟节点Controller的配置决定了其调度ECI Pod的行为和ECI运行环境配置,包括vswitch和安全组配置等。我们可以根据需要灵活的修改Controller配置,修改配置后不会影响已经运行的ECI Pod,会立即生效于新建ECI Pod。 修改虚拟节点Controller配置的方法如下。 kubectl -n kube-system edit statefulset virtual-node-eci 常用的变更操作如下。 更新virtual-node controller版本。 当需要使用更新虚拟节点功能时,需要更新virtual-node controller镜像至最新版本。例如支持ECI Pod clusterIP访问的vk镜像版本需要高于v1.0.0.2-aliyun。 修改安全组配置ECI_SECURITY_GROUP。 用户可以修改此环境变量,改变ECI Pod的安全组。 修改vswitch配置ECI_VSWITCH。 用户可以修改此环境变量,改变ECI Pod所在的vswitch。我们建议用户配置多个vswitch支持多可用区,这样当单可用区库存不足时,Controller会选择另外一个可用区创建ECI Pod。 修改kube-proxy配置ECI_KUBE_PROXY。 此环境变量默认值为true,表示ECI Pod默认可以访问集群中的ClusterIP Service。如果ECI Pod无需访问clusterIP service时,例如Job计算场景,用户可以设置此环境变量为false关闭kube-proxy功能。另外在一些规模化场景,例如集群中需要启动大量ECI Pod时,ECI中的kube-proxy和kubernetes apiserver之间的并发连接数也会大量增加,用户同样可以选择关闭kube-proxy功能,减少对apiserver的压力提升可扩展性,改用privatezone方式让ECI Pod访问集群中的service。 创建多个虚拟节点。 我们推荐使用单个虚拟节点支撑3000个ECI Pod,当需要创建更多ECI Pod时,可以创建更多的虚拟节点,这样集群中能够支撑的ECI Pod数量也会相应成倍增长。方法是修改statefulset的副本数量,其数量代表集群中虚拟节点的数量,virtual-node-controller pod与虚拟节点一一对应,分别管理虚拟节点上的ECI Pod,controller之间互不影响。所示如下: kubectl -n kube-system scale statefulset virtual-node-eci --replicas=4 statefulset.apps/virtual-node-eci scaled kubectl get no NAME STATUS ROLES AGE VERSION cn-hangzhou.192.168.1.1 Ready 63d v1.12.6-aliyun.1 cn-hangzhou.192.168.1.2 Ready 63d v1.12.6-aliyun.1 virtual-node-eci-0 Ready agent 6m v1.11.2-aliyun-1.0.207 virtual-node-eci-1 Ready agent 1m v1.11.2-aliyun-1.0.207 virtual-node-eci-2 Ready agent 1m v1.11.2-aliyun-1.0.207 virtual-node-eci-3 Ready agent 1m v1.11.2-aliyun-1.0.207 删除虚拟节点 说明 此操作不适用于Serverless Kubernetes集群。 通常情况下我们无需删除虚拟节点,虚拟节点不同与真实节点,不会占用集群计算资源。如果用户需要删除虚拟节点,我们建议手动先驱逐虚拟节点上的Pod,或者删除所有ECI Pod,然后删除Controller和节点。在ECI Pod存在时删除virtual-node controller可能会导致ECI实例的残留。 kubectl drain virtual-node-eci-0 ... kubectl -n kube-system delete statefulset virtual-node-eci kubectl delete no virtual-node-eci-0 ...

1934890530796658 2020-03-31 20:20:53 0 浏览量 回答数 0

回答

本文主要为您介绍如何创建和使用带有 NPU 资源的 Kubernetes 集群。 前提条件 您需要开通容器服务和访问控制(RAM)服务。 背景信息 与大型算法模型中 CPU 相比,NPU 处理器最明显的优势是信息处理能力快。NPU 采用了“数据驱动并行计算”架构,颠覆了 CPU 所采用的传统冯·诺依曼计算机架构,这种数据流类型的处理器大大提升了计算能力与功耗的比率。NPU 特别适合处理视频、图像类的海量多媒体数据的场景,不仅速度比 CPU 要高出 100 ~ 1000 倍,同时功耗也远远低于 CPU。 您可以通过阿里云 Kubernetes 集群 + ALI NPU 运行机器学习,图像处理等高运算密度等任务,实现快速部署和弹性扩缩容等功能。 说明 如果想了解 ALI NPU 的相关信息,请参见 AliNPU Website。 本文将以创建 Kubernetes 集群时,添加 ecs.ebman1.26xlarge 实例为例说明如何使用 NPU。 创建集群过程中,容器服务会进行如下操作: 创建 ECS,配置管理节点到其他节点的 SSH 的公钥登录,通过 CloudInit 安装配置 Kubernetes 集群。 创建安全组,该安全组允许 VPC 入方向全部 ICMP 端口的访问。 如果您不使用已有的 VPC 网络,会为您创建一个新的 VPC 及 VSwitch,同时为该 VSwitch 创建 SNAT。 创建 VPC 路由规则。 创建 NAT 网关及 EIP。 创建 RAM 子账号和 AccessKey,该子账号拥有 ECS 的查询、实例创建和删除的权限,添加和删除云盘的权限,SLB 的全部权限,云监控的全部权限,VPC 的全部权限,日志服务的全部权限,NAS 的全部权限。Kubernetes 集群会根据用户部署的配置相应的动态创建 SLB,云盘,VPC路由规则。 创建内网 SLB,暴露 6443 端口。 创建公网 SLB,暴露 6443、8443和 22 端口(如果您在创建集群的时候选择开放公网 SSH 登录,则会暴露 22 端口;如果您选择不开放公网 SSH 访问,则不会暴露 22 端口)。 使用限制 随集群一同创建的负载均衡实例只支持按量付费的方式。 Kubernetes 集群仅支持专有网络 VPC。 每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败。请在创建集群前确认您的配额。 如果您需要提高配额,请提交工单申请。 每个账号默认最多可以创建 5 个集群(所有地域下),每个集群中最多可以添加 40 个节点。如果您需要创建更多的集群或者节点,请提交工单申请。 说明 Kubernetes 集群中,VPC 默认路由条目不超过48条,意味着 Kubernetes 集群使用 VPC 时,默认节点上限是 48 个,如果需要更大的节点数,需要您先对目标 VPC 开工单,提高 VPC 路由条目,再对容器服务提交工单。 每个账号默认最多可以创建 100 个安全组。 每个账号默认最多可以创建 60 个按量付费的负载均衡实例。 每个账号默认最多可以创建 20 个EIP。 ECS 实例使用限制: 仅支持 CentOS 操作系统。 支持创建按量付费和包年包月的 ECS 实例。 说明 实例创建后,您可以通过 ECS 管理控制台将按量付费转预付费,请参见按量付费转包年包月。 创建 NPU 型 Kubernetes 集群 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏的集群 > 集群,单击页面右上角的创建 Kubernetes 集群。 在选择集群模板页面,选择异构计算专有集群页面,并单击创建,进入Kubernetes 专有版页面。 本例中创建的是异构计算专有集群,您也可以在选择集群模板时选择异构计算托管集群并进行以下操作。选择集群模板 说明 为了创建 NPU 集群,通常情况下,Worker 节点使用 NPU 类型的 ECS。集群其他参数配置,请参见创建 Kubernetes 集群。 设置 Worker 节点的配置信息。本例中将 Worker 节点作为 NPU 工作节点,选择 NPU 计算型实例规格 ecs.ebman1.26xlarge。 若您选择新增实例,则需要选择 Worker 节点的系列和规格,以及需要创建的 Worker 节点的数量(本示例创建 2 个 NPU 节点,实例类型为 ecs.ebman1.26xlarge)。 设置节点 若您选择添加已有实例,则需要预先在此地域下创建 NPU 云服务器。请参见实例规格族。 完成其他配置后,单击创建集群,启动部署。 集群创建成功后,单击左侧导航栏中的集群 > 节点,进入节点列表页面。 选择所需的集群,选择创建集群时配置的 Worker 节点,单击操作列的更多 > 详情,查看该节点挂载的 NPU 设备。 配置私有镜像密钥 如果您需要使用阿里云提供的 NPU 类型的 Docker 镜像,可以联系与您对接的客户经理或销售人员,获取一个已授权的账号。下载 Docker 镜像并在 Kubernetes 集群中配置私有镜像密钥。 在 Kubernetes 菜单下,单击左侧导航栏的集群 > 集群,进入集群列表页面。 选择所需的集群并单击操作列更多 > 通过 CloudShell 管理集群。 集群连接成功后,界面显示如下:显示结果 执行以下命令,创建一个 docker-registry 类型的 secret。 kubectl create secret docker-registry regsecret --docker-server=registry.cn-shanghai.aliyuncs.com --docker-username=<your_username> --docker-password=<your_password> 说明 regsecret:指定密钥的键名称,可自行定义。 --docker-server:指定 Docker 仓库地址。 --docker-username:获取的账号。 --docker-password:获取的密码。 在 Pod 的配置文件中添加 secret,拉取NPU类型的私有镜像。 apiVersion: v1 kind: Pod metadata: name: test-npu spec: containers: - name: <容器名称> image: registry.cn-shanghai.aliyuncs.com/hgai/<NPU类型的docker镜像> imagePullSecrets: - name: <secret名称> 说明 imagePullSecrets 是声明拉取镜像时需要指定密钥。 regsecret 必须和步骤3生成密钥的键名一致。 image 中的 Docker 仓库名称必须和 --docker-server 中的 Docker 仓库名一致。 使用 NPU 资源 如果某一个 Pod 需要使用 NPU 资源,需要在resources.limits定义aliyun.com/npu的值。 apiVersion: v1 kind: Pod metadata: name: <pod名称> spec: containers: - name: <容器名称> image: <镜像名称> resources: limits: aliyun.com/npu: <请求npu资源数> 运行 TensorFLow 的 NPU 实验环境 您可以在集群中使用 NPU 资源完成模型训练。本例中,将会启动一个使用 NPU 资源的 Pod 进行模型训练。 连接集群,请参见在CloudShell上通过kubectl管理Kubernetes集群 。 在 CloudShell 界面执行以下操作。 cat > test-pod.yaml <<- EOF apiVersion: v1 kind: Pod metadata: name: test-npu-pod spec: restartPolicy: Never imagePullSecrets: - name: regsecret containers: - name: resnet50-npu image: registry.cn-shanghai.aliyuncs.com/hgai/tensorflow:v1_resnet50-tensorflow1.9.0-toolchain1.0.2-centos7.6 resources: limits: aliyun.com/npu: 1 # requesting NPUs EOF 执行如下命令,创建 Pod。 kubectl apply -f test-pod.yaml 执行以下命令,查看 Pod 的状态。 kubectl get po test-npu-pod 说明 如果Pod 为 Error 状态,请执行kubectl logs test-npu-pod命令监听 Pod 日志,并排查修改。 执行结果 等待一段时间后,您可以通过执行如下命令查看 Pod 的状态。 kubectl get po test-npu-pod 如果查看到 Pod 的状态为 Completed,再执行如下命令查看日志。 kubectl logs test-npu-pod 此时看到日志显示结果如下,表示训练任务完成。 2019-10-30 12:10:50.389452: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA 100%|##########| 98/98 [00:26<00:00, 3.67it/s] resnet_v1_50, result = {'top_5': 0.9244321584701538, 'top_1': 0.7480267286300659}

1934890530796658 2020-03-27 10:02:57 0 浏览量 回答数 0

回答

背景 ECI容器组实例创建过程中,大部分时间消耗在镜像下载阶段,为加速ECI容器组创建速度,ECI提供镜像缓存功能,用户事先将需要用到的镜像作为云盘快照缓存,在创建ECI容器组实例时基于快照创建,避免或减少镜像层下载,从而提升ECI容器组实例创建速度。经实测,基于dockerhub的flink镜像(386.26MB)创建Pod,普通创建eci过程中,镜像准备阶段需要耗费50s,使用镜像快照后镜像准备阶段仅需5s。因此在创建eci过程中,镜像准备阶段节省时间45s。具体的提升速度跟Pod使用的镜像个数,镜像大小和镜像仓库网络因素决定。 为方便kubernetes用户也可以使用到ECI的镜像缓存功能,因此以CRD的方式将ECI镜像缓存功能暴露给kubernetes用户。重点强调:ImageCache CRD在kubernetes集群中为Cluster级别的资源,类似于PV,被集群内所有namespace共享。 准备工作 验证您的kubernetes集群是否支持ImageCache: $ kubectl get crd/imagecaches.eci.alibabacloud.com NAME CREATED AT imagecaches.eci.alibabacloud.com 2019-09-27T01:15:07Z 输出以上信息,证明您的kubernetes集群已经支持ImageCache。 kubectl get crd/imagecaches.eci.alibabacloud.com Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "imagecaches.eci.alibabacloud.com" not found 输出以上信息,证明您的kubernetes集群不支持ImageCache,需要升级virtual-kubelet实现支持ImageCache。 virtual-kubelet升级方式: 阿里云 serverless kubernetes集群:由管理员统一负责升级 阿里云 托管 kubernetes集群:用户更新 阿里云 专有 kubernetes集群:用户更新 阿里云 自建 kubernetes集群:用户更新 准备工作完成后,您可以在您的kubernetes集群中,创建ImageCache资源,并且可以使用ImageCache创建Pod。 注:如果您的集群的ImageCache CRD不是最新的,不支持ImageCache CRD新增的参数,建议升级完virtual-kubelet后,执行如下命令: kubectl apply -f imagecache-crd-sample.yaml imagecache-crd-sample.yaml: apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: imagecaches.eci.alibabacloud.com spec: group: eci.alibabacloud.com version: v1 names: kind: ImageCache plural: imagecaches shortNames: - ic categories: - all scope: Cluster subresources: status: {} validation: openAPIV3Schema: required: - spec properties: spec: type: object required: - images properties: imagePullSecrets: type: array items: type: string images: minItems: 1 type: array items: type: string imageCacheSize: type: integer retentionDays: type: integer additionalPrinterColumns: - name: Age type: date JSONPath: .metadata.creationTimestamp - name: CacheId type: string JSONPath: .status.imageCacheId - name: Phase type: string JSONPath: .status.phase - name: Progress type: string JSONPath: .status.progress ImageCache基本操作 创建 CustomResourceDefinition 对象后,您可以操作ImageCache资源。 ImageCache全参数YAML文件: apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample spec: images: - centos:latest - busybox:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7 参数说明: 名称 类型 必选 描述 spec.images []string Y 镜像列表 spec.imagePullSecrets []string N 镜像仓库对应的Secret列表, 格式:。如果images列表中有用户私有仓库镜像,需要用户为私有镜像仓库创建secret,然后根据namespace:secretName格式,设置此参数。如若images中均是共有镜像,不需要设置此参数 spec.imageCacheSize int N 镜像缓存使用的快照盘大小,默认为20GB,取值范围为:[20, 32768],单位为GB spec.retentionDays int N 镜像缓存保留的时间,取值范围[1,65536],默认永不过期。 创建ImageCache 创建ImageCahce: kubectl create -f imagecache-secrets-test.yaml apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample-liu spec: images: - centos:latest - busybox:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7 查看ImageCache状态: liumihustdeMacBook-Pro:vk-debug liumihust$ kubectl get imagecache imagecache-sample-liu NAME AGE CACHEID PHASE PROGRESS imagecache-sample-liu 20h imc-2zeditzeoemfhqor4rf8 Ready 100% 查询ImageCache 获取Cluster下全部ImageCache列表: kubectl get imagecache imagecache-sample-liu -o yaml 查看ImageCache详情(包括属性、状态以及事件): $ kubectl get imagecache/imagecache-secrets-test -o yaml apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: creationTimestamp: "2019-10-24T13:40:56Z" generation: 1 name: imagecache-sample-liu resourceVersion: "212484735" selfLink: /apis/eci.alibabacloud.com/v1/imagecaches/imagecache-sample-liu uid: e83a1c53-f663-11e9-a0d4-fa13fc175b32 spec: imageCacheSize: 25 images: - busybox:latest - nginx status: events: - count: 1 eventTime: null firstTimestamp: "2019-10-24T13:41:40Z" involvedObject: {} lastTimestamp: "2019-10-24T13:41:40Z" message: Success pull image busybox:latest metadata: creationTimestamp: null name: busybox:latest reportingComponent: "" reportingInstance: "" source: component: kubelet host: eci type: Normal - count: 1 eventTime: null firstTimestamp: "2019-10-24T13:42:04Z" involvedObject: {} lastTimestamp: "2019-10-24T13:42:04Z" message: Success pull image nginx metadata: creationTimestamp: null name: nginx reportingComponent: "" reportingInstance: "" source: component: kubelet host: eci type: Normal - count: 1 eventTime: null firstTimestamp: "2019-10-24T13:42:06Z" involvedObject: {} lastTimestamp: "2019-10-24T13:42:06Z" message: Success pull image registry-vpc.cn-beijing.aliyuncs.com/acs/pause-amd64:3.0 metadata: creationTimestamp: null name: registry-vpc.cn-beijing.aliyuncs.com/acs/pause-amd64:3.0 reportingComponent: "" reportingInstance: "" source: component: kubelet host: eci type: Normal imageCacheId: imc-2zeditzeoemfhqor4rf8 expireDateTime: "2019-10-25T13:40:54Z" lastUpdatedTime: "2019-10-24T13:44:17Z" phase: Ready progress: 100% startTime: "2019-10-24T13:40:58Z" ImageCache快速创建Pod ImageCache资源是Cluster级别的,所以在不同的namespace下创建Pod都可以使用ImageCache实现创建Pod。 使用ImageCache快速创建Pod有两种使用方式: 明确指定方式:在创建pod时,明确的指定使用哪个ImageCacheId创建Pod 自动匹配方式:在创建Pod时,根据匹配策略自动选择最优的ImageCache创建Pod 明确指定方式 这种使用方式,有一个前提条件就是ImageCache状态必须为Ready状态,其他状态的ImageCache会导致Pod创建失败。 Deployment使用方式: 在PodTemplate增加Annotation关联ImageCache: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiigaz5jh spec: nodeName: virtual-kubelet containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent Pod使用方式: 在Pod的Yaml文件中增加Annotation关联ImageCache: apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiigaz5jh name: nginx-imagecache-id spec: containers: - image: nginx:1.7.9 imagePullPolicy: IfNotPresent name: nginx resources: limits: cpu: 300m memory: 200Mi requests: cpu: 200m memory: 100Mi nodeName: virtual-kubelet 自动匹配方式 在创建Pod时,用户通过Annotation方式,声明使用自动匹配ImageCache方式快速创建Pod,ECI管控基于用户已有的ImageCache列表依据策略进行匹配,匹配出最优的ImageCache创建Pod。如果没有匹配到合适的ImageCache,执行正常下载镜像创建Pod流程。 目前匹配策略的优先级从高到底: 镜像匹配度 匹配的镜像大小 创建时间 Deployment使用方式: 在PodTemplate增加Annotation关联ImageCache,告知ECI管控在创建Pod时是否启用自动匹配ImageCache: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: k8s.aliyun.com/eci-image-cache: "true" spec: nodeName: virtual-kubelet containers: - name: nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent Pod使用方式: 基于Annotation方式,在Pod的Yaml文件中增加Annotation: apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/eci-image-cache: "true" name: nginx-auto-match spec: containers: - image: nginx:1.7.9 imagePullPolicy: IfNotPresent name: nginx resources: limits: cpu: 300m memory: 200Mi requests: cpu: 200m memory: 100Mi nodeName: virtual-kubelet 使用建议 Pod中容器的image建议采用ImageCache中镜像,提高匹配度。 Pod中容器的ImagePullPolicy建议设置为IfNotPresent,避免镜像层重复下载。 Tip: 在创建Pod时,k8s.aliyun.com/eci-image-snapshot-id和k8s.aliyun.com/eci-image-cache同时设置时,明确指定方式优先级高于自动匹配方式 注:如果是deployment,使用cache的Annotation应该放在pod级别,而不是放在deployment级别,否则会设置失效。 删除ImageCache 删除ImageCache时,不影响基于ImageCache创建成功的Pod实例。 操作如下: $ kubectl get imagecache/imagecache-secrets-test NAME AGE CACHEID PHASE PROGRESS imagecache-secrets-test 14h imc-2ze5tm5gehgtjru0kfm8 Ready 100% $ kubectl delete imagecache/imagecache-secrets-test imagecache.eci.alibabacloud.com " imagecache-secrets-test" deleted $ kubectl get imagecache/ imagecache-secrets-test Error from server (NotFound): imagecaches.eci.alibabacloud.com " imagecache-secrets-test" not found kubernetes ImageCache API文档 Group Version Kind eci.alibabacloud.com v1 ImageCache ImageCache v1 eci.alibabacloud.com ImageCacheList: Field Type Description apiVersion string api版本: eci.alibabacloud.com/v1 kind string 资源类别: ImageCacheList metadata ListMeta Standard list metadata. Items []ImageCache 镜像缓存列表 ImageCache: Field Type Description apiVersion string api版本: eci.alibabacloud.com/v1 kind string 资源类别: ImageCache metadata ObjectMeta spec ImageCacheSpec 镜像缓存详细信息 status ImageCacheStatus 镜像缓存状态信息 ImageCacheSpec: Field Type Request Description images []string Y 镜像缓存的镜像列表 imagePullSecrets []string N 私有镜像仓库对应的Secret列表,格式:namespace:secretName imageCacheSize int N 镜像缓存的大小,默认为20GB,取值范围为:[20, 32768],单位为GB retentionDays int N 镜像缓存保留的时间,取值范围[1,65536],默认永不过期。 ImageCacheStatus: Field Type Description phase string 镜像缓存状态 progress string 标示制作过程中进度 imageCacheId string 镜像缓存ID,调用Provdier的Create操作返回,然后更新到ImageCache对象 startTime Time 镜像缓存对象创建时间 lastUpdatedTime Time 镜像缓存最后更新时间 events []Event 制作镜像cache过程中的事件信息 expireDateTime Time 镜像缓存的过期时间,有两种来源:1、用户设置了retentionDays;2、制作失败的镜像缓存自动在24小时后过期。 CreateImageCache 创建镜像缓存对象 Http Request POST /apis/eci.alibabacloud.com/v1/imagecaches curl request example curl -X POST -H 'Content-Type: application/yaml' --data ' apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-secrets-test spec: images: - registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0 imagePullSecrets: - default:acr-test ' http://127.0.0.1:8001/apis/eci.alibabacloud.com/v1/imagecaches curl response example { "apiVersion": "eci.alibabacloud.com/v1", "kind": "ImageCache", "metadata": { "creationTimestamp": "2019-10-10T03:50:47Z", "generation": 1, "name": "imagecache-secrets-test", "resourceVersion": "647052328", "selfLink": "/apis/eci.alibabacloud.com/v1/imagecaches/imagecache-secrets-test11", "uid": "2506ba37-eb11-11e9-9576-f2ef49bf1a08" }, "spec": { "imagePullSecrets": [ "default:acr-test" ], "images": [ "registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0" ] } } ListImageCache 获取镜像缓存列表 Http Request GET /apis/eci.alibabacloud.com/v1/imagecaches curl request example curl -X GET 'http://127.0.0.1:8001/apis/eci.alibabacloud.com/v1/imagecaches' curl response example { "apiVersion": "eci.alibabacloud.com/v1", "items": [ { "apiVersion": "eci.alibabacloud.com/v1", "kind": "ImageCache", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{"apiVersion":"eci.alibabacloud.com/v1","kind":"ImageCache","metadata":{"annotations":{},"name":"imagecache-secrets-test"},"spec":{"imagePullSecrets":["default:acr-test"],"images":["registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0"]}}\n" }, "creationTimestamp": "2019-10-10T01:43:48Z", "generation": 1, "name": "imagecache-secrets-test", "resourceVersion": "646375979", "selfLink": "/apis/eci.alibabacloud.com/v1/imagecaches/imagecache-secrets-test", "uid": "67460461-eaff-11e9-9774-b2c06862f69a" }, "spec": { "imagePullSecrets": [ "default:acr-test" ], "images": [ "registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0" ] }, "status": { "imageCacheId": "imc-2ze5xnx4yiply807zo0o", "lastUpdatedTime": "2019-10-10T01:47:14Z", "phase": "Ready", "progress": "100%", "startTime": "2019-10-10T01:43:49Z" } } ], "kind": "ImageCacheList", "metadata": { "continue": "", "resourceVersion": "647062964", "selfLink": "/apis/eci.alibabacloud.com/v1/imagecaches" } } GetImageCache 获取某一个镜像缓存的相信信息 Http Request GET /apis/eci.alibabacloud.com/v1/imagecaches/{name} curl request example curl -X GET 'http://127.0.0.1:8001/apis/eci.alibabacloud.com/v1/imagecaches/imagecache-secrets-test' curl response example { "apiVersion": "eci.alibabacloud.com/v1", "kind": "ImageCache", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{"apiVersion":"eci.alibabacloud.com/v1","kind":"ImageCache","metadata":{"annotations":{},"name":"imagecache-secrets-test"},"spec":{"imagePullSecrets":["default:acr-test"],"images":["registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0"]}}\n" }, "creationTimestamp": "2019-10-10T01:43:48Z", "generation": 1, "name": "imagecache-secrets-test", "resourceVersion": "646375979", "selfLink": "/apis/eci.alibabacloud.com/v1/imagecaches/imagecache-secrets-test", "uid": "67460461-eaff-11e9-9774-b2c06862f69a" }, "spec": { "imagePullSecrets": [ "default:acr-test" ], "images": [ "registry.cn-shanghai.aliyuncs.com/baz/nginx:1.0" ] }, "status": { "imageCacheId": "imc-2ze5xnx4yiply807zo0o", "lastUpdatedTime": "2019-10-10T01:47:14Z", "phase": "Ready", "progress": "100%", "startTime": "2019-10-10T01:43:49Z" } } DeleteImageCache 删除指定镜像缓存 Http Request DELETE /apis/eci.alibabacloud.com/v1/imagecaches/{name} curl request example curl -X DELETE -H 'Content-Type: application/yaml' 'http://127.0.0.1:8001/apis/eci.alibabacloud.com/v1/imagecaches/imagecache-secrets-test' curl response example "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Success", "details": { "name": "imagecache-secrets-test", "group": "eci.alibabacloud.com", "kind": "imagecaches", "uid": "67460461-eaff-11e9-9774-b2c06862f69a" } }

1934890530796658 2020-03-20 20:49:21 0 浏览量 回答数 0

回答

在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样您也可以通过Ingress来对外提供七层服务访问,下面介绍如何在Serverless Kubernetes集群中提供七层域名服务访问。 前提条件 您已创建一个serverless集群,集群的VPC需要配置NAT网关,从而访问外网,下载容器镜像。 您已通过kubectl连接到集群,参见通过 kubectl 连接 Kubernetes 集群。 使用说明 不指定SLB实例情况下系统会自动帮您生成一个公网SLB实例。 SLB实例默认前端监听端口为80(HTTP协议)和443(HTTPS协议)。 SLB实例HTTPS证书默认会初始化为第一个创建的Ingress配置的TLS证书,否则会初始化为系统默认证书;您可根据需要自行在SLB控制台上进行修改。 当您指定使用已存在的SLB实例时,要求该SLB实例规格必须是性能保障型(支持ENI);同时确保80和443端口当前没有其他服务使用。 使用默认生成的SLB实例 当您不指定SLB实例时,系统会在第一个Ingress创建时自动生成一个性能保障型的公网SLB实例。 部署测试服务。 创建并拷贝如下内容到cafe-service.yaml文件中,并执行kubectl apply -f cafe-service.yaml命令,部署一个coffee service和tea service。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: coffee spec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee clusterIP: None apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tea spec: replicas: 1 selector: matchLabels: app: tea template: metadata: labels: app: tea spec: containers: - name: tea image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: tea-svc labels: spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: tea clusterIP: None 当界面呈现如下结果时,表示部署完成。 deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created 执行kubectl get svc,deploy命令,查看服务状态。 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/coffee-svc ClusterIP 80/TCP 1m svc/tea-svc ClusterIP 80/TCP 1m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/coffee 2 2 2 2 1m deploy/tea 1 1 1 1 1m 配置 Ingress。 创建并拷贝如下内容到cafe-ingress.yaml文件中,并执行kubectl apply -f cafe-ingress.yaml命令,通过Ingress配置coffee service和tea service对外暴露的域名和Path路径。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: cafe-ingress spec: rules: # 配置七层域名 - host: foo.bar.com http: paths: # 配置Context Path - path: /tea backend: serviceName: tea-svc servicePort: 80 # 配置Context Path - path: /coffee backend: serviceName: coffee-svc servicePort: 80 当界面呈现如下结果时,表示Ingress配置完成。 ingress "cafe-ingress" created 执行kubectl get ing,获取SLB实例IP。 NAME HOSTS ADDRESS PORTS AGE cafe-ingress foo.bar.com 139...** 80 1m 测试服务访问。 说明 目前我们需要自行将域名解析到SLB实例IP上。 本例中在hosts中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。 139...** foo.bar.com 通过浏览器测试访问coffee服务。 访问coffee服务 通过命令行方式测试访问coffee服务。 curl -H "Host: foo.bar.com" http://139.../coffee 通过浏览器测试访问tea服务。 访问tea服务 通过命令行方式测试访问tea服务。 curl -H "Host: foo.bar.com" http://139.../tea 使用指定的SLB实例 您可以通过注释service.beta.kubernetes.io/alicloud-loadbalancer-id来指定使用已存在的SLB实例,但要求该SLB实例必须为性能保障型规格(支持ENI)。 说明 系统会自动初始化SLB实例的80和443端口,请确保当前没有其他服务使用。 部署测试服务。 创建并拷贝如下内容到tomcat-service.yml文件中,并执行kubectl apply -f tomcat-service.yml命令,部署一个tomcat测试应用。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat spec: replicas: 1 selector: matchLabels: run: tomcat template: metadata: labels: run: tomcat spec: containers: - image: tomcat:7.0 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 protocol: TCP restartPolicy: Always apiVersion: v1 kind: Service metadata: name: tomcat spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: run: tomcat clusterIP: None 当界面呈现如下结果时,表示tomcat应用部署完成。 deployment "tomcat" created service "tomcat" created 执行kubectl get svc,deploy tomcat,查看应用的状态。 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/tomcat ClusterIP 8080/TCP 1m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/tomcat 1 1 1 1 1m 申请SLB实例。 您需要在集群同Region下自行申请一个性能保障型SLB实例(例如slb.s2.small),可以是私网也可以是公网(依据具体需求)。参见创建负载均衡实例。本例中申请一个公网SLB实例,记录SLB实例的ID。 申请SLB实例 配置TLS证书。 您需要配置TLS证书实现HTTPS访问。 执行如下命令,生成测试TLS证书。 $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=bar.foo.com/O=bar.foo.com"# 创建TLS证书Secret $ kubectl create secret tls cert-example --key tls.key --cert tls.crt secret "cert-example" created 执行如下命令,查看新建的TLS证书。 $ kubectl get secret cert-example NAME TYPE DATA AGE cert-example kubernetes.io/tls 2 12s 说明 系统自动依据第一个创建的Ingress的TLS证书来初始化SLB的HTTPS默认证书,若需要修改HTTPS默认证书,可在SLB控制台自行修改;若需配置多个证书,可在SLB控制台HTTPS监听扩展域名下自行添加。 配置 Ingress。 创建并拷贝如下内容到tomcat-ingress.yml文件中,并执行kubectl apply -f tomcat-ingress.yml命令,配置 Ingress。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tomcat-ingress annotations: # 配置使用指定的SLB实例(SLB ID) service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxx ##替换为你的SLB ID service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true" spec: tls: - hosts: - bar.foo.com # 配置TLS证书 secretName: cert-example rules: # 配置七层域名 - host: bar.foo.com http: paths: # 配置Context Path - path: / backend: serviceName: tomcat servicePort: 8080 当界面呈现如下结果时,表示tomcat-ingress配置完成。 ingress "tomcat-ingress" created 执行kubectl get ing tomcat-ingress命令,获取SLB IP地址。 NAME HOSTS ADDRESS PORTS AGE tomcat-ingress bar.foo.com 47...** 80, 443 1m 测试服务访问。 说明 目前我们需要自行将域名解析到SLB实例IP上。 本例中在hosts中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。 47...** bar.foo.com 通过浏览器测试访问tomcat服务。 访问tomcat 通过命令行方式测试访问tomcat服务。 curl -k -H "Host: bar.foo.com" https://47.*..**

1934890530796658 2020-03-31 15:24:18 0 浏览量 回答数 0

回答

在阿里云Serverless Kubernetes集群中,我们可以通过LoadBalancer Service对外提供四层服务访问,同样您也可以通过Ingress来对外提供七层服务访问,下面介绍如何在Serverless Kubernetes集群中提供七层域名服务访问。 前提条件 您已创建一个serverless集群,集群的VPC需要配置NAT网关,从而访问外网,下载容器镜像。 您已通过kubectl连接到集群,参见通过 kubectl 连接 Kubernetes 集群。 使用说明 不指定SLB实例情况下系统会自动帮您生成一个公网SLB实例。 SLB实例默认前端监听端口为80(HTTP协议)和443(HTTPS协议)。 SLB实例HTTPS证书默认会初始化为第一个创建的Ingress配置的TLS证书,否则会初始化为系统默认证书;您可根据需要自行在SLB控制台上进行修改。 当您指定使用已存在的SLB实例时,要求该SLB实例规格必须是性能保障型(支持ENI);同时确保80和443端口当前没有其他服务使用。 使用默认生成的SLB实例 当您不指定SLB实例时,系统会在第一个Ingress创建时自动生成一个性能保障型的公网SLB实例。 部署测试服务。 创建并拷贝如下内容到cafe-service.yaml文件中,并执行kubectl apply -f cafe-service.yaml命令,部署一个coffee service和tea service。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: coffee spec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee clusterIP: None apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tea spec: replicas: 1 selector: matchLabels: app: tea template: metadata: labels: app: tea spec: containers: - name: tea image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: tea-svc labels: spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: tea clusterIP: None 当界面呈现如下结果时,表示部署完成。 deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created 执行kubectl get svc,deploy命令,查看服务状态。 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/coffee-svc ClusterIP 80/TCP 1m svc/tea-svc ClusterIP 80/TCP 1m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/coffee 2 2 2 2 1m deploy/tea 1 1 1 1 1m 配置 Ingress。 创建并拷贝如下内容到cafe-ingress.yaml文件中,并执行kubectl apply -f cafe-ingress.yaml命令,通过Ingress配置coffee service和tea service对外暴露的域名和Path路径。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: cafe-ingress spec: rules: # 配置七层域名 - host: foo.bar.com http: paths: # 配置Context Path - path: /tea backend: serviceName: tea-svc servicePort: 80 # 配置Context Path - path: /coffee backend: serviceName: coffee-svc servicePort: 80 当界面呈现如下结果时,表示Ingress配置完成。 ingress "cafe-ingress" created 执行kubectl get ing,获取SLB实例IP。 NAME HOSTS ADDRESS PORTS AGE cafe-ingress foo.bar.com 139...** 80 1m 测试服务访问。 说明 目前我们需要自行将域名解析到SLB实例IP上。 本例中在hosts中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。 139...** foo.bar.com 通过浏览器测试访问coffee服务。 访问coffee服务 通过命令行方式测试访问coffee服务。 curl -H "Host: foo.bar.com" http://139.../coffee 通过浏览器测试访问tea服务。 访问tea服务 通过命令行方式测试访问tea服务。 curl -H "Host: foo.bar.com" http://139.../tea 使用指定的SLB实例 您可以通过注释service.beta.kubernetes.io/alicloud-loadbalancer-id来指定使用已存在的SLB实例,但要求该SLB实例必须为性能保障型规格(支持ENI)。 说明 系统会自动初始化SLB实例的80和443端口,请确保当前没有其他服务使用。 部署测试服务。 创建并拷贝如下内容到tomcat-service.yml文件中,并执行kubectl apply -f tomcat-service.yml命令,部署一个tomcat测试应用。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat spec: replicas: 1 selector: matchLabels: run: tomcat template: metadata: labels: run: tomcat spec: containers: - image: tomcat:7.0 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 protocol: TCP restartPolicy: Always apiVersion: v1 kind: Service metadata: name: tomcat spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: run: tomcat clusterIP: None 当界面呈现如下结果时,表示tomcat应用部署完成。 deployment "tomcat" created service "tomcat" created 执行kubectl get svc,deploy tomcat,查看应用的状态。 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/tomcat ClusterIP 8080/TCP 1m NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/tomcat 1 1 1 1 1m 申请SLB实例。 您需要在集群同Region下自行申请一个性能保障型SLB实例(例如slb.s2.small),可以是私网也可以是公网(依据具体需求)。参见创建负载均衡实例。本例中申请一个公网SLB实例,记录SLB实例的ID。 申请SLB实例 配置TLS证书。 您需要配置TLS证书实现HTTPS访问。 执行如下命令,生成测试TLS证书。 $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=bar.foo.com/O=bar.foo.com"# 创建TLS证书Secret $ kubectl create secret tls cert-example --key tls.key --cert tls.crt secret "cert-example" created 执行如下命令,查看新建的TLS证书。 $ kubectl get secret cert-example NAME TYPE DATA AGE cert-example kubernetes.io/tls 2 12s 说明 系统自动依据第一个创建的Ingress的TLS证书来初始化SLB的HTTPS默认证书,若需要修改HTTPS默认证书,可在SLB控制台自行修改;若需配置多个证书,可在SLB控制台HTTPS监听扩展域名下自行添加。 配置 Ingress。 创建并拷贝如下内容到tomcat-ingress.yml文件中,并执行kubectl apply -f tomcat-ingress.yml命令,配置 Ingress。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tomcat-ingress annotations: # 配置使用指定的SLB实例(SLB ID) service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxxxxxxxx ##替换为你的SLB ID service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: "true" spec: tls: - hosts: - bar.foo.com # 配置TLS证书 secretName: cert-example rules: # 配置七层域名 - host: bar.foo.com http: paths: # 配置Context Path - path: / backend: serviceName: tomcat servicePort: 8080 当界面呈现如下结果时,表示tomcat-ingress配置完成。 ingress "tomcat-ingress" created 执行kubectl get ing tomcat-ingress命令,获取SLB IP地址。 NAME HOSTS ADDRESS PORTS AGE tomcat-ingress bar.foo.com 47...** 80, 443 1m 测试服务访问。 说明 目前我们需要自行将域名解析到SLB实例IP上。 本例中在hosts中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。 47...** bar.foo.com 通过浏览器测试访问tomcat服务。 访问tomcat 通过命令行方式测试访问tomcat服务。 curl -k -H "Host: bar.foo.com" https://47.*..**

1934890530796658 2020-03-31 20:50:39 0 浏览量 回答数 0

回答

简介 本文介绍如何将已有的Kubernetes应用迁移到基于ECI的Serverless Kubernetes或者虚拟节点扩展。希望能帮助您了解在迁移到ECI中需要进行的适配和改造,并帮助您解决部分在迁移应用中可能会遇到的问题。 假设 本文假设您对Kubernetes的基本概念已经有所了解,或者已经在私有云或者公有云中使用过基于Kubernetes的容器编排服务。 迁移前的准备工作 您可以通过Serverless Kubernetes简介 和 虚拟节点扩展 了解ECI与Kubernetes对接的基本原理。 您无需提前创建ECI实例,只需要提前创建好Serverless Kubernetes集群,或者在已有的Kubernetes托管版中部署好Virtual Node Addon。 如何管理Kubernetes及ECI运行情况 您可以通过容器服务控制台来操作Serverless Kubernetes集群和Kubernetes托管版集群。 您可以通过阿里云提供的CloudShell来管理Kubernetes集群。 您可以通过kubectl客户端在本地计算机来访问远端的Kubernetes集群。详情请参考这里。 如何查看已经创建的ECI实例 进入弹性容器实例控制台,在左上角选择相应的可用区,您可以看到已经创建的ECI实例。如果您看到的是空白页面,请申请弹性容器实例页面的访问权限。 进入容器服务控制台,从左侧导航栏中点击‘应用’>‘容器组’,选择对应的集群和namespace,可以查看到已有的pod,被调度到virtual-kubelet节点上的即是ECI实例,点击实例的‘详情’可以查看详细信息。 eci-pod 应用迁移的限制 virtual-kubelet是作为一个虚拟节点对接Kubernetes,因此ECI实例并不会跑在一个集中式的“真实”节点上,而是会被打散分布在整个阿里云的资源池中。 考虑到公有云的安全性和虚拟节点本身带来的限制,ECI目前还不支持Host相关功能以及DaemonSet。具体如下: 不支持的功能 具体内容 备选方案 HostPath Mount本地宿主机文件到容器中 使用emptyDir,或者NAS存储 HostNetwork 将宿主机端口映射到容器中 使用type=LoadBalancer的负载均衡 DaemonSet 在容器所在宿主机上部署static pod 通过sidecar形式在pod中部署多个镜像 Privileged权限 容器拥有privileged权限 使用secretContext为pod添加Capability type=NodePort的Service 通过宿主机端口映射到容器端口 使用type=LoadBalancer的负载均衡 应用迁移的说明 Kubernetes集群和Serverless Kubernetes共享容器镜像仓库,因此可以将容器镜像先上传到容器镜像仓库中。为了加速镜像的拉取,建议使用专有网络的镜像地址(registry-vpc.xxx)。 Serverless Kubernetes和虚拟节点扩展 支持 Deployment, ReplicaSet,Job,Cronjob,StatefulSet等常见controller,理论上可以直接运行。 Serverless Kubernetes和虚拟节点扩展 利用 PrivateZone 实现 服务发现,因此建议在创建集群时默认勾选 PrivateZone支持。 Serverless Kubernetes和虚拟节点扩展 支持 type=LoadBalancer 的Service。您可以将Service修改为type=LoadBalancer,详情请参考这里。 apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx namespace: default spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx sessionAffinity: None type: LoadBalancer

1934890530796658 2020-03-20 17:23:03 0 浏览量 回答数 0

问题

容器服务Kubernetes版

黄一刀 2020-04-04 03:44:12 67 浏览量 回答数 1

问题

Kubernetes 集群 常见问题:Helm 手动升级

青蛙跳 2019-12-01 21:33:14 906 浏览量 回答数 0

问题

Serverless Kubernetes 集群&nbsp;&nbsp;负载均衡管理&nbsp;&nbsp;通过Ingress提供7层服务访问

青蛙跳 2019-12-01 21:37:20 446 浏览量 回答数 0

回答

在使用Kubernetes集群实现GPU计算时,为了有效利用GPU设备,可根据需要将应用调度到具有GPU设备的节点上,为此,您可利用GPU节点标签进行灵活调度。 前提条件 您已成功创建一个拥有GPU节点的Kubernetes集群,参见Kubernetes GPU集群支持GPU调度。 您已连接到Master节点,方便快速查看节点标签等信息,参见通过 kubectl 连接 Kubernetes 集群。 背景信息 阿里云Kubernetes在部署Nvidia GPU节点的时候会发现GPU的属性,并且作为NodeLabel信息暴露给用户,拥有如下优势: 可以快速筛选GPU节点 部署时可以作为调度条件使用 操作步骤 登录容器服务管理控制台。 在Kubernetes菜单下,单击左侧导航栏中的集群 > 节点,查看该集群的节点。 说明 本例中,该集群中拥有3个Worker节点,其中有两个Worker节点挂载了GPU设备,请查看节点IP,方便进行验证。 查看节点 选择GPU节点,单击操作列的更多 > 详情,进入Kubernetes Dashboard页面,查看GPU节点提供的节点标签。 节点详情 您也可登录到Master节点,执行以下命令,查看GPU节点的标签。 kubectl get nodes NAME STATUS ROLES AGE VERSION cn-beijing.i-2ze2dy2h9w97v65uuaft Ready master 2d v1.11.2 cn-beijing.i-2ze8o1a45qdv5q8a7luz Ready 2d v1.11.2 #可与控制台进行比对,确定GPU节点 cn-beijing.i-2ze8o1a45qdv5q8a7lv0 Ready 2d v1.11.2 cn-beijing.i-2ze9xylyn11vop7g5bwe Ready master 2d v1.11.2 cn-beijing.i-2zed5sw8snjniq6mf5e5 Ready master 2d v1.11.2 cn-beijing.i-2zej9s0zijykp9pwf7lu Ready 2d v1.11.2 选择一个GPU节点,执行以下命令,查看该GPU节点的标签。 kubectl describe node cn-beijing.i-2ze8o1a45qdv5q8a7luz Name: cn-beijing.i-2ze8o1a45qdv5q8a7luz Roles: Labels: aliyun.accelerator/nvidia_count=1 #注意 aliyun.accelerator/nvidia_mem=12209MiB aliyun.accelerator/nvidia_name=Tesla-M40 beta.kubernetes.io/arch=amd64 beta.kubernetes.io/instance-type=ecs.gn4-c4g1.xlarge beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=cn-beijing failure-domain.beta.kubernetes.io/zone=cn-beijing-a kubernetes.io/hostname=cn-beijing.i-2ze8o1a45qdv5q8a7luz ...... 本例中,该GPU节点包含如下3个节点标签(NodeLabel)。 key value aliyun.accelerator/nvidia_count GPU核心数量 aliyun.accelerator/nvidia_mem GPU显存,单位为MiB aliyun.accelerator/nvidia_name nvida设备的GPU计算卡名称 同一类型的GPU云服务器的GPU计算卡名称相同,因此,您可通过该标签筛选节点。 kubectl get no -l aliyun.accelerator/nvidia_name=Tesla-M40 NAME STATUS ROLES AGE VERSION cn-beijing.i-2ze8o1a45qdv5q8a7luz Ready 2d v1.11.2 cn-beijing.i-2ze8o1a45qdv5q8a7lv0 Ready 2d v1.11.2 返回容器服务控制台主页,单击左侧导航栏应用 > 无状态,单击右上角使用模板创建。 创建一个tensorflow的Deployment,将该应用调度到GPU节点上。 创建应用 本例的yaml编排如下所示。 Define the tensorflow deployment apiVersion: apps/v1 kind: Deployment metadata: name: tf-notebook labels: app: tf-notebook spec: replicas: 1 selector: # define how the deployment finds the pods it mangages matchLabels: app: tf-notebook template: # define the pods specifications metadata: labels: app: tf-notebook spec: nodeSelector: #注意 aliyun.accelerator/nvidia_name: Tesla-M40 containers: - name: tf-notebook image: tensorflow/tensorflow:1.4.1-gpu-py3 resources: limits: nvidia.com/gpu: 1 #注意 ports: - containerPort: 8888 hostPort: 8888 env: - name: PASSWORD value: mypassw0rdv 您也可避免将某些应用部署到GPU节点。下面部署一个nginx的Pod,利用节点亲和性的特性进行调度,具体参见镜像创建无状态Deployment应用中关于节点亲和性的说明。 该示例的yaml编排如下所示: apiVersion: v1 kind: Pod metadata: name: not-in-gpu-node spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: aliyun.accelerator/nvidia_name operator: DoesNotExist containers: - name: not-in-gpu-node image: nginx 单击左侧导航栏应用 > 容器组,选择所需的集群和命名空间,进入容器组列表。 查看容器组 执行结果 在容器组列表中,您可看到两个示例的Pod(容器组)成功调度到对应的节点上,从而实现基于GPU节点标签的灵活调度。

1934890530796658 2020-03-26 23:03:59 0 浏览量 回答数 0

回答

阿里云容器服务 Kubernetes 集群支持通过界面创建 StatefultSet 类型的应用,满足您快速创建有状态应用的需求。本例中将创建一个 nginx 的有状态应用,并演示 StatefulSet 应用的特性。 前提条件 您已成功创建一个 Kubernetes 集群。参见创建Kubernetes集群。 您已成功创建一个云盘存储卷声明,参见创建持久化存储卷声明。 您已连接到 Kubernetes 集群的 Master 节点,参见通过kubectl连接Kubernetes集群。 背景信息 StatefulSet 包括如下特性: 场景 说明 Pod 一致性 包含次序(启动、停止次序)、网络一致性。此一致性与 Pod 相关,与被调度到哪个 node 节点无关。 稳定的持久化存储 通过 VolumeClaimTemplate 为每个 Pod 创建一个 PV。删除、减少副本,不会删除相关的卷。 稳定的网络标志 Pod 的 hostname 模式为:(statefulset名称)−(序号)。 稳定的次序 对于N个副本的 StatefulSet,每个 Pod 都在 [0,N)的范围内分配一个数字序号,且是唯一的。 操作步骤 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 有状态,然后单击页面右上角的使用镜像创建。 在应用基本信息页面进行设置,然后单击下一步 进入应用配置页面。 应用名称:设置应用的名称。 部署集群:设置应用部署的集群。 命名空间:设置应用部署所处的命名空间,默认使用 default 命名空间。 副本数量:即应用包含的 Pod 数量。 类型:可选择无状态(Deployment)和有状态(StatefulSet)两种类型。 说明 本例中选择有状态类型,创建 StatefulSet 类型的应用。 标签:为该应用添加一个标签,标识该应用。 注解:为该应用添加一个注解(annotation)。 应用配置页面 设置容器配置。 说明 您可为应用的 Pod 设置多个容器。 设置容器的基本配置。 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定,本例中为 nginx。 您还可以填写私有 registry。填写的格式为domainname/namespace/imagename:tag 镜像版本:您可以单击选择镜像版本 选择镜像的版本。若不指定,默认为 latest。 总是拉取镜像:为了提高效率,容器服务会对镜像进行缓存。部署时,如果发现镜像 Tag 与本地缓存的一致,则会直接复用而不重新拉取。所以,如果您基于上层业务便利性等因素考虑,在做代码和镜像变更时没有同步修改 Tag ,就会导致部署时还是使用本地缓存内旧版本镜像。而勾选该选项后,会忽略缓存,每次部署时重新拉取镜像,确保使用的始终是最新的镜像和代码。 镜像密钥:单击设置镜像密钥设置镜像的密钥。对于私有仓库访问时,需要设置密钥,具体可以参见使用镜像密钥。 资源限制:可指定该应用所能使用的资源上限,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 millicores,即一个核的千分之一;内存的单位为 Bytes,可以为 Gi、Mi 或 Ki。 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。 Init Container:勾选该项,表示创建一个Init Container,Init Container 包含一些实用的工具,具体参见https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。 设置容器基本信息 可选: 配置环境变量。 支持通过键值对的形式为 Pod 配置环境变量。用于给 Pod 添加环境标志或传递配置等,具体请参见 Pod variable。 可选: 配置健康检查。 支持存活检查(liveness)和就绪检查(Readiness)。存活检查用于检测何时重启容器;就绪检查确定容器是否已经就绪,且可以接受流量。关于健康检查的更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。 请求类型 配置说明 HTTP请求 即向容器发送一个HTTPget 请求,支持的参数包括: 协议:HTTP/HTTPS。 路径:访问HTTP server 的路径。 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。 HTTP头:即HTTPHeaders,HTTP请求中自定义的请求头,HTTP允许重复的header。支持键值对的配置方式。 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为3秒。 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 TCP连接 即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括: 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 命令行 通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括: 命令行:用于检测容器健康情况的探测命令。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为5秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 可选: 配置生命周期。 您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体参见https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。 启动执行:为容器设置预启动命令和参数。 启动后处理:为容器设置启动后的命令。 停止前处理:为容器设置预结束命令。 配置生命周期 配置数据卷信息。 支持配置本地存储和云存储。 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见 volumes。 云存储:支持云存储。 本例中配置了一个云存储类型的数据卷声明 disk-ssd,将其挂载到容器的 /tmp 路径下。 配置数据卷 可选: 配置日志服务,您可进行采集配置和自定义 Tag 设置。 说明 请确保已部署 Kubernetes 集群,并且在此集群上已安装日志插件。 您可对日志进行采集配置: 日志库:即在日志服务中生成一个对应的 logstore,用于存储采集到的日志。 容器内日志路径:支持 stdout 和文本日志。 stdout: stdout 表示采集容器的标准输出日志。 文本日志:表示收集容器内指定路径的日志,本例中表示收集/var/log/nginx 下所有的文本日志,也支持通配符的方式。 您还可设置自定义 tag,设置 tag 后,会将该 tag 一起采集到容器的日志输出中。自定义 tag 可帮助您给容器日志打上 tag,方便进行日志统计和过滤等分析操作。 配置日志采集 完成容器配置后,单击 下一步。 进行高级设置。本例中仅进行访问设置。 设置访问设置。 您可以设置暴露后端 Pod 的方式,最后单击创建。本例中选择 ClusterIP 服务和路由(Ingress),构建一个公网可访问的 nginx 应用。 说明 针对应用的通信需求,您可灵活进行访问设置: 内部应用:对于只在集群内部工作的应用,您可根据需要创建 ClusterIP 或 NodePort 类型的服务,来进行内部通信。 外部应用:对于需要暴露到公网的应用,您可以采用两种方式进行访问设置: 创建 LoadBalancer 类型的服务:使用阿里云提供的负载均衡服务(Server Load Balancer,SLB),该服务提供公网访问能力。 创建路由(Ingress):通过路由(Ingress)提供公网访问能力,详情参见https://kubernetes.io/docs/concepts/services-networking/ingress/。 访问设置 在服务栏单击创建,在弹出的对话框中进行配置,最后单击创建。 创建服务 名称:您可自主设置,默认为 applicationname-svc。 类型:您可以从下面 3 种服务类型中进行选择。 虚拟集群 IP:即 ClusterIP,指通过集群的内部 IP 暴露服务,选择该项,服务只能够在集群内部访问。 节点端口:即 NodePort,通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 : ,可以从集群的外部访问一个 NodePort 服务。 负载均衡:即 LoadBalancer,是阿里云提供的负载均衡服务,可选择公网访问或内网访问。负载均衡可以路由到 NodePort 服务和 ClusterIP 服务。 端口映射:您需要添加服务端口和容器端口,若类型选择为节点端口,还需要自己设置节点端口,防止端口出现冲突。支持 TCP/UDP 协议。 注解:为该服务添加一个注解(annotation),支持负载均衡配置参数,参见通过负载均衡(Server Load Balancer)访问服务。 标签:您可为该服务添加一个标签,标识该服务。 在路由栏单击创建,在弹出的对话框中,为后端 Pod 配置路由规则,最后单击创建。更多详细的路由配置信息,请参见路由配置说明。 说明 通过镜像创建应用时,您仅能为一个服务创建路由(Ingress)。本例中使用一个虚拟主机名称作为测试域名,您需要在 hosts 中添加一条记录。在实际工作场景中,请使用备案域名。 101.37.224.146 foo.bar.com #即ingress的IP 创建路由 在访问设置栏中,您可看到创建完毕的服务和路由,您可单击变更和删除进行二次配置。 变更或删除路由 可选: 容器组水平伸缩。 您可勾选是否开启容器组水平伸缩,为了满足应用在不同负载下的需求,容器服务支持服容器组 Pod 的弹性伸缩,即根据容器 CPU 和内存资源占用情况自动调整容器组数量。 说明 若要启用自动伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。参见容器基本配置环节。 指标:支持 CPU 和内存,需要和设置的所需资源类型相同。 触发条件:资源使用率的百分比,超过该使用量,容器开始扩容。 最大副本数量:该 StatefulSet 可扩容的容器数量上限。 最小副本数量:该 StatefulSet 可缩容的容器数量下限。 可选: 设置调度设置。 您可设置升级方式、节点亲和性、应用亲和性和应用非亲和性,详情参见https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity。 说明 亲和性调度依赖节点标签和 Pod 标签,您可使用内置的标签进行调度;也可预先为节点、Pod 配置相关的标签。 设置升级方式。 升级方式包括滚动升级(rollingupdate)和替换升级(recreate),详细请参见https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/ 设置节点亲和性,通过 Node 节点的 Label 标签进行设置。 节点亲和性 节点调度支持硬约束和软约束(Required/Preferred),以及丰富的匹配表达式(In, NotIn, Exists, DoesNotExist. Gt, and Lt): 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,效果与 NodeSelector 相同。本例中 Pod 只能调度到具有对应标签的 Node 节点。您可以定义多条硬约束规则,但只需满足其中一条。 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。本例中,调度会尽量不调度 Pod 到具有对应标签的 Node 节点。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。 设置应用亲和性调度。决定应用的 Pod 可以和哪些 Pod 部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。 应用亲和性调度 根据节点上运行的 Pod 的标签(Label)来进行调度,支持硬约束和软约束,匹配的表达式有:In, NotIn, Exists, DoesNotExist。 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,Pod 的亲和性调度必须要满足后续定义的约束条件。 命名空间:该策略是依据 Pod 的 Label 进行调度,所以会受到命名空间的约束。 拓扑域:即 topologyKey,指定调度时作用域,这是通过 Node 节点的标签来实现的,例如指定为 kubernetes.io/hostname,那就是以 Node 节点为区分范围;如果指定为 beta.kubernetes.io/os,则以 Node 节点的操作系统类型来区分。 选择器:单击选择器右侧的加号按钮,您可添加多条硬约束规则。 查看应用列表:单击应用列表,弹出对话框,您可在此查看各命名空间下的应用,并可将应用的标签导入到亲和性配置页面。 硬约束条件:设置已有应用的标签、操作符和标签值。本例中,表示将待创建的应用调度到该主机上,该主机运行的已有应用具有 app:nginx 标签。 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。Pod 的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。 说明 权重:设置一条软约束规则的权重,介于 1-100,通过算法计算满足软约束规则的节点的权重,将 Pod 调度到权重最大的节点上。 设置应用非亲和性调度,决定应用的 Pod 不与哪些 Pod 部署在同一拓扑域。应用非亲和性调度的场景包括: 将一个服务的 Pod 分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。 给予 Pod 一个节点的独占访问权限来保证资源隔离,保证不会有其它 Pod 来分享节点资源。 把可能会相互影响的服务的 Pod 分散在不同的主机上。 说明 应用非亲和性调度的设置方式与亲和性调度相同,但是相同的调度规则代表的意思不同,请根据使用场景进行选择。 最后单击创建。 创建成功后,默认进入创建完成页面,会列出应用包含的对象,您可以单击查看应用详情进行查看。 查看详情1 默认进入有状态副本集详情页面。 查看副本详情 然后单击左上角返回列表,进入有状态副本集列表页面,查看创建的 StatefulSet 应用。 查看应用 可选: 选择所需的 nginx 应用,单击右侧伸缩,验证服务伸缩性。 在弹出的对话框中,将容器组数量设置为 3,您可发现扩容时,扩容容器组的排序依次递增;反之,进行缩容时,先按 Pod 次序从高到低进行缩容。这体现 StatefulSet 中 Pod 的次序稳定性。 验证服务伸缩 单击左侧导航栏中的应用 > 存储声明,您可发现,随着应用扩容,会随着 Pod 创建新的云存储卷;缩容后,已创建的 PV/PVC 不会删除。 存储声明 后续步骤 连接到 Master 节点,执行以下命令,验证持久化存储特性。 在云盘中创建临时文件: kubectl exec nginx-1 ls /tmp #列出该目录下的文件 lost+found kubectl exec nginx-1 touch /tmp/statefulset #增加一个临时文件statefulset kubectl exec nginx-1 ls /tmp lost+found statefulset 删除 Pod,验证数据持久性: kubectl delete pod nginx-1 pod"nginx-1" deleted 过一段时间,待Pod自动重启后,验证数据持久性,证明 StatefulSet 应用的高可用性。 kubectl exec nginx-1 ls /tmp #数据持久化存储 lost+found statefulset 想要了解更多信息,参见Kubernetes有状态服务-StatefulSet使用最佳实践。

1934890530796658 2020-03-31 15:46:45 0 浏览量 回答数 0

回答

阿里云容器服务 Kubernetes 集群支持通过界面创建 StatefultSet 类型的应用,满足您快速创建有状态应用的需求。本例中将创建一个 nginx 的有状态应用,并演示 StatefulSet 应用的特性。 前提条件 您已成功创建一个 Kubernetes 集群。参见创建 Kubernetes 集群。 您已成功创建一个云盘存储卷声明,参见创建持久化存储卷声明。 您已连接到 Kubernetes 集群的 Master 节点,参见通过 kubectl 连接 Kubernetes 集群。 背景信息 StatefulSet 包括如下特性: 场景 说明 Pod 一致性 包含次序(启动、停止次序)、网络一致性。此一致性与 Pod 相关,与被调度到哪个 node 节点无关。 稳定的持久化存储 通过 VolumeClaimTemplate 为每个 Pod 创建一个 PV。删除、减少副本,不会删除相关的卷。 稳定的网络标志 Pod 的 hostname 模式为:(statefulset名称)−(序号)。 稳定的次序 对于N个副本的 StatefulSet,每个 Pod 都在 [0,N)的范围内分配一个数字序号,且是唯一的。 操作步骤 登录容器服务管理控制台。 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 有状态,然后单击页面右上角的使用镜像创建。 在应用基本信息页面进行设置,然后单击下一步 进入应用配置页面。 应用名称:设置应用的名称。 部署集群:设置应用部署的集群。 命名空间:设置应用部署所处的命名空间,默认使用 default 命名空间。 副本数量:即应用包含的 Pod 数量。 类型:可选择无状态(Deployment)和有状态(StatefulSet)两种类型。 说明 本例中选择有状态类型,创建 StatefulSet 类型的应用。 标签:为该应用添加一个标签,标识该应用。 注解:为该应用添加一个注解(annotation)。 应用配置页面 设置容器配置。 说明 您可为应用的 Pod 设置多个容器。 设置容器的基本配置。 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定,本例中为 nginx。 您还可以填写私有 registry。填写的格式为domainname/namespace/imagename:tag 镜像版本:您可以单击选择镜像版本 选择镜像的版本。若不指定,默认为 latest。 总是拉取镜像:为了提高效率,容器服务会对镜像进行缓存。部署时,如果发现镜像 Tag 与本地缓存的一致,则会直接复用而不重新拉取。所以,如果您基于上层业务便利性等因素考虑,在做代码和镜像变更时没有同步修改 Tag ,就会导致部署时还是使用本地缓存内旧版本镜像。而勾选该选项后,会忽略缓存,每次部署时重新拉取镜像,确保使用的始终是最新的镜像和代码。 镜像密钥:单击设置镜像密钥设置镜像的密钥。对于私有仓库访问时,需要设置密钥,具体可以参见使用镜像密钥。 资源限制:可指定该应用所能使用的资源上限,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 millicores,即一个核的千分之一;内存的单位为 Bytes,可以为 Gi、Mi 或 Ki。 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。 Init Container:勾选该项,表示创建一个Init Container,Init Container 包含一些实用的工具,具体参见https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。 设置容器基本信息 可选: 配置环境变量。 支持通过键值对的形式为 Pod 配置环境变量。用于给 Pod 添加环境标志或传递配置等,具体请参见 Pod variable。 可选: 配置健康检查。 支持存活检查(liveness)和就绪检查(Readiness)。存活检查用于检测何时重启容器;就绪检查确定容器是否已经就绪,且可以接受流量。关于健康检查的更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。 请求类型 配置说明 HTTP请求 即向容器发送一个HTTPget 请求,支持的参数包括: 协议:HTTP/HTTPS。 路径:访问HTTP server 的路径。 端口:容器暴露的访问端口或端口名,端口号必须介于1~65535。 HTTP头:即HTTPHeaders,HTTP请求中自定义的请求头,HTTP允许重复的header。支持键值对的配置方式。 延迟探测时间(秒):即initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为3秒。 执行探测频率(秒):即periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 TCP连接 即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括: 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 命令行 通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括: 命令行:用于检测容器健康情况的探测命令。 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为5秒。 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。 健康阈值:探测失败后,最少连续探测成功多少次才被认定为成功。默认是 1,最小值是 1。对于存活检查(liveness)必须是 1。 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。 可选: 配置生命周期。 您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体参见https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。 启动执行:为容器设置预启动命令和参数。 启动后处理:为容器设置启动后的命令。 停止前处理:为容器设置预结束命令。 配置生命周期 配置数据卷信息。 支持配置本地存储和云存储。 本地存储:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息参见 volumes。 云存储:支持云存储。 本例中配置了一个云存储类型的数据卷声明 disk-ssd,将其挂载到容器的 /tmp 路径下。 配置数据卷 可选: 配置日志服务,您可进行采集配置和自定义 Tag 设置。 说明 请确保已部署 Kubernetes 集群,并且在此集群上已安装日志插件。 您可对日志进行采集配置: 日志库:即在日志服务中生成一个对应的 logstore,用于存储采集到的日志。 容器内日志路径:支持 stdout 和文本日志。 stdout: stdout 表示采集容器的标准输出日志。 文本日志:表示收集容器内指定路径的日志,本例中表示收集/var/log/nginx 下所有的文本日志,也支持通配符的方式。 您还可设置自定义 tag,设置 tag 后,会将该 tag 一起采集到容器的日志输出中。自定义 tag 可帮助您给容器日志打上 tag,方便进行日志统计和过滤等分析操作。 配置日志采集 完成容器配置后,单击 下一步。 进行高级设置。本例中仅进行访问设置。 设置访问设置。 您可以设置暴露后端 Pod 的方式,最后单击创建。本例中选择 ClusterIP 服务和路由(Ingress),构建一个公网可访问的 nginx 应用。 说明 针对应用的通信需求,您可灵活进行访问设置: 内部应用:对于只在集群内部工作的应用,您可根据需要创建 ClusterIP 或 NodePort 类型的服务,来进行内部通信。 外部应用:对于需要暴露到公网的应用,您可以采用两种方式进行访问设置: 创建 LoadBalancer 类型的服务:使用阿里云提供的负载均衡服务(Server Load Balancer,SLB),该服务提供公网访问能力。 创建路由(Ingress):通过路由(Ingress)提供公网访问能力,详情参见https://kubernetes.io/docs/concepts/services-networking/ingress/。 访问设置 在服务栏单击创建,在弹出的对话框中进行配置,最后单击创建。 创建服务 名称:您可自主设置,默认为 applicationname-svc。 类型:您可以从下面 3 种服务类型中进行选择。 虚拟集群 IP:即 ClusterIP,指通过集群的内部 IP 暴露服务,选择该项,服务只能够在集群内部访问。 节点端口:即 NodePort,通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 : ,可以从集群的外部访问一个 NodePort 服务。 负载均衡:即 LoadBalancer,是阿里云提供的负载均衡服务,可选择公网访问或内网访问。负载均衡可以路由到 NodePort 服务和 ClusterIP 服务。 端口映射:您需要添加服务端口和容器端口,若类型选择为节点端口,还需要自己设置节点端口,防止端口出现冲突。支持 TCP/UDP 协议。 注解:为该服务添加一个注解(annotation),支持负载均衡配置参数,参见通过负载均衡(Server Load Balancer)访问服务。 标签:您可为该服务添加一个标签,标识该服务。 在路由栏单击创建,在弹出的对话框中,为后端 Pod 配置路由规则,最后单击创建。更多详细的路由配置信息,请参见路由配置说明。 说明 通过镜像创建应用时,您仅能为一个服务创建路由(Ingress)。本例中使用一个虚拟主机名称作为测试域名,您需要在 hosts 中添加一条记录。在实际工作场景中,请使用备案域名。 101.37.224.146 foo.bar.com #即ingress的IP 创建路由 在访问设置栏中,您可看到创建完毕的服务和路由,您可单击变更和删除进行二次配置。 变更或删除路由 可选: 容器组水平伸缩。 您可勾选是否开启容器组水平伸缩,为了满足应用在不同负载下的需求,容器服务支持服容器组 Pod 的弹性伸缩,即根据容器 CPU 和内存资源占用情况自动调整容器组数量。 说明 若要启用自动伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。参见容器基本配置环节。 指标:支持 CPU 和内存,需要和设置的所需资源类型相同。 触发条件:资源使用率的百分比,超过该使用量,容器开始扩容。 最大副本数量:该 StatefulSet 可扩容的容器数量上限。 最小副本数量:该 StatefulSet 可缩容的容器数量下限。 可选: 设置调度设置。 您可设置升级方式、节点亲和性、应用亲和性和应用非亲和性,详情参见https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity。 说明 亲和性调度依赖节点标签和 Pod 标签,您可使用内置的标签进行调度;也可预先为节点、Pod 配置相关的标签。 设置升级方式。 升级方式包括滚动升级(rollingupdate)和替换升级(recreate),详细请参见https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/ 设置节点亲和性,通过 Node 节点的 Label 标签进行设置。 节点亲和性 节点调度支持硬约束和软约束(Required/Preferred),以及丰富的匹配表达式(In, NotIn, Exists, DoesNotExist. Gt, and Lt): 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,效果与 NodeSelector 相同。本例中 Pod 只能调度到具有对应标签的 Node 节点。您可以定义多条硬约束规则,但只需满足其中一条。 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。本例中,调度会尽量不调度 Pod 到具有对应标签的 Node 节点。您还可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。 设置应用亲和性调度。决定应用的 Pod 可以和哪些 Pod 部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。 应用亲和性调度 根据节点上运行的 Pod 的标签(Label)来进行调度,支持硬约束和软约束,匹配的表达式有:In, NotIn, Exists, DoesNotExist。 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,Pod 的亲和性调度必须要满足后续定义的约束条件。 命名空间:该策略是依据 Pod 的 Label 进行调度,所以会受到命名空间的约束。 拓扑域:即 topologyKey,指定调度时作用域,这是通过 Node 节点的标签来实现的,例如指定为 kubernetes.io/hostname,那就是以 Node 节点为区分范围;如果指定为 beta.kubernetes.io/os,则以 Node 节点的操作系统类型来区分。 选择器:单击选择器右侧的加号按钮,您可添加多条硬约束规则。 查看应用列表:单击应用列表,弹出对话框,您可在此查看各命名空间下的应用,并可将应用的标签导入到亲和性配置页面。 硬约束条件:设置已有应用的标签、操作符和标签值。本例中,表示将待创建的应用调度到该主机上,该主机运行的已有应用具有 app:nginx 标签。 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。Pod 的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。 说明 权重:设置一条软约束规则的权重,介于 1-100,通过算法计算满足软约束规则的节点的权重,将 Pod 调度到权重最大的节点上。 设置应用非亲和性调度,决定应用的 Pod 不与哪些 Pod 部署在同一拓扑域。应用非亲和性调度的场景包括: 将一个服务的 Pod 分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。 给予 Pod 一个节点的独占访问权限来保证资源隔离,保证不会有其它 Pod 来分享节点资源。 把可能会相互影响的服务的 Pod 分散在不同的主机上。 说明 应用非亲和性调度的设置方式与亲和性调度相同,但是相同的调度规则代表的意思不同,请根据使用场景进行选择。 最后单击创建。 创建成功后,默认进入创建完成页面,会列出应用包含的对象,您可以单击查看应用详情进行查看。 查看详情1 默认进入有状态副本集详情页面。 查看副本详情 然后单击左上角返回列表,进入有状态副本集列表页面,查看创建的 StatefulSet 应用。 查看应用 可选: 选择所需的 nginx 应用,单击右侧伸缩,验证服务伸缩性。 在弹出的对话框中,将容器组数量设置为 3,您可发现扩容时,扩容容器组的排序依次递增;反之,进行缩容时,先按 Pod 次序从高到低进行缩容。这体现 StatefulSet 中 Pod 的次序稳定性。 验证服务伸缩 单击左侧导航栏中的应用 > 存储声明,您可发现,随着应用扩容,会随着 Pod 创建新的云存储卷;缩容后,已创建的 PV/PVC 不会删除。 存储声明 后续步骤 连接到 Master 节点,执行以下命令,验证持久化存储特性。 在云盘中创建临时文件: kubectl exec nginx-1 ls /tmp #列出该目录下的文件 lost+found kubectl exec nginx-1 touch /tmp/statefulset #增加一个临时文件statefulset kubectl exec nginx-1 ls /tmp lost+found statefulset 删除 Pod,验证数据持久性: kubectl delete pod nginx-1 pod"nginx-1" deleted 过一段时间,待Pod自动重启后,验证数据持久性,证明 StatefulSet 应用的高可用性。 kubectl exec nginx-1 ls /tmp #数据持久化存储 lost+found statefulset 想要了解更多信息,参见Kubernetes有状态服务-StatefulSet使用最佳实践。

1934890530796658 2020-03-26 11:41:16 0 浏览量 回答数 0

回答

阿里云Ingress除了提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机外,还支持将所有用户的HTTP请求日志记录到标准输出中。同时Ingress访问日志与阿里云日志服务打通,您可以使用日志服务快速创建日志分析和监控大盘。 前提条件 安装日志组件。 集群创建时,默认会安装日志组件,如未安装,请参考 使用日志服务进行Kubernetes日志采集进行手动安装。 升级Log Controller。 升级kube-system命名空间下的无状态应用(Deployment)alibaba-log-controller,替换以下内容: 镜像名称:registry-vpc.{region-id}.aliyuncs.com/acs/log-controller ,将其中的{region-id}替换为您集群所在Region ID,例如cn-hangzhou、cn-beijing、ap-southeast-1等。 镜像版本(Tag):版本不低于0.2.0.0-7f4d3bb-aliyun。 以下两种升级方法您可任选其一: 通过执行kubectl命令kubectl edit deployment alibaba-log-controller -n kube-system进行升级。 通过容器服务控制台升级。进入应用 > 无状态(Deployment),选择对应集群的命名空间kube-system,编辑alibaba-log-controller并保存。 部署Ingress采集配置 apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in you k8s cluster name: k8s-nginx-ingress spec: # logstore name to upload log logstore: nginx-ingress # product code, only for k8s nginx ingress productCode: k8s-nginx-ingress # logtail config detail logtailConfig: inputType: plugin # logtail config name, should be same with [metadata.name] configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: io.kubernetes.container.name: nginx-ingress-controller Stderr: false Stdout: true processors: - type: processor_regex detail: KeepSource: false Keys: - client_ip - x_forward_for - remote_user - time - method - url - version - status - body_bytes_sent - http_referer - http_user_agent - request_length - request_time - proxy_upstream_name - upstream_addr - upstream_response_length - upstream_response_time - upstream_status - req_id - host NoKeyError: true NoMatchError: true Regex: ^(\S+)\s-\s[([^]]+)]\s-\s(\S+)\s[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"])"\s"([^"])"\s(\S+)\s(\S+)+\s[([^]])]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S*).* SourceKey: content 日志采集配置针对Kubernetes进行了CRD扩展,可直接部署AliyunLogConfig的CRD配置,Log Controller会自动创建日志服务相关采集配置和报表资源,部署方式任选其一: 注意 请确保日志组件 alibaba-log-controller版本不低于0.2.0.0-76648ee-aliyun。更新版本后,若已经应用了该CRD配置,请删除该配置并重新应用。 上述配置只针对阿里云Kubernetes默认Ingress Controller中的日志格式生效,若您修改过Ingress Controller的访问日志格式,请根据通过DaemonSet-CRD方式采集日志修改上述CRD配置中的正则表达式提取processor_regex部分。 使用Kubectl命令部署 将上述CRD配置保存成nginx-ingress.yaml ,执行 kubectl apply -f 命令进行部署。 使用编排模板部署 登录容器服务管理控制台。 将上述CRD配置保存成编排模板。 有关创建编排模板的具体步骤,请参见创建编排模板。 基于该模板创建应用,选择您所在集群的default命名空间。 查看Ingress日志与报表 登录日志服务控制台。 在Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为 k8s-log-{cluster-id})。 在Project详情页面,默认进入日志库页面。名称为nginx-ingress的日志库(logstore)存放着所有的Ingress访问日志。单击左侧导航栏中的仪表盘进入仪表盘列表,可查看到所有Ingress的分析报表。 Ingress概览 Ingress概览报表主要展示当前Ingress的整体状态,主要包括以下几类信息: 整体架构状态(1天),包括PV、UV、流量、响应延迟、移动端占比和错误比例等。 网站实时状态(1分钟),包括PV、UV、成功率、5XX比例、平均延迟和P95/P99延迟等。 用户请求类信息(1天),包括1天/7天访问PV对比、访问地域分布、TOP访问省份/城市、移动端占比和Android/IOS占比等。 TOPURL统计(1小时),包括访问TOP10、延迟TOP10、5XX错误TOP10和404错误TOP10。 ingress概览 Ingress访问中心 Ingress访问中心主要侧重于用于访问请求相关的统计信息,一般用于运营分析,包括当日UV/PV、UV/PV分布、UV/PV趋势、TOP访问省份/城市、TOP访问浏览器、TOP访问IP、移动端占比和Android/IOS占比等。 ingress访问中心 Ingress监控中心 Ingress监控中心主要侧重于网站实时监控数据,一般用于完整实时监控与告警,包括请求成功率、错误比例、5XX比例、请求未转发比例、平均延迟、P95/P99/P9999延迟、状态码分布、Ingress压力分布、Service访问TOP10、Service错误TOP10、Service延迟TOP10和Service流量TOP10等。 Ingress监控中心 Ingress蓝绿发布监控中心 Ingress蓝绿发布监控中心主要用于版本发布时的实时监控与对比(版本前后对比以及蓝绿版本当前对比),以便您在服务发布时快速检测异常并进行回滚。在该报表中您需要选择进行对比的蓝绿版本(ServiceA和ServiceB),报表将根据您的选择动态显示蓝绿版本相关指标,包括PV、5XX比例、成功率、平均延迟、P95/P99/P9999延迟和流量等。 Ingress蓝绿发布监控中心 Ingress异常检测中心 Ingress异常检测中心基于日志服务提供的机器学习算法,通过多种时序分析算法从Ingress的指标中自动检测异常点,提高问题发现的效率。 Ingress异常检测中心 配置告警 日志服务除提供交互式分析、可视化报表之外,您可直接基于上述报表快速配置告警,告警支持通知钉钉WebHook、短信、邮件和自定义WebHook等。 告警详细配置方法请参考设置告警。 下述示例为Ingress配置5XX比例的告警,告警每5分钟执行一次,当5XX比例超过1%时触发。 进入Ingress监控中心报表,鼠标滑动到图表5XX比例的右上角,在弹出的提示框中单击新建告警。 配置告警 在告警页面中,填入告警名称、查询区间和执行间隔,查询语句中的total为5XX的百分比,因此触发条件填入:total > 1。 设置告警 在下一步的通知选项中,根据您的需求选择对应的通知方式,并填入对应参数即可完成告警创建。 设置通知 订阅定时报告 日志服务除支持通过告警方式通知外,还支持报表订阅功能,您可使用该功能将报表定期渲染成图片并通过邮件、钉钉群等方式发送。 订阅功能详细使用方法请参考订阅仪表盘。 下述示例为Ingress概览配置订阅功能,每天上午10点将报表发送到指定钉钉群: 进入Ingress概览报表,单击报表右上角的订阅按钮。 在弹出的配置页面中,频率选择每天、10:00,关闭添加水印选项。 通知类型中选择钉钉机器人,填入钉钉机器人的WebHook地址(WebHook地址请参见获取 Webhook 地址)即可完成订阅。

1934890530796658 2020-03-31 15:27:20 0 浏览量 回答数 0

回答

背景 Kubernetes的优势 Spark on kubernetes相比于on YARN等传统部署方式的优势: 1、统一的资源管理。不论是什么类型的作业都可以在一个统一kubernetes的集群运行。不再需要单独为大数据作业维护一个独立的YARN集群。 2、弹性的集群基础设施。资源层和应用层提供了丰富的弹性策略,我们可以根据应用负载需求选择 ECS 虚拟机、神龙裸金属和 GPU 实例进行扩容,除了kubernetes集群本生具备的强大的扩缩容能力,还可以对接生态,比如virtual kubelet。 3、轻松实现复杂的分布式应用的资源隔离和限制,从YRAN复杂的队列管理和队列分配中解脱。 4、容器化的优势。每个应用都可以通过docker镜像打包自己的依赖,运行在独立的环境,甚至包括Spark的版本,所有的应用之间都是隔离的。 5、大数据上云。目前大数据应用上云常见的方式有两种:1)用ECS自建YARN(不限于YARN)集群;2)购买EMR服务。如今多了一个选择——Kubernetes。既能获得完全的集群级别的掌控,又能从复杂的集群管理、运维中解脱,还能享受云所带来的弹性和成本优势。 Spark自2.3.0开始试验性支持Standalone、on YARN以及on Mesos之外的新的部署方式:Running Spark on Kubernetes ,并在后续的发行版中不断地加强。 后文将是实际的操作,分别让Spark应用在普通的Kubernetes集群、Serverless Kubernetes集群、以及Kubernetes + virtual kubelet等三种场景中部署并运行。 Spark on Kubernetes 准备数据以及Spark应用镜像 参考: 在ECI中访问HDFS的数据 在ECI中访问OSS的数据 创建kubernetes集群 如果已经有阿里云的ACK集群,该步可以忽略。 具体的创建流程参考:创建Kubernetes 托管版集群。 提交作业 为Spark创建一个RBAC的role 创建账号(默认namespace) kubectl create serviceaccount spark 绑定角色 kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default 直接使用spark-submit提交(不推荐的提交方式) liumihustdeMacBook-Pro:spark-on-k8s liumihust$ ./spark-2.3.0-bin-hadoop2.6/bin/spark-submit --master k8s://121.199.47.XX:6443 --deploy-mode cluster --name WordCount --class com.aliyun.liumi.spark.example.WordCount --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.executor.instances=2 --conf spark.kubernetes.container.image=registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-example local:///opt/spark/jars/SparkExampleJava-1.0-SNAPSHOT.jar 参数解释 —master :k8s集群的apiserver,这是决定spark是在k8s集群跑,还是在yarn上跑。 —deploy-mode:driver可以部署在集群的master节点(client)也可以在非master(cluster)节点。 spark.executor.instances: executor的数量 spark.kubernetes.container.image spark打包镜像(包含driver、excutor、应用,也支持单独配置) 提交基本流程 spark-10.png Running Spark on Kubernetes Spark先在k8s集群中创建Spark Driver(pod)。 Driver起来后,调用k8s API创建Executors(pods),Executors才是执行作业的载体。 作业计算结束,Executor Pods会被自动回收,Driver Pod处于Completed状态(终态)。可以供用户查看日志等。 Driver Pod只能被用户手动清理,或者被k8s GC回收。 结果分析 执行过程中的截图如下:spark-5.png 我们30G的数据用2个1C1G的Excutor处理了大约20分钟。 作业运行结束后查看结果: [root@liumi-hdfs ~]# $HADOOP_HOME/bin/hadoop fs -cat /pod/data/A-Game-of-Thrones-Result/* (142400000,the) (78400000,and) (77120000,) (62200000,to) (56690000,of) (56120000,a) (43540000,his) (35160000,was) (30480000,he) (29060000,in) (26640000,had) (26200000,her) (23050000,as) (22210000,with) (20450000,The) (19260000,you) (18300000,I) (17510000,she) (16960000,that) (16450000,He) (16090000,not) (15980000,it) (15080000,at) (14710000,for) (14410000,on) (12660000,but) (12470000,him) (12070000,is) (11240000,from) (10300000,my) (10280000,have) (10010000,were) 至此,已经能在kubernetes集群部署并运行spark作业。 Spark on Serverless Kubernetes Serverless Kubernetes (ASK) 相比于普通的kubernetes集群,比较大的一个优势是,提交作业前无需提前预留任何资源,无需关心集群的扩缩容,所有资源都是随作业提交自动开始申请,作业执行结束后自动释放。作业执行完后就只剩一个SparkApplication和终态的Driver pod(只保留管控数据)。原理图如下图所示:spark-7.png Running Spark on Serverless Kubernetes ASK通过virtual kubelet调度pod到阿里云弹性容器实例。虽然架构上跟ACK有明显的差异,但是两者都是全面兼容kubernetes标准的。所以on ASK跟前面的spark on kubernetes准备阶段的基本是一致的,即HDFS数据准备,spark base镜像的准备、spark应用镜像的准备等。主要就是作业提交方式稍有不同,以及一些额外的基本环境配置。 创建serverless kubernetes集群 创建以及操作集群的详细步骤参考:操作Serverless Kubernetes集群的方式 本文都是拷贝kubeconfig到本地服务器来访问集群。 选择标准serverless集群:eci-spark-4 基本参数: 1、自定义集群名。 2、选择地域、以及可用区。 3、专有网络可以用已有的也可以由容器服务自动创建的。 4、是否公网暴露API server,如有需求建议开启。 5、开启privatezone,必须开启。 6、日志收集,建议开启。eci-spark-5 注: 1、提交之前一定要升级集群的集群的virtual kubelet的版本(新建的集群可以忽略),只有目前最新版的VK才能跑Spark作业。 2、ASK集群依赖privatezone做服务发现,所以集群不需要开启privatezone,创建的时候需要勾选。如果创建的时候没有勾选,需要联系我们帮开启。不然Spark excutor会找不到driver service。 *制作镜像cache 由于后面可能要进行大规模启动,为了提高容器启动速度,提前将Spark应用的镜像缓存到ECI本地,采用k8s标准的CRD的方式,具体的流程参考:使用CRD加速创建Pod 提交: 由于spark submit目前支持的参数非常有限,所以ASK场景中建议不要使用spark submit直接提交,而是直接采用Spark Operator。也是我们推荐的方式。 Spark Operator 就是为了解决在Kubernetes集群部署并维护Spark应用而开发的。 eci-spark-6 Spark Operator几个主要的概念: SparkApplication:标准的k8s CRD,有CRD就有一个Controller 与之对应。Controller负责监听CRD的创建、更新、以及删除等事件,并作出对应的Action。 ScheduledSparkApplication:SparkApplication的升级,支持带有自定义时间调度策略的作业提交,比如cron。 Submission runner:对Controller发起的创建请求提交spark-submit。 Spark pod monitor:监听Spark pods的状态和事件更新并告知Controller。 安装Spark Operator 推荐用 helm 3.0 helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator helm install incubator/sparkoperator --namespace default --set operatorImageName=registry.cn-hangzhou.aliyuncs.com/eci_open/spark-operator --set operatorVersion=v1beta2-1.0.1-2.4.4 --generate-name --set enableWebhook=true 注:在Serverless Kubernetes安装时不要使用enableWebhook=true选项 安装完成后可以看到集群多了个spark operator pod。eci-saprk-7 选项说明: 1、—set operatorImageName:指定operator镜像,默认的google的镜像阿里云ECI内拉不下来,可以先拉取到本地然后推到ACR。 2、—set operatorVersion operator:镜像仓库名和版本不要写在一起。 3、—generate-name 可以不用显式设置安装名。 4、—set enableWebhook 默认不会打开,对于需要使用ACK+ECI的用户,会用到nodeSelector、tolerations这些高级特性,Webhook 必须要打开,后面会讲到。Serverless Kubernetes 不要打开。 注: 创建spark operator的时候,一定要确保镜像能拉下来,推荐直接使用eci_open提供的镜像,因为spark operator卸载的时候也是用相同的镜像启动job进行清理,如果镜像拉不下来清理job也会卡主,导致所有的资源都要手动清理,比较麻烦。 申明wordcount SparkApplication: apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: wordcount namespace: default spec: type: Java mode: cluster image: "registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-example" imagePullPolicy: IfNotPresent mainClass: com.aliyun.liumi.spark.example.WordCount mainApplicationFile: "local:///opt/spark/jars/SparkExampleJava-1.0-SNAPSHOT.jar" sparkVersion: "2.4.4" restartPolicy: type: OnFailure onFailureRetries: 2 onFailureRetryInterval: 5 onSubmissionFailureRetries: 2 onSubmissionFailureRetryInterval: 10 timeToLiveSeconds: 36000 sparkConf: "spark.kubernetes.allocation.batch.size": "10" driver: cores: 2 memory: "4096m" labels: version: 2.4.4 spark-app: spark-wordcount role: driver annotations: k8s.aliyun.com/eci-image-cache: "true" serviceAccount: spark executor: cores: 1 instances: 100 memory: "1024m" labels: version: 2.4.4 role: executor annotations: k8s.aliyun.com/eci-image-cache: "true" 注:大部分的参数都可以直接通过SparkApplication CRD已经支持的参数设置,目前支持的所有参数参考:SparkApplication CRD,此外还支持直接以sparkConf形式的传入。 提交: kubectl create -f wordcount-operator-example.yaml 结果分析 我们是100个1C1G的Excutor并发启动,应用的镜像大小约为 500 MB。 作业执行过程截图:eci-spark-8eci-spark-9 可以看到并发启动的100个pod基本在30s内可以完成全部的启动,其中93%可以在20秒内完成启动。 看下作业执行时间(包括了vk调度100个Excutor pod时间、每个Excutor pod资源准备的时间、以及作业实际执行的时间等): exitCode: 0 finishedAt: '2019-11-16T07:31:59Z' reason: Completed startedAt: '2019-11-16T07:29:01Z' 可以看到总共只花了178S,时间降了一个数量级。 ACK + ECI 在Spark中,Driver和Excutor之间的启动顺序是串行的。尽管ECI展现了出色的并发创建Executor pod的能力,但是ASK这种特殊架构会让Driver和Excutor之间的这种串行体现的比较明显,通常情况下在ECI启动一个Driver pod需要大约20s的时间,然后才是大规模的Excutor pod的启动。对于一些响应要求高的应用,Driver的启动速度可能比Excutor执行作业的耗时更重要。这个时候,我们可以采用ACK+ECI,即传统的Kubernetes集群 + virtual kubelet的方式:eci-spark-9 对于用户来说,只需如下简单的几步就可以将excutor调度到ECI的virtual node。 1、在ACK集群中安装ECI的virtual kubelet。 进入容器服务控制台的应用目录栏,搜索”ack-virtual-node”: eci-spark-10 点击进入,选择要安装的集群。eci-spark-11 必填参数参考: virtualNode: image: repository: registry.cn-hangzhou.aliyuncs.com/acs/virtual-nodes-eci tag: v1.0.0.1-aliyun affinityAdminssion: enabled: true image: repository: registry.cn-hangzhou.aliyuncs.com/ask/virtual-node-affinity-admission-controller tag: latest env: ECI_REGION: "cn-hangzhou" #集群所在的地域 ECI_VPC: vpc-bp187fy2e7l123456 # 集群所在的vpc,和创建集群的时候保持一致即可,可以在集群概览页查看 ECI_VSWITCH: vsw-bp1bqf53ba123456 # 资源所在的交换机,同上 ECI_SECURITY_GROUP: sg-bp12ujq5zp12346 # 资源所在的安全组,同上 ECI_ACCESS_KEY: XXXXX #账号AK ECI_SECRET_KEY: XXXXX #账号SK ALIYUN_CLUSTERID: virtual-kubelet 2、修改应用的yaml 为excutor增加如下参数即可: nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists 完整的应用参数如下: apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: wordcount namespace: default spec: type: Java mode: cluster image: "registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-example" imagePullPolicy: IfNotPresent mainClass: com.aliyun.liumi.spark.example.WordCount mainApplicationFile: "local:///opt/spark/jars/SparkExampleJava-1.0-SNAPSHOT.jar" sparkVersion: "2.4.4" restartPolicy: type: OnFailure onFailureRetries: 2 onFailureRetryInterval: 5 onSubmissionFailureRetries: 2 onSubmissionFailureRetryInterval: 10 timeToLiveSeconds: 36000 sparkConf: "spark.kubernetes.allocation.batch.size": "10" driver: cores: 2 memory: "4096m" labels: version: 2.4.4 spark-app: spark-wordcount role: driver annotations: k8s.aliyun.com/eci-image-cache: "true" serviceAccount: spark executor: cores: 1 instances: 100 memory: "1024m" labels: version: 2.4.4 role: executor annotations: k8s.aliyun.com/eci-image-cache: "true" #nodeName: virtual-kubelet nodeSelector: type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists 这样就可以将Driver调度到ACK,Excutor调度到ECI上,完美互补。 3、提交 效果如下:eci-spark-12 看下作业执行时间: exitCode: 0 finishedAt: '2019-11-16T07:25:05Z' reason: Completed startedAt: '2019-11-16T07:22:40Z' 总共花了145秒,更重要的是Driver直接在本地起,只花了约2秒的时间就启动了。 附录 Spark Base 镜像: 本样例采用的是谷歌提供的 gcr.io/spark-operator/spark:v2.4.4 ECI已经帮拉取到ACR仓库,各地域地址如下: 公网地址:registry.{对应regionId}.aliyuncs.com/eci_open/spark:2.4.4 vpc网络地址:registry-vpc.{对应regionId}.aliyuncs.com/eci_open/spark:2.4.4 Spark Operator 镜像 本样例采用的是谷歌提供的 gcr.io/spark-operator/spark-operator:v1beta2-1.0.1-2.4.4 ECI已经帮拉取到ACR仓库,各地域地址如下: 公网地址:registry.{对应regionId}.aliyuncs.com/eci_open/spark-operator:v1beta2-1.0.1-2.4.4 vpc网络地址:registry-vpc.{对应regionId}.aliyuncs.com/eci_open/spark-operator:v1beta2-1.0.1-2.4.4

1934890530796658 2020-03-20 18:30:16 0 浏览量 回答数 0

问题

利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案

青蛙跳 2019-12-01 21:33:11 834 浏览量 回答数 0

回答

前提条件 您需要开通容器服务和访问控制(RAM)服务。 登录 容器服务管理控制台和RAM 管理控制台开通相应的服务。 说明 用户账户需有 100 元的余额并通过实名认证,否则无法创建按量付费的 ECS 实例和负载均衡。 随集群一同创建的负载均衡实例只支持按量付费的方式。 Kubernetes 集群仅支持专有网络 VPC。 每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败。请在创建集群前确认您的配额。如果您需要提高配额,请提交工单申请。 每个账号默认最多可以创建 5 个集群(所有地域下),每个集群中最多可以添加 40 个节点。如果您需要创建更多的集群或者节点,请提交工单申请。 说明 Kubernetes 集群中,VPC 默认路由条目不超过 48 条,意味着 Kubernetes 集群使用 VPC 时,默认节点上限是 48 个,如果需要更大的节点数,需要您先对目标 VPC 开工单,提高 VPC 路由条目,再对容器服务提交工单。 每个账号默认最多可以创建 100 个安全组。 每个账号默认最多可以创建 60 个按量付费的负载均衡实例。 每个账号默认最多可以创建 20 个EIP。 创建安全沙箱容器 Kubernetes 集群时,以下界面参数需要按照表中的要求配置,否则创建的集群将无法使用安全沙箱容器的场景。 参数 配置 可用区 目前只有神龙实例支持安全沙箱容器,请确保所选可用区有神龙实例。 kubernetes 版本 1.14.6-aliyun.1 或更高版本。 容器运行时 安全沙箱容器 Worker 实例 新增实例 节点类型 包年包月 实例规格 神龙裸金属服务器(神龙) 挂载数据盘 请至少挂载一块不小于 200GiB 的数据盘,建议 1T+。 操作系统类型 Linux 网络插件 Terway 操作步骤 登录容器服务管理控制台。 在控制台左侧导航栏中,选择集群 > 集群,进入集群列表页面。 单击页面右上角的创建 Kubernetes 集群,在弹出的选择集群模板页面,选择标准托管集群页面,并单击创建,进入Kubernetes 托管版页面。 集群配置页面 完成集群配置。 完成集群基础选项配置。 配置项 描述 集群名称 填写集群的名称。 说明 集群名称应包含 1~63 个字符,可包含数字、汉字、英文字符或连字符(-)。 Kubernetes 版本 选择 1.14.6-aliyun.1 或更高版本。 容器运行时 必须选择安全沙箱容器。 地域 选择集群所在的地域。 资源组 将鼠标悬浮于页面上方的账号全部资源,选择集群所在的资源组。这里显示选择的资源组。 专有网络 设置集群的网络。 说明 Kubernetes 集群仅支持专有网络。您可以在已有 VPC 列表中选择所需的 VPC。如果没有您需要的专有网络,可以通过单击创建专有网络进行创建,请参见创建专有网络。 虚拟交换机 设置虚拟交换机。 说明 您可以在已有虚拟交换机列表中,根据可用区选择 1-3 个交换机 。如果没有您需要的交换机,可以通过单击创建虚拟交换机进行创建,请参见创建交换机。 网络插件 安全沙箱容器集群的网络类型目前仅支持 Terway 。具体请参见如何使用Terway网络插件。 指定 Terway 网络插件需要为 Pod 选择可用的 VSwitch,这些 VSwitch 的网段掩码必须小于或等于 19,例如 172.17.128.0/19;当集群创建 Pod 时,会为 Pod 从选定的那些 VSwitch 网段中分配 IP。 Pod 虚拟交换机 您需要为 Pod 分配 IP 的虚拟交换机。每个 Pod 虚拟交换机分别对应一个 Worker 实例的虚拟交换机。 Service CIDR 您需要指定 Service CIDR,网段不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复,创建成功后不能修改。而且 Service 地址段也不能和 Pod 地址段重复,有关 Kubernetes 网络地址段规划的信息,请参见VPC下 Kubernetes 的网络地址段规划。 配置 SNAT 设置是否为专有网络配置 SNAT 网关。 说明 如果您使用的 VPC 中当前已有 NAT 网关,容器服务会使用已有的 NAT 网关。 如果 VPC 中没有 NAT 网关,系统会默认自动为您创建一个 NAT 网关。如果您不希望系统自动创建 NAT 网关,可以取消勾选页面下方的为专有网络配置 SNAT。此时您需要自行配置 NAT 网关实现 VPC 安全访问公网环境,或者手动配置 SNAT,否则 VPC 内实例将不能正常访问公网,会导致集群创建失败。 公网访问 设置是否开放使用 EIP 暴露 API Server。 说明 API Server 提供了各类资源对象(Pod,Service 等)的增删改查及 watch 等 HTTP Rest 接口。 如果选择开放,会创建一个 EIP,并挂载到内网 SLB 上。此时,Master 节点的 6443 端口(对应 API Server)暴露出来,用户可以在外网通过 kubeconfig 连接或操作集群。 如果选择不开放,则不会创建 EIP,用户只能在 VPC 内部用 kubeconfig 连接并操作集群。 RDS 白名单 设置 RDS 白名单。将节点 IP 添加到 RDS 实例的白名单中。 说明 允许白名单 RDS 访问 Kubernetes 集群,RDS 必须在当前集群的 VPC 内。 自定义安全组 设置安全组。单击请选择安全组,在弹出的页面选中目标安全组,单击确定。 详细内容请参见安全组概述。 说明 当前只有白名单用户可使用该功能。提交工单申请使用。 完成集群高级选项配置。 配置项 描述 kube-proxy 代理模式 支持 iptables 和 IPVS 两种模式。 iptables:成熟稳定的 kube-proxy 代理模式,Kubernetes service 的服务发现和负载均衡使用 iptables 规则配置,但性能一般,受规模影响较大,适用于集群存在少量的 service。 IPVS:高性能的 kube-proxy 代理模式,Kubernetes service 的服务发现和负载均衡使用 Linux ipvs 模块进行配置,适用于集群存在大量的 service,对负载均衡有高性能要求的场景。 标签 为集群绑定标签。输入键和对应的值,单击添加。 说明 键是必需的,而 值 是可选的,可以不填写。 键不能是 aliyun、http:// 、https:// 开头的字符串,不区分大小写,最多 64 个字符。 值不能是 http:// 或 https://,可以为空,不区分大小写,最多 128 个字符。 同一个资源,标签键不能重复,相同标签键(Key)的标签会被覆盖。 如果一个资源已经绑定了 20 个标签,已有标签和新建标签会失效,您需要解绑部分标签后才能再绑定新的标签。 集群本地域名 设置是否配置集群本地域名。 说明 默认域名为 cluster.local,可自定义域名。域名由两段组成,每段不超过 63 个字符,且只能使用大小写字母和数字,不能为空。 集群删除保护 设置是否启用集群删除保护。为防止通过控制台或 API 误释放集群。 单击下一步:Worker 配置,完成 Worker 节点配置。 说明 安全沙箱容器场景下, Worker 节点仅支持神龙工作节点,选择神龙型号为 ecs.ebmg5s.24xlarge 完成 Work 节点基础选项配置。 配置项 描述 Worker 实例 只支持新增实例,暂不支持添加已有实例。 付费类型 神龙实例付费模式只支持包年包月,不支持按量付费。 购买时长 选择包年包月时,需设置购买时长。目前支持选择 1、2、3、6 和12 个月。 自动续费 选择包年包月时,需设置是否自动续费。 实例规格 目前机型仅支持神龙裸金属服务器(神龙),该机型的实例规格均可使用。 已选规格 已选的实例规格。只能选择一个规格。 数量 新增 Worker 实例的数量。 系统盘 支持 SSD 云盘和高效云盘。 挂载数据盘 支持 SSD 云盘、高效云盘和普通云盘。 说明 挂载的数据盘用于存储节点上所有容器的根文件系统。因此,请至少挂载一块不小于 200 GiB 的数据盘,建议 1T 以上。 操作系统 安全沙箱容器集群仅支持 Linux 系统。 登录方式 设置密钥。 您需要在创建集群的时候选择密钥对登录方式,单击新建密钥对,跳转到 ECS 云服务器控制台,创建密钥对,参见创建SSH密钥对。密钥对创建完毕后,设置该密钥对作为登录集群的凭据。 设置密码。 登录密码:设置节点的登录密码。 确认密码:确认设置的节点登录密码。 密钥对 设置高级选项。 配置项 描述 实例保护 设置是否启用实例保护。 说明 为防止通过控制台或 API 误释放集群节点,默认启用实例保护。 实例自定义数据 请参见生成实例自定义数据。 自定义镜像 不要选择自定义镜像。安全沙箱容器集群不支持使用自定义镜像。 自定义节点名称 是否开启自定义节点名称。 节点名称由前缀 + 节点 IP 地址子串 + 后缀三部分组成: 前缀和后缀均可由.分隔的一个或多个部分构成,每个部分可以使用小写字母、数字和-,且首尾必须为小写字母和数字。 IP 地址段长度指截取节点 IP 地址末尾的位数,取值范围 5-12。 例如:节点 IP 地址为192.168.0.55,指定前缀为 aliyun.com,IP 地址段长度为 5,后缀为 test,则节点名称为aliyun.com00055test。 CPU Policy 设置 CPU policy。 none:默认策略,表示启用现有的默认 CPU 亲和方案。 static:允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占性。 污点(Taints) 为集群内所有Worker节点添加污点。 单击下一步:组件配置,完成组件配置。 配置项 描述 Ingress 设置是否安装 Ingress 组件。默认勾选安装 Ingress 组件 ,请参见 Ingress 支持。 说明 如果您勾选创建 Ingress Dashboard,则需要同步安装日志服务组件。 存储插件 设置存储插件,支持 Flexvolume 和 CSI。Kubernetes 集群通过 Pod 可自动绑定阿里云云盘、NAS、 OSS 存储服务。请参见存储管理-Flexvolume 和存储管理-CSI。 云监控插件 设置是否启用云监控插件。您可以选择在 ECS 节点上安装云监控插件,从而在云监控控制台查看所创建 ECS 实例的监控信息。 日志服务 设置是否启用日志服务,您可使用已有 Project 或新建一个 Project。 勾选使用日志服务,会在集群中自动配置日志服务插件。创建应用时,您可通过简单配置,快速使用日志服务,详情参见使用日志服务进行Kubernetes日志采集。 工作流引擎 设置是否使用 AGS。 如果勾选 AGS,则创建集群时系统自动安装 AGS 工作流插件。 如果不勾选,则需要手动安装 AGS 工作流插件,请参见AGS命令行帮助。 可选组件 在系统组件之外,还可以选择安装容器服务提供的其他组件。 单击创建集群,在弹出的当前配置确认页面,单击创建,启动部署。 说明 一个包含多节点的 Kubernetes 集群的创建时间一般约为十分钟。 执行结果 集群创建成功后,您可以在容器服务管理控制台的 Kubernetes 集群列表页面查看所创建的集群。集群列表 您可以单击集群操作列的查看日志,进入集群日志信息页面查看集群的日志信息。 您也可以在集群日志信息页面中,单击资源栈事件查看更详细的信息。集群日志详情 在集群列表页面中,找到刚创建的集群,单击操作列中的管理,查看集群的基本信息和连接信息。集群基本信息 其中: API Server 公网连接端点:Kubernetes 的 API Server 对公网提供服务的地址和端口,可以通过此服务在用户终端使用 kubectl 等工具管理集群。 API Service 内网连接端点:Kubernetes 的 API server 对集群内部提供服务的地址和端口,此 IP 为负载均衡的地址。 Pod网络CIDR:Kubernetes 的 Pod CIDR 定义集群内 Pod 的网段范围。 Service CIDR:Kubernetes 的 Service CIDR 定义集群内暴露服务的网段范围。 测试域名:为集群中的服务提供测试用的访问域名。服务访问域名后缀是 <cluster_id>.<region_id>.alicontainer.com。 kube-proxy 代理模式:Kubernetes service 的服务发现和负载均衡需要通过服务代理进行配置,支持 iptables 和 IPVS 两种模式。 节点 Pod 数量:单个节点可运行 Pod 数量的上限,默认值为 128。 您可以通过kubectl连接Kubernetes集群,执行 kubectl get node查看集群的节点信息。集群结果

huc_逆天 2020-03-26 18:16:45 0 浏览量 回答数 0

回答

您可以通过容器服务控制台非常方便的创建安全沙箱容器集群。 前提条件 您需要开通容器服务和访问控制(RAM)服务。 登录 容器服务管理控制台和RAM 管理控制台开通相应的服务。 说明 用户账户需有 100 元的余额并通过实名认证,否则无法创建按量付费的 ECS 实例和负载均衡。 随集群一同创建的负载均衡实例只支持按量付费的方式。 Kubernetes 集群仅支持专有网络 VPC。 每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败。请在创建集群前确认您的配额。如果您需要提高配额,请提交工单申请。 每个账号默认最多可以创建 5 个集群(所有地域下),每个集群中最多可以添加 40 个节点。如果您需要创建更多的集群或者节点,请提交工单申请。 说明 Kubernetes 集群中,VPC 默认路由条目不超过 48 条,意味着 Kubernetes 集群使用 VPC 时,默认节点上限是 48 个,如果需要更大的节点数,需要您先对目标 VPC 开工单,提高 VPC 路由条目,再对容器服务提交工单。 每个账号默认最多可以创建 100 个安全组。 每个账号默认最多可以创建 60 个按量付费的负载均衡实例。 每个账号默认最多可以创建 20 个EIP。 创建安全沙箱容器 Kubernetes 集群时,以下界面参数需要按照表中的要求配置,否则创建的集群将无法使用安全沙箱容器的场景。 参数 配置 可用区 目前只有神龙实例支持安全沙箱容器,请确保所选可用区有神龙实例。 kubernetes 版本 1.14.6-aliyun.1 或更高版本。 容器运行时 安全沙箱容器 Worker 实例 新增实例 节点类型 包年包月 实例规格 神龙裸金属服务器(神龙) 挂载数据盘 请至少挂载一块不小于 200GiB 的数据盘,建议 1T+。 操作系统类型 Linux 网络插件 Terway 操作步骤 登录容器服务管理控制台。 在控制台左侧导航栏中,选择集群 > 集群,进入集群列表页面。 单击页面右上角的创建 Kubernetes 集群,在弹出的选择集群模板页面,选择标准托管集群页面,并单击创建,进入Kubernetes 托管版页面。 集群配置页面 完成集群配置。 完成集群基础选项配置。 配置项 描述 集群名称 填写集群的名称。 说明 集群名称应包含 1~63 个字符,可包含数字、汉字、英文字符或连字符(-)。 Kubernetes 版本 选择 1.14.6-aliyun.1 或更高版本。 容器运行时 必须选择安全沙箱容器。 地域 选择集群所在的地域。 资源组 将鼠标悬浮于页面上方的账号全部资源,选择集群所在的资源组。这里显示选择的资源组。 专有网络 设置集群的网络。 说明 Kubernetes 集群仅支持专有网络。您可以在已有 VPC 列表中选择所需的 VPC。如果没有您需要的专有网络,可以通过单击创建专有网络进行创建,请参见创建专有网络。 虚拟交换机 设置虚拟交换机。 说明 您可以在已有虚拟交换机列表中,根据可用区选择 1-3 个交换机 。如果没有您需要的交换机,可以通过单击创建虚拟交换机进行创建,请参见创建交换机。 网络插件 安全沙箱容器集群的网络类型目前仅支持 Terway 。具体请参见如何使用Terway网络插件。 指定 Terway 网络插件需要为 Pod 选择可用的 VSwitch,这些 VSwitch 的网段掩码必须小于或等于 19,例如 172.17.128.0/19;当集群创建 Pod 时,会为 Pod 从选定的那些 VSwitch 网段中分配 IP。 Pod 虚拟交换机 您需要为 Pod 分配 IP 的虚拟交换机。每个 Pod 虚拟交换机分别对应一个 Worker 实例的虚拟交换机。 Service CIDR 您需要指定 Service CIDR,网段不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复,创建成功后不能修改。而且 Service 地址段也不能和 Pod 地址段重复,有关 Kubernetes 网络地址段规划的信息,请参见VPC下 Kubernetes 的网络地址段规划。 配置 SNAT 设置是否为专有网络配置 SNAT 网关。 说明 如果您使用的 VPC 中当前已有 NAT 网关,容器服务会使用已有的 NAT 网关。 如果 VPC 中没有 NAT 网关,系统会默认自动为您创建一个 NAT 网关。如果您不希望系统自动创建 NAT 网关,可以取消勾选页面下方的为专有网络配置 SNAT。此时您需要自行配置 NAT 网关实现 VPC 安全访问公网环境,或者手动配置 SNAT,否则 VPC 内实例将不能正常访问公网,会导致集群创建失败。 公网访问 设置是否开放使用 EIP 暴露 API Server。 说明 API Server 提供了各类资源对象(Pod,Service 等)的增删改查及 watch 等 HTTP Rest 接口。 如果选择开放,会创建一个 EIP,并挂载到内网 SLB 上。此时,Master 节点的 6443 端口(对应 API Server)暴露出来,用户可以在外网通过 kubeconfig 连接或操作集群。 如果选择不开放,则不会创建 EIP,用户只能在 VPC 内部用 kubeconfig 连接并操作集群。 RDS 白名单 设置 RDS 白名单。将节点 IP 添加到 RDS 实例的白名单中。 说明 允许白名单 RDS 访问 Kubernetes 集群,RDS 必须在当前集群的 VPC 内。 自定义安全组 设置安全组。单击请选择安全组,在弹出的页面选中目标安全组,单击确定。 详细内容请参见安全组概述。 说明 当前只有白名单用户可使用该功能。提交工单申请使用。 完成集群高级选项配置。 配置项 描述 kube-proxy 代理模式 支持 iptables 和 IPVS 两种模式。 iptables:成熟稳定的 kube-proxy 代理模式,Kubernetes service 的服务发现和负载均衡使用 iptables 规则配置,但性能一般,受规模影响较大,适用于集群存在少量的 service。 IPVS:高性能的 kube-proxy 代理模式,Kubernetes service 的服务发现和负载均衡使用 Linux ipvs 模块进行配置,适用于集群存在大量的 service,对负载均衡有高性能要求的场景。 标签 为集群绑定标签。输入键和对应的值,单击添加。 说明 键是必需的,而 值 是可选的,可以不填写。 键不能是 aliyun、http:// 、https:// 开头的字符串,不区分大小写,最多 64 个字符。 值不能是 http:// 或 https://,可以为空,不区分大小写,最多 128 个字符。 同一个资源,标签键不能重复,相同标签键(Key)的标签会被覆盖。 如果一个资源已经绑定了 20 个标签,已有标签和新建标签会失效,您需要解绑部分标签后才能再绑定新的标签。 集群本地域名 设置是否配置集群本地域名。 说明 默认域名为 cluster.local,可自定义域名。域名由两段组成,每段不超过 63 个字符,且只能使用大小写字母和数字,不能为空。 集群删除保护 设置是否启用集群删除保护。为防止通过控制台或 API 误释放集群。 单击下一步:Worker 配置,完成 Worker 节点配置。 说明 安全沙箱容器场景下, Worker 节点仅支持神龙工作节点,选择神龙型号为 ecs.ebmg5s.24xlarge 完成 Work 节点基础选项配置。 配置项 描述 Worker 实例 只支持新增实例,暂不支持添加已有实例。 付费类型 神龙实例付费模式只支持包年包月,不支持按量付费。 购买时长 选择包年包月时,需设置购买时长。目前支持选择 1、2、3、6 和12 个月。 自动续费 选择包年包月时,需设置是否自动续费。 实例规格 目前机型仅支持神龙裸金属服务器(神龙),该机型的实例规格均可使用。 已选规格 已选的实例规格。只能选择一个规格。 数量 新增 Worker 实例的数量。 系统盘 支持 SSD 云盘和高效云盘。 挂载数据盘 支持 SSD 云盘、高效云盘和普通云盘。 说明 挂载的数据盘用于存储节点上所有容器的根文件系统。因此,请至少挂载一块不小于 200 GiB 的数据盘,建议 1T 以上。 操作系统 安全沙箱容器集群仅支持 Linux 系统。 登录方式 设置密钥。 您需要在创建集群的时候选择密钥对登录方式,单击新建密钥对,跳转到 ECS 云服务器控制台,创建密钥对,参见创建SSH密钥对。密钥对创建完毕后,设置该密钥对作为登录集群的凭据。 设置密码。 登录密码:设置节点的登录密码。 确认密码:确认设置的节点登录密码。 密钥对 设置高级选项。 配置项 描述 实例保护 设置是否启用实例保护。 说明 为防止通过控制台或 API 误释放集群节点,默认启用实例保护。 实例自定义数据 请参见生成实例自定义数据。 自定义镜像 不要选择自定义镜像。安全沙箱容器集群不支持使用自定义镜像。 自定义节点名称 是否开启自定义节点名称。 节点名称由前缀 + 节点 IP 地址子串 + 后缀三部分组成: 前缀和后缀均可由.分隔的一个或多个部分构成,每个部分可以使用小写字母、数字和-,且首尾必须为小写字母和数字。 IP 地址段长度指截取节点 IP 地址末尾的位数,取值范围 5-12。 例如:节点 IP 地址为192.168.0.55,指定前缀为 aliyun.com,IP 地址段长度为 5,后缀为 test,则节点名称为aliyun.com00055test。 CPU Policy 设置 CPU policy。 none:默认策略,表示启用现有的默认 CPU 亲和方案。 static:允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占性。 污点(Taints) 为集群内所有Worker节点添加污点。 单击下一步:组件配置,完成组件配置。 配置项 描述 Ingress 设置是否安装 Ingress 组件。默认勾选安装 Ingress 组件 ,请参见 Ingress 支持。 说明 如果您勾选创建 Ingress Dashboard,则需要同步安装日志服务组件。 存储插件 设置存储插件,支持 Flexvolume 和 CSI。Kubernetes 集群通过 Pod 可自动绑定阿里云云盘、NAS、 OSS 存储服务。请参见存储管理-Flexvolume 和存储管理-CSI。 云监控插件 设置是否启用云监控插件。您可以选择在 ECS 节点上安装云监控插件,从而在云监控控制台查看所创建 ECS 实例的监控信息。 日志服务 设置是否启用日志服务,您可使用已有 Project 或新建一个 Project。 勾选使用日志服务,会在集群中自动配置日志服务插件。创建应用时,您可通过简单配置,快速使用日志服务,详情参见使用日志服务进行Kubernetes日志采集。 工作流引擎 设置是否使用 AGS。 如果勾选 AGS,则创建集群时系统自动安装 AGS 工作流插件。 如果不勾选,则需要手动安装 AGS 工作流插件,请参见AGS命令行帮助。 可选组件 在系统组件之外,还可以选择安装容器服务提供的其他组件。 单击创建集群,在弹出的当前配置确认页面,单击创建,启动部署。 说明 一个包含多节点的 Kubernetes 集群的创建时间一般约为十分钟。 执行结果 集群创建成功后,您可以在容器服务管理控制台的 Kubernetes 集群列表页面查看所创建的集群。集群列表 您可以单击集群操作列的查看日志,进入集群日志信息页面查看集群的日志信息。 您也可以在集群日志信息页面中,单击资源栈事件查看更详细的信息。集群日志详情 在集群列表页面中,找到刚创建的集群,单击操作列中的管理,查看集群的基本信息和连接信息。集群基本信息 其中: API Server 公网连接端点:Kubernetes 的 API Server 对公网提供服务的地址和端口,可以通过此服务在用户终端使用 kubectl 等工具管理集群。 API Service 内网连接端点:Kubernetes 的 API server 对集群内部提供服务的地址和端口,此 IP 为负载均衡的地址。 Pod网络CIDR:Kubernetes 的 Pod CIDR 定义集群内 Pod 的网段范围。 Service CIDR:Kubernetes 的 Service CIDR 定义集群内暴露服务的网段范围。 测试域名:为集群中的服务提供测试用的访问域名。服务访问域名后缀是 <cluster_id>.<region_id>.alicontainer.com。 kube-proxy 代理模式:Kubernetes service 的服务发现和负载均衡需要通过服务代理进行配置,支持 iptables 和 IPVS 两种模式。 节点 Pod 数量:单个节点可运行 Pod 数量的上限,默认值为 128。 您可以通过kubectl连接Kubernetes集群,执行 kubectl get node查看集群的节点信息。集群结果 上一篇:概述

1934890530796658 2020-03-26 18:10:44 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SQL审核 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 人工智能 阿里云云栖号 云栖号案例 云栖号直播