【问题标题】:Is it possible to setup a local Kubernetes development environment (Minikube, etc.) from an AWS EC2 instance?是否可以从 AWS EC2 实例设置本地 Kubernetes 开发环境(Minikube 等)?
【发布时间】:2019-01-25 12:41:31
【问题描述】:

背景:我正在尝试在“开发/本地主机”环境中对 docker 和 kubernetes 进行一些学习和实验,以后我可以在某些云上“真正地”复制它们。但是我的笔记本电脑上的所有东西(磁盘容量、内存等)都用完了。所以我想通了“为什么不从云端开发?”

我知道AWS有一些Kubernetes服务,但如果我的理解正确的话,这主要是部署已经配置好的堆栈,不太适合堆栈配置本身的开发。

经过一番搜索,我发现了 Minikube,它可以帮助我们通过在单台机器上运行 kubernetes 部署来试验我们的配置。 我想从 EC2 实例(理想情况下运行 Amazon Linux 2 操作系统)设置 kubernetes + Minikube(或等效)开发环境。

我很难搞清楚

  • 真的可以在 EC2 上设置 Minikube 吗?
  • (如果是),我该怎么做?我尝试关注this answer,但在注册 Virtualbox Repo 和下载 Virtualbox 命令行工具时遇到了困难

【问题讨论】:

  • 我希望 EKS 能够像任何其他 Kubernetes 设置一样工作,用于开发部署系统和试验 Helm 之类的东西。但是,让集群运行大约需要 3 倍 c5.large 按需实例,如果这对您很重要,它永远不会是“本地的”,而且最初设置的依赖关系稍微复杂一些。跨度>
  • eks 对于在上面学习东西来说太贵了
  • 除非您特别想使用 Minikube 进行学习,否则还可以考虑为您的实验运行 Google Kubernetes Engine (GKE) 集群。与 AWS EKS 不同,Google 不对主节点收取额外费用,您可以随时终止集群。此外,谷歌支持使用抢占式工作节点(成本最多可降低 80%),这可能适用于您的开发/测试用例:cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms

标签: amazon-web-services amazon-ec2 kubernetes minikube amazon-linux


【解决方案1】:

这是怎么做的

用 8gb 的内存和公共 ip 启动一个 ec2 实例,确保您可以正常方式 ssh 到这个盒子。确保它是一个 unbuntu 实例(我使用的是 16.04)。

一旦 ssh 进入实例,运行以下命令来更新和安装 docker

sudo -i
apt-get update -y && apt-get install docker.io

安装 minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

安装 kube cli

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

现在验证版本只是为了确保您可以看到它

/usr/local/bin/minikube version

使用

向当前shell添加自动完成功能
source <(kubectl completion bash)

以此启动集群(注意 no vm driver 行)

/usr/local/bin/minikube start --vm-driver=none

用这个检查它的启动和运行:

/usr/local/bin/minikube status

应该让您运行一个没有额外节点的基本集群:)

如果您想要一个漂亮的仪表板,请执行以下操作(我在这里使用 windows 并在 windows 10 上使用 wsl,如果您愿意,您可以在 mac 或 linux 上执行此操作,但步骤略有不同,但只要您能遵循设置变量之类的基本步骤,你会很酷)

为了在本地机器上查看 gui,您需要运行仪表板并在本地运行 kubectl 来做其他有用的事情

Please follow this to install kubectl locally

在 Windows 上,你可以像这样使用巧克力:

choco install kubernetes-cli

现在使用 scp 从 ec2 实例下载您的 admin.conf 文件,该文件位于 /etc/kubernetes。

现在设置一个名为 KUBECONFIG 的局部变量并指向您刚刚下载的文件。

转到 ec2 实例并使用它来安装仪表板。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard-arm.yaml

此仪表板是开发仪表板,请勿在生产中使用它:)

运行以下命令以找出仪表板正在运行的 IP 地址

/usr/local/bin/kubectl get svc --namespace kube-system

输出应该有点像这样:

root@ip-172-31-39-236:~# /usr/local/bin/kubectl get svc --namespace kube-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   49m
kubernetes-dashboard   NodePort    10.109.248.81   <none>        80:30000/TCP    49m

现在在你的 localbox 上运行它,从本地机器隧道到仪表板

ssh -i ~/.ssh/keyfile.pem -L 8080:10.109.248.81:80 ubuntu@ec2-i-changed-this-for-this-post.eu-west-1.compute.amazonaws.com

现在打开网络浏览器:

http://localhost:8080 

您现在应该可以看到仪表板了。看起来像这样:

抱歉,这篇文章太长了,但内容很复杂。另请注意,这实际上只是一台开发机器,如果您需要一个产品实例,您需要以更好的安全性执行此操作,并且可能不以 root 身份运行东西:)

另一件事,您可能会注意到本指南中没有使用本地 kubectl,如果您使用(本地),您可以使用它来访问远程 api

kubectl proxy

在 kubernetes 主页here 上有这方面的指南 另请注意,admin.conf 可能将 localhost 作为服务器地址,它必须是 ec2 实例的地址,并且您需要确保可以从 ec2 实例的安全组中的 ip 访问该端口。

如果您使用 curl 或浏览器访问 http://localhost:8001/api,您应该会看到此内容或类似内容 :)

{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "192.168.4.60:6443"
    }
  ]
}

【讨论】:

  • 谢谢,明天我会在 ubuntu 实例上试一下,看起来很详细,非常感谢 :-)
  • 要写这篇文章,我实际上只是用 T2 Medium 完成了所有这些:)
  • 我在树莓派 3 上运行了 minikube,但 1GB 内存非常有限。我会推荐 2GB RAM 来玩它。 t2.small 或 t3.small 就足够了。
  • 如果不是,您可以随时升级
【解决方案2】:

我不确定 EC2 是否允许嵌套虚拟化。如果没有,您可以随时使用 minikube --vm-driver=none。这就是我在运行 virtualbox 有限制的前提下的做法。但我不得不承认,没有很多关于在没有 vm 的情况下使用 minikube 的好的文档。这个我个人没试过,看看canonical的lxd。
https://kubernetes.io/docs/getting-started-guides/ubuntu/local/

【讨论】:

  • 请参阅上面的指南:)
【解决方案3】:

去这里:https://github.com/scholzj/aws-minikube

我在 t2.small 上运行它,但这很困难,您必须从基础架构部署中删除资源请求。使用保留实例,我每月大约需要 14 美元。使用 GCP 可能更有意义,因为他们慷慨地为 master 付费。

【讨论】:

    【解决方案4】:

    考虑为开发/测试目的提供轻量级 Kubernetes 集群的工具,例如:

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 2021-04-26
      • 2014-10-28
      • 1970-01-01
      • 2014-05-03
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多