产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

评论

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

做事情的三条边

石云升

28天写作 基线 极限

沉寂唯品会3年,毅然辞职冲刺阿里,我是怎么备战金三银四的?

比伯

Java 编程 架构 面试 程序人生

架构师训练营 - 第三周作业

Mark

听过闰年闰月,听过闰秒吗?

艾小仙

后端

如何轻松面过阿里社招Java岗,九大核心模块为你保驾护航!(知识点+面经)

Java架构追梦

Java 架构 面试

【CSS】文字特效(text-shadow)

德育处主任

CSS css3 html/css CSS小技巧 28天写作

Redis 学习笔记 04:跳跃表

架构精进之路

redis 七日更 28天写作

突破瓶颈,“iOS开发”,跳槽面试必备题(针对年后面试者)

Geek_24a3d9

面试 简历 ios开发

区块链赋能物流行业:“圈子文化”下,网络货运的数字化转型之路

CECBC

区块链 区块链物流

有些软件,听着听着就没了...

艾小仙

互联网

Spring Boot 中的全局异常处理

武哥聊编程

Java springboot SpringBoot 2 异常处理 28天写作

不愧是Github上疯传的腾讯Java全栈进阶笔记!总结的太全啥都有!

Java架构之路

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

深入理解nodejs中的异步编程

程序那些事

多线程 nodejs 异步编程 程序那些事 回调

是什么可以在Github上标星85.4K,揭秘阿里Springboot项目笔记!

996小迁

Java 架构 面试 springboot

线上问题排查学习总结

原来不悔

Java Linux

使用 JSX 建立 Markup 组件风格

三钻

大前端 组件化

python自学 第三章 python语言基础之保留字、标识符与内置函数

WEB前端修行日志

Python 编码格式

电商网站商品管理(三)group by+avg+sort等聚合分析

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

架构师训练营第八周课后作业

万有引力

2021年-iOS面试进阶资料总结(备战年后)

iOSer

学习 面试 iOS Developer iOS 架构RxSwift

week8-conclusion

J

2021年“区块链+”将会如何发展?

CECBC

区块链

为什么越南不会成为世界工厂?

JiangX

供应链 工业 28天写作 制造

网络攻防: 爬虫的钳形攻势

杨东冬

大数据 安全攻防 网络安全 爬虫 安全

爱了爱了!阿里爆款Spring进阶宝典,涵盖其所有技术栈(源码+实战彻底玩转Spring框架)

Java架构之路

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

python自学 第二章 python语言基础之语法特点(注释、代码缩进、编码规范)

WEB前端修行日志

Python 编码格式

餐饮品牌资产上链,产业区块链史诗级浪潮已到来

CECBC

餐饮

案例研究之聊聊 QLExpress 源码 (八-1)

小诚信驿站

聊聊架构 28天写作 QLExpress源码 聊聊源码

Java虚拟机内存模型

xcbeyond

Java JVM Java虚拟机 28天写作

阿里首推的“SpringBoot+Vue全栈项目”有多牛X?

Java架构之路

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

编程语言学习心得 (完全版) -- 不要害怕遗忘和混淆

蔡超

程序员 个人成长 编程语言 Go 语言

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