是否可以从AWS EC2实例设置本地Kubernetes开发环境(Minikube等)?

时间:2018-08-18 22:02:05

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

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

我知道AWS有一些Kubernetes服务,但是如果我的理解是正确的,那主要是为了部署已经配置良好的堆栈,它并不非常适合堆栈配置本身的开发。

稍作搜索后,我发现了Minikube,它可以通过在单台机器上运行kubernetes部署来帮助我们试验配置。 我想从EC2实例(理想情况下运行Amazon Linux 2 OS)设置kubernetes + Minikube(或同等版本)开发环境。

我很难弄清

  • 实际上是否可以在EC2上设置Minikube?
  • (如果是),我该怎么办?我尝试遵循this answer,但在注册Virtualbox存储库和下载Virtualbox命令行工具时陷入困境

4 个答案:

答案 0 :(得分:3)

在这里怎么做

使用8gb的ram和一个公共ip启动ec2实例,确保您可以通过常规方式切换到此框。确保其为unbuntu实例(我正在使用16.04)。

一旦进入实例,请运行以下命令以更新并安装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)

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

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

使用以下方法检查其运行情况:

/usr/local/bin/minikube status

正确的做法是,您可以在没有额外节点的情况下运行基本群集:)

如果您想要一个好的仪表板,请执行以下操作(我在Windows 10上使用wsl在这里使用Windows,可以根据需要在Mac或Linux上执行此操作,但步骤略有不同,但只要您可以执行基本步骤,例如设置变量,您会很酷)

要在本地框上查看gui,您将需要运行仪表板并执行其他有用的操作,在本地运行kubectl

Please follow this to install kubectl locally

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

choco install kubernetes-cli

现在使用/ etc / kubernetes中的scp从ec2实例下载admin.conf文件。

现在设置一个名为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

现在在您的本地盒上运行此程序,以从本地计算机通过隧道连接到仪表板

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 

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

enter image description here

对不起,这篇文章太长了,但是涉及到很多。还请注意,如果您需要生产实例,则实际上这只是一个开发机器,您需要以更高的安全性执行此操作,并且可能不以root身份运行东西:)

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

kubectl proxy

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

如果您卷曲或浏览到http://localhost:8001/api,您应该会看到它或类似的东西:)

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

答案 1 :(得分:0)

我不确定EC2是否允许嵌套虚拟化。如果没有,则始终可以使用minikube --vm-driver = none。这是我在运行虚拟箱存在限制的前提下执行的操作。但是我不得不承认,关于在没有vm的情况下使用minikube并没有很多好的文档。我没有亲自尝试过,请查看canonical的lxd。
https://kubernetes.io/docs/getting-started-guides/ubuntu/local/

答案 2 :(得分:0)

转到此处:https://github.com/scholzj/aws-minikube

我正在t2.small上运行它,但是很难,您必须从基础架构部署中删除资源请求。使用预留实例,每个月大约要花14美元。选择GCP可能更有意义,因为他们会亲切地为大师付费。

答案 3 :(得分:0)

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