【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

OpenSource 为 Kubernetes 提供云服务支持

  • 2019-10-29
  • 本文字数:4408 字

    阅读完需:约 14 分钟

OpenSource 为Kubernetes提供云服务支持

2017 年 9 月,Mesosphere 宣布其畅销的 DC/OS 集群管理解决方案将重新支持 Kubernetes。Beta 发布版支持创建集群,然后您可以使用 SSH 隧道访问节点并部署标准的 Kubernetes primitive 数据。从一月初开始正式增加支持 --cloud-provider 旗标,从此您可以使用 Classic Load Balancer (ELB) 或 Elastic Block Store (EBS) 等标准的 AWS 组件。在本博文中,我们将首先创建一个 DC/OS 集群,然后在它上面安装 Beta 版 Kubernetes,最后部署使用 type: LoadBalancer 的服务,以展示如何将 ELB 入站控制器添加到在 DC/OS Kubernetes 集群上运行的应用程序中。本教程将需要大约一小时的时间。


Michael Ruiz 以前的一篇博文中,他解释了 Mesosphere 的 DC/OS 是什么以及它对于在 AWS 上运行 DC/OS 的基本影响。简而言之:DC/OS 是使用 Apache Mesos 框架搭建的,其目的是方便对大小型集群的管理。 Apache Mesos 的部署产品化后,Mesosphere 使用一种名为 Universe 的按钮式目录来部署“mesos 框架”,十分方便。在 Universe 中,从 GitlabJenkins 到 Mesosphere 最新支持的 Beta 版 Kubernetes,应有尽有。使用 Kubernetes 运行 Mesosphere DC/OS,可以将 Cassandra 和 Spark 等生产化的大数据服务与 Kubernetes 管理的融资工作负载并置,直接集成到 Mesos 内部 DNS 提供商。

入门

如要开始使用,我们需要首先创建一个 Mesosphere DC/OS 集群。这可以使用开放源分配或商业企业版完成;本博文将使用开放源分配方式。首先,我们将转到 DC/OS CloudFormation 安装页面,选择区域以及 Single Master (单主服务器) 或 HA Master (高可用主服务器) 配置;为方便演示,我在这里选择 Single Master (单主服务器) 配置。选定集群配置后,我们将进入 AWS CloudFormation 控制台,在那里可以配置堆栈。



输入堆栈细节后,将会显示 Options (选项) 屏幕。在此页面,您需要为 KubernetesCluster=DemoCluster添加一个标签。 该标签由 Kubernetes Cloud Controller Manager (云管理控制器) 使用,告诉 Kubernetes 在配置资源时如何调用集群,以及它拥有哪些云资源的访问权限。



如果您熟悉 Kubernetes 的内部结构,这就是 ClusterID。 添加该标签后,单击下一步,然后单击下一个屏幕上的创建按钮。顺利完成 CloudFormation 堆栈后,您将拥有一个基础 DC/OS 集群。 现在我们需要修改工作线程实例角色的内联策略,从而允许 DC/OS 上的 Kubernetes 创建 ELB,修改标签和实例属性等等。如要执行此操作,请导航至 IAM 角色并搜索 SlaveRole。 您可以在此修改实例策略。复制并粘贴如下操作并将它们添加到实例角色的策略中。


Json


"ec2:AuthorizeSecurityGroupIngress","ec2:CreateRoute","ec2:CreateSecurityGroup","ec2:DeleteSecurityGroup","ec2:DeleteRoute","ec2:DescribeRouteTables","ec2:DescribeSubnets","ec2:DescribeSecurityGroups","ec2:ModifyInstanceAttribute","ec2:RevokeSecurityGroupIngress","elasticloadbalancing:AttachLoadBalancerToSubnets","elasticloadbalancing:ApplySecurityGroupsToLoadBalancer","elasticloadbalancing:CreateLoadBalancer","elasticloadbalancing:CreateLoadBalancerPolicy","elasticloadbalancing:CreateLoadBalancerListeners","elasticloadbalancing:ConfigureHealthCheck","elasticloadbalancing:DeleteLoadBalancer","elasticloadbalancing:DeleteLoadBalancerListeners","elasticloadbalancing:DescribeLoadBalancers","elasticloadbalancing:DescribeLoadBalancerAttributes","elasticloadbalancing:DetachLoadBalancerFromSubnets","elasticloadbalancing:DeregisterInstancesFromLoadBalancer","elasticloadbalancing:ModifyLoadBalancerAttributes","elasticloadbalancing:RegisterInstancesWithLoadBalancer","elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer"
复制代码


最后的策略应与如下所示相似:



如果具备许可,您可以登录到群集,然后安装 CLI。如要获取主终端节点,请导航至 CloudFormation 堆栈,然后查看 Outputs (输出) 选项卡。查找 DnsAddress,然后将此复制并粘贴到新的选项卡中。这时将提示您设置引导用户。该用户将被视为该集群的管理员,用于添加其他用户。



成功登录后,单击左侧工具条顶部的集群名称:这将是您输入到 CloudFormation 模板中名称。从下拉菜单中选择安装 CLI。您可以在此复制并粘贴类似于如下所示的代码片段:


Bash


[ -d /usr/local/bin ] || sudo mkdir -p /usr/local/bin && curl https://downloads.dcos.io/binaries/cli/darwin/x86-64/dcos-1.10/dcos -o dcos && sudo mv dcos /usr/local/bin && sudo chmod +x /usr/local/bin/dcos && dcos cluster setup http://my-dcos-elb.us-west-1.elb.amazonaws.com && dcos
复制代码


此脚本将会下载最新的 DC/OS 二进制代码,将其移动到 /usr/local/bin,然后使用新的 DC/OS 集群设置 CLI。在它完成前,将会提示您在浏览器中打开一个 URL (如果您在 macOS 上,则将尝试为您打开浏览器)。使用您最初登录所用的用户登录。成功登录后,将会向您提供一个 JSON Web Token (JWT)。将该令牌复制并粘贴到命令提示行以完成 CLI 配置。现在我们已经创建了集群,正确设置了实例策略和 CLI,可以部署 Kubernetes 了。为此我们将使用 DC/OS 服务目录。导航至左侧工具条中的 Catalog (目录),搜索“Kubernetes”,然后选择 beta-kubernetes



在此屏幕上单击 Review & Run (审核并运行)。这时将会显示 Review (审核) 对话框;单击右下角 Edit (编辑) 按钮。这将把对话框转换为表单。然后您可以选择左侧工具条中的 Kubernetes。在此表单中,您需要以小写格式将 aws 输入到 The Provider For Cloud Services (云服务提供商) 输入字段。



完成该字段的编辑后,您可以单击 Review & Run (审核并运行),然后单击 Run Service (运行服务)。这将运行正在部署的 Marathon Kubernetes 服务配置。几分钟后,您应会看到多个 Kubernetes 进程在运行。


部署服务

在 DC/OS 上启动 Kubernetes 后,这时需要部署我们的服务并确保所有设置正确。为了测试这一点,我们需要使用一个由 Cloud Controller Manager (云控制管理器) 管理的资源。 一个简单的使用案例是为 Kubernetes 服务配置 AWS 负载均衡器。在此清单文件中,我创建了一个部署了三个应用程序的基本微服务架构:一个 Web 应用程序和两个后端服务。在此例中,我们使用的微服务模式是每个服务都已自己的语言编写,相互之间的通信采用内部 kube-dns。除应用程序外,我们使用三个服务来暴露它们。如果您仔细看,将会注意到其中一个服务使用了 type: LoadBalancer ,它将告诉 Kubernetes 配置一个云资源并将其与服务绑定。


YAML


apiVersion: v1kind: Servicemetadata:  name: webapp  labels:    app: webappspec:  selector:    app: webapp  ports:  - port: 80    targetPort: http-server    name: http  - port: 443    targetPort: http-server    name: ssl  type: LoadBalancer
复制代码


部署时我们需要安装 kubectl ,为此我们需遵守此处的说明并稍后再进行配置。然后我们需要建立一条 SSH 隧道以将 localhost:9000 绑定到主节点,从而确保我们可以访问 Kubernetes API 服务器。为此您可以运行如下所示的命令。对于 {keyname}{ipaddress} ,请分别使用您用于创建集群的密钥对和主节点的 IP 地址代替。


主节点的 IP 地址可以通过在 EC2 控制台查看主负载均衡器附加的实例找到。


Bash


ssh-add ~/.ssh/{keyname}.pemexport MASTER_IP={ipddress}ssh -4 -o "UserKnownHostsFile=/dev/null" \         -o "StrictHostKeyChecking=no" \         -o "ServerAliveInterval=120" \         -N -L 9000:apiserver-insecure.kubernetes.l4lb.thisdcos.directory:9000 \         core@$MASTER_IP
复制代码


然后我们将运行如下命令,配置本地 kubectl


Bash


kubectl config set-cluster dcos-k8s --server=http://localhost:9000kubectl config set-context dcos-k8s --cluster=dcos-k8s --namespace=defaultkubectl config use-context dcos-k8s
复制代码


现在我们可以使用清单文件部署 kube-dns dns 插件,从而安装使用 kubectl apply -f URL 类似于:


Bash


$ kubectl apply -f https://raw.githubusercontent.com/christopherhein/aws-kubernetes-on-dcos/master/kube-dns.ymlservice "kube-dns" createdserviceaccount "kube-dns" createdconfigmap "kube-dns" createddeployment "kube-dns" created
复制代码


然后我们会再次使用 kubectl apply -f URL 部署应用程序和服务,然后观察服务终端节点,以确保 Cloud Controller Manager (云控制管理器) 配置并将 ELB 与 Kubernetes 服务关联。


Bash


$ kubectl apply -f https://raw.githubusercontent.com/christopherhein/aws-kubernetes-on-dcos/master/manifest.ymlservice "tracks" createddeployment "tracks" createdservice "laptimes" createddeployment "laptimes" createdservice "webapp" createddeployment "webapp" created$ kubectl get svc -o wide -wNAME         CLUSTER-IP       EXTERNAL-IP                       PORT(S)                      AGE       SELECTORkubernetes   10.100.0.1       <none>                            443/TCP                      9h        <none>laptimes     10.100.248.179   <none>                            5000/TCP                     6h        app=laptimestracks       10.100.19.121    <none>                            4567/TCP                     6h        app=trackswebapp       10.100.159.107   xxx.us-west-1.elb.amazonaws.com   80:32027/TCP,443:30090/TCP   6h        app=webapp
复制代码


在您看到 EXTERNAL-IP&lt;pending&gt; 变为 xxx.us-west-1.elb.amazonaws.com 后,服务即准备就绪,您可以打开浏览器并导航到该 URL。


清除

在完成演示并做好清除集群的准备后,我们首先需要删除 Kubernetes 资源,这将会删除它所创建的云资源。(如果这一步骤未完成,CloudFormation 将无法执行删除操作,您需要手动删除所创建的资源。)


Bash


kubectl delete -f https://raw.githubusercontent.com/christopherhein/aws-kubernetes-on-dcos/master/manifest.yml
复制代码


然后我们可以返回 CloudFormation 控制台,删除 DC/OS CloudFormation 堆栈。

结论

现在您已学会了如何部署 DC/OS 集群以及 Kubernetes 集群,学会了如何向世界暴露您的服务,请阅读来自 re:Invent 2017 的 Shipping With Porpoise (与鼠海豚启航),我在该文中介绍了如何在 DC/OS 上使用 JenkinsTwistlockWeaveworks 向 Kubernetes 提交应用程序,从而实现 CI/CD 管道的自动化和生产化。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/bringing-cloud-provider-support-to-kubernetes-on-dcos/


2019-10-29 08:00475

评论

发布
暂无评论
发现更多内容

【堡垒机小知识】堡垒机能记录操作时间、操作数据等等吗?

行云管家

网络安全 堡垒机

集简云开放平台是什么?

集简云开放平台

DLRover:云上自动扩缩容 DeepRec 分布式训练作业案例分享

AI Infra

程序员 AI 互联网 DLRover

企业全面数智化转型,国产替代成为安全保障

用友BIP

技术大会 用友iuap 数智化转型 用友BIP 用友技术大会

Linux:管道命令与文本处理三剑客(grep、sed、awk)

会踢球的程序源

Java Linux

阿里大神整理的Java核心知识点和面试官常问到的知识点,压压惊

会踢球的程序源

Java 面试 求职 java面试 Java构架

前端沙箱利用这些特性实现代码的隔离与限制

没有用户名丶

简单的视频格式转换器:MacX Video Converter Pro中文版

真大的脸盆

Mac Mac 软件 视频格式转换 格式转换器

Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)

共饮一杯无

Java 线程 线程状态 三周年连更

行云管家堡垒机有免费的吗?谁能告诉一下!

行云管家

高新企业 堡垒机 行云管家

GitHub和 Gitee联合编写最新版20w字Java全栈面试手册,简直无敌!

Java你猿哥

Java java面试 SSM框架 Java面经

Solr和Elasticsearch,搜索框架怎么选?

会踢球的程序源

Java

「云原生」Elasticsearch + Kibana on k8s 讲解与实战操作

会踢球的程序源

Java elasticsearch Kibana

Gradio:快速构建你的webApp

AIWeker

Python 三周年连更 Gradio

女朋友要我讲解@Controller注解的原理,真是难为我了

Java你猿哥

Java spring Spring 配置解析

BT!GitHub开源阿里Java性能调优百宝书仅3小时,标星竟超过30k

Java你猿哥

Java JVM 性能调优 SSM框架 Java工程师

硬核!万字神文精解高并发高可用系统实战,分布式系统一致性文档

做梦都在改BUG

Java 高可用 高并发 分布式一致性

浪潮海岳低代码平台inBuilder开源社区版正式发布

科技热闻

站群SEO是什么意思?站群SEO怎么做效果才好?

海拥(haiyong.site)

三周年连更

挑战 30 天学完 Python:Day9 条件语句

MegaQi

Python 挑战30天学完Python 三周年连更

阅读完synchronized和ReentrantLock的源码后,竟发现其完全相似

Java你猿哥

并发编程 并发 synchronized SSM框架 ReentrantLock

最佳云转码,腾讯云MPS夺得MSU编码器大赛21项第一

科技热闻

什么是企业数智化的创新加速器?

用友BIP

技术大会 用友iuap 用友BIP 用友技术大会

GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽

Java你猿哥

架构 分布式 分布式架构

ChatGPT无需API开发连接第三方系统,让舆情自动监控

集简云开放平台

数据集成 数据集成平台 Chat

Python本地SQL文件对比工具

YUKI0506

Python 文件对比 对比工具 difflib

chrome调试技巧(一)

知心宝贝

前端 后端 调试 三周年连更

热榜!Alibaba最新发布「10亿级并发系统设计文档」Git狂揽9000星

Java你猿哥

数据库 架构 分布式 架构设计 并发系统

知你懂你,聪明得简直不像一台车,问界M5智驾版重磅升级鸿蒙3

Geek_2d6073

Zabbix5.0配置企业微信告警

A-刘晨阳

Linux zabbix 三周年连更

听说谛听闹退休?感知网络接班啦!

脑极体

感知网络

OpenSource 为Kubernetes提供云服务支持_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章