点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

如何在 Azure 上部署 Kubernetes 集群

  • 2020-03-09
  • 本文字数:2612 字

    阅读完需:约 9 分钟

如何在 Azure 上部署 Kubernetes 集群

本文是一篇技术教程,由 Mike Chaliy 撰写。他是一位 .NET 平台用户,尝试在 Azure 上部署 Kubernetes 集群,并将步骤写成了这篇帖子。文章描写了部署集群过程,还对 Kubernetes 的一些功能进行了简要描述。


以下是文章主要内容:


在实验、演示的时候,或者是生产过程中,我经常会需要运行一些 Docker 负载。虽然这在本地计算机上十分容易,但是当你要在云端运行的时候就有点困难了。相比于本地运行,在云端运行真的太复杂了。我尝试了几个方法,比如在 AWS Beanstalk、AWS ECS 或者 Azure ACS DC/OS 上运行 Docker,但是针对于我的需求来说,这些尝试太复杂了,而且限制诸多。


Azure 宣布 Azure Container Service 预支持 Kubernetes,与此同时,Kubernetes 也宣布支持 ACS,所以是时候尝试一下 Kubernetes 了。


你可以跳过所有步骤,只阅读演示部署和说明,点击链接。

介绍

那么,什么是 Kubernetes 呢?用一句简单的话来概括:它是一个容器编排工具。第一步,将应用程序进行打包,然后 Kubernetes 可以对打包好的这些应用程序进行部署、运行以及扩展。为了深入了解,可能还需要通过 Tutorial 了解,但是这个十分容易,你完全可以跳过这个步骤直接尝试如何运行它。

所需的基础设施

在本文中,我会使用新的 Azure CLI。安装十分简单,大多数情况下,只需要“pip install azure-cli”就可以了。


所以现在让我们来预览一下我们的集群。首先,你可能需要资源组来隔离你的基础设施。


az group create -n my-very-own-k8s-cluster -l "West Europe"
复制代码


接下来是规制集群。


az acs create -n my-very-own-k8s-cluster \   -g my-very-own-k8s-cluster \   --dns-prefix my-very-own-k8s-cluster \   --orchestrator-type kubernetes
复制代码


在等待命令完成的时候,我们来看一些评论。


1、如果你的命令出现了一些问题,比如这些命令出现一些无意义的错误,添加-debug 参数有点啰嗦,但是会出现一些错误。


2、-dnsprefix 是可选的,个人建议还是要添加上去,不然的话,就会按照“集群名字+组名字”使用,如果超过 90 个字符的长度,之后在操作过程中就会出现奇怪的错误。


默认设置下,ACS 用单个 master 和 3 个 agents 来设置集群。这些步骤默认设置下都是使用 D2 的,所以这个集群耗费比较高,当你不需要的时候记得清理资源。


以及,欢迎阅读 Kubernetes 的 ACS 引擎之下的内容。上述内容给了实施过程中的一些很棒的观点。注意了,ACS 文档没有使用新的 Azure 工具,所以操作起来会有点复杂。

第一个有效负载

所有的基础设施准备完成,现在开始部署 Kubernetes。要管理集群,那么就需要 kubectl。你可以通过以下代码自动运行(可能需要自行添加到 PATH):


az acs kubernetes install-cli
复制代码


接下来,你需要用集群来认证 kubectl。


az acs kubernetes get-credentials -n my-very-own-k8s-cluster \     -g my-very-k8s-cluster
复制代码


检查所有一切是否 OK。这个命令行会提供客户端和服务器端的版本。


kubectl version
复制代码


从这里开始,你已经拥有你所需要的东西来运行你的第一个有效负载。所以让我们来创建第一个定义文件,并且尝试运行。Kubernetes 内的定义文件可以使用很多文件格式,我用的是 YAML, 所以我们用以下内容来创建 hello.yml 文件:


apiVersion: extension/v1beta1kind: Deploymentmetadata:    name: hello # Name of the deployment, just for reference purposesspec:     replica: 1 # Number of instances for the given application    template:    metadata:        labels:            app: hello    spec:        containers:        - name: ner-uk-ms # Name of container, could be anything you like        image: chaliy/ner-ms:uk # Docker image to run        ports:        -containerPort:8080
复制代码


目前,理解一些 Kubernetes 术语十分重要。


Pod——容器实例


Deployment——确保 pods 能够运行,扮演监督的角色


Service——将 pod 组成一个系统


所以,对于定义在模版中的单个 pod 来说,我们刚刚创建的定义文件是个 deployment。以下命令行会拉取 Docker 镜像chaliy/ner-ms:uk,开启它的实例并且设置监督员:


kubectl create -f ./hello.yml
复制代码


现在可以使用的命令行很少:


# Retrieve logs associated with deploymentkubectl logs hello
# List Podskubectl get pods
# List deploymentskubectl get deployments
# Details about concrete pod, for example in case of errorskubectl describe pods/podid
复制代码


如果你想要重新配置应用程序,可以在定义文件中修改,比如设置replicas:10,然后运行:


kubectl apply -f ./hello.yml
复制代码


技术上来说,这已经在运行有效负载了。我们来看看它的运行状况。Kubernetes 的 UI 界面向用户呈现集群运行状况。它的运行方式跟应用程序的运行方式是一样的。当然,如果你不希望这样的 UI 出现在集群外面,那么默认设置下你可以只在集群内运行。但是,如果访问又会如何?


方法很简单,Kubernetes 实现 Basteon 模式,并且通过简单的方法代理到你的本地电脑。所以首先你需要运行代理:


kubectl proxy --port=8000
复制代码


然后,你需要立刻看到 Kubernetes Dashboard 的话,可以浏览。


还有就是,你可能需要发布对集群外的服务。对于这个,你需要创建 service(对于 Kubernetes),然后使用 expose 命令,用新的 Loadbalancer。


kubectl expose deployment hello --type="LoadBalancer"--port=80 --target-port=8080
复制代码


这个命令行会开始设置新的 load balance,需要一点时间。要检查它是否运行,要查询关于 service 的信息:


kubectl get services/hello
复制代码


之后你就会看到外部 IP 地址,意味着服务已处于 OK 状态,你可以用来发送请求。类似于:


curlhttp://EXTERNAL-IP/
复制代码


关于创建简单的集群就是这么多了。当然,这只是开始:)


所有的脚本都可以在这个网址找到。在这里你可以找到使用 Nginx 代理作为路由器的一些真实例子。

结论

对于我来说,用户体验很棒,但是我也不确定我会不会继续使用,因为有几个问题还在困扰着我:


1、Kubernetes ACS 版本还在预发布阶段,有些功能还没有实现(比如,你还不能对你的集群进行缩容扩容)。


2、使用成本较高,至少需要 4D2 个节点,每月最高可能要花费 1000 美元。使用相对小一点的实例也是可以的,但是,我的负载类型还不知道如何利用它。


3、目前还没有可以创建系统的设备。类似于 docker-compose 能够提供相关服务。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/5L3QEyaL91GoqTfxSgvl3w


2020-03-09 17:51307

评论

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

第一周.UML课后作业

西柚

UML

架构师训练营作业--Week1

吴炳华

极客时间第0期架构师训练营第一周总结

2流程序员

剖析Golang Context:从使用场景到源码分析

伴鱼技术团队

源码分析 并发编程 程序语言 Context Go 语言

8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

古时的风筝

函数式接口 Lambda stream Java 25 周年

第1周 - 学习总结

大海

架构设计作业1——食堂就餐卡系统设计

Andy风

四个和成长有关的小故事

霍太稳@极客邦科技

团队管理 TGO鲲鹏会 团队组织 职业成长

架构课程心得

dj_cd

极客大学架构师训练营

架构师训练营第一周 - 学习总结

Eric

极客大学架构师训练营

UML 建模

师哥

初步架构想法

极客大学架构师训练营

Hello World!

东哥

极客大学架构师训练营

食堂就餐卡系统设计

LEAF

架构师训练营第一课

Coder的技术之路

讲一个程序员如何副业月赚三万的真实故事

非著名程序员

程序员 独立开发者 副业赚钱 提升认知

比Webpack更高效的Rollup入门指南

费马

大前端 Rollup 打包 webpack

架构师训练营第一周总结

Hugo

架构师训练营作业

Hanson

解决出海网络难题 融云保障 MiniJoy 千万印度用户流畅互动

Geek_116789

食堂就餐系统设计

Hugo

架构师作业一:食堂就餐卡系统设计

李锦

架构师训练营第一周总结

Hanson

再下一城 三六零收购织语CCwork深化“智慧办公”生态布局

TE产服

游戏夜读 | 毛利率有多少?

game1night

【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?

NotFound9

MySQL 数据库 后端

论一个前端工程师的自我修养

萧文翰

ios android 开发者 大前端 Web

神奇的梦想

霍太稳@极客邦科技

身心健康 个人成长 目标管理

[Go] 写一个守护协程的通用套路是什么?

eddix

pattern Go 语言

食堂就餐卡系统设计

Coder的技术之路

食堂就餐卡系统架构设计

dj_cd

极客大学架构师训练营

如何在 Azure 上部署 Kubernetes 集群_新基建_才云科技_InfoQ精选文章