AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:00680

评论

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

第二周作业

大熊猫

产品经理训练营 Week2 作业

Mai

张红珊—第二章作业

zzz

Alibaba内部晋升手册面试题集 ,Java岗位

Java架构之路

Java 程序员 架构 面试 编程语言

太牛了!这是什么神仙级的面试pdf(含答案),跳槽大厂不是问题

Java架构之路

Java 程序员 架构 面试 编程语言

Hadoop之HDFS 内部机制知多少?

hanke

大数据 hadoop hdfs 开源 数据存储

喜报丨京东科技主导的开源项目ShardingSphere荣登报告榜单国人主导开源项目中活跃度第五名!

京东科技开发者

分布式数据库 京东 ShardingSphere

产品训练营第二周作业-利益相关者

jpcr987i

小程序抽奖助手产品利益相关者分析

夏天的风

产品经理训练营

极客大学·产品经理训练营·第二章作业

二大爷

产品经历

第二周作业

纳豆卡玛

第二周作业

在质量管理中掘金

L3C老司机

香喷喷!2021最新出炉Java程序员面试全方位贴身指南

比伯

Java 编程 程序员 架构 面试

Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

潘大壮

Java 后端 mybatis mybatis源码

Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

潘大壮

Java 后端 mybatis mybatis源码

2021 年产品训练营 - 第二周作业

Meng

训练营-第二周作业

💥萝贝桃儿

产品经理训练营第二周作业 - 利益相关方

Denny-xi

产品经理 产品经理训练营

第三周作业 利益相关方排序

Eva

第二次作业&第三次作业

yoki

还不知道简历如何写?就该这样写!

yes

面试 简历

产品经理训练营 第二周作业记录

周玲

产品思维 产品经理训练营

惊艳全网!阿里人开源了K8s进阶宝典笔记,从理论到实践!

996小迁

Java 编程 架构 面试 k8s

作业

Eva

MapReduce练习案例3 - 自定义分区

小马哥

大数据 hadoop mapreduce 七日更

产品经理训练营-第二周作业

懒杨杨

新世界的智能,旧梦中的暖气

脑极体

混合云管平台openkube日志系统介绍

席卷图文学习前端Flex布局

我是哪吒

html 面试 大前端 html/css Flex

奥里给,通过这几份PDF,终于拿到了阿里,腾讯等一线大厂的offer

Java架构之路

Java 程序员 架构 面试 编程语言

MapReduce博文体系

小马哥

大数据 mapreduce 知识体系 架构师 七日更

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