集群计算 Fedora 与 Minikube

这是一个简短的系列,介绍 Kubernetes、它的作用以及如何在其上进行试验 Fedora. 这是一个面向初学者的系列,帮助介绍一些更高层次的概念并给出使用它的示例 Fedora. 在第一篇文章中,我们介绍了 Kubernetes 中的关键概念。 第二篇文章向您展示了如何在您自己的计算机上构建单节点 Kubernetes 部署。

一旦您对 Kubernetes 中的关键概念和术语有了更深入的了解,上手就会变得更加容易。 与许多编程教程一样,本教程向您展示了如何构建“Hello World”应用程序并使用 Kubernetes 在您的计算机上本地部署它。 这是一个简单的教程,因为没有多个节点可供使用。 相反,我们使用的唯一设备是单个节点(也就是您的计算机)。 最后,您将看到如何将 Node.js 应用程序部署到 Kubernetes pod 中并通过部署在 Fedora.

本教程不是从头开始制作的。 你可以找到 原创教程 在 Kubernetes 官方文档中。 本文添加了一些更改,让您可以自己做同样的事情 Fedora 电脑。

介绍 Minikube

Minikube 是 Kubernetes 团队开发的官方工具,旨在帮助简化测试。 它允许您通过自己硬件上的虚拟机运行单节点 Kubernetes 集群。 除了第一次使用它来玩弄或实验之外,如果您每天都在使用 Kubernetes,它还可以用作测试工具。 它确实支持生产 Kubernetes 环境中所需的许多功能,例如 DNS、NodePorts 和容器运行时。

安装

本教程需要虚拟机和容器软件。 您可以使用许多选项。 Minikube 支持

虚拟盒子

,

vmwarefusion

,

虚拟机

, 和

xhyve

虚拟化的驱动程序。 但是,本指南将使用 KVM,因为它已经打包并在 Fedora. 我们还将使用 Node.js 构建应用程序,使用 Docker 将其放入容器中。

前置要求

您可以使用此命令安装先决条件。

$ sudo dnf install kubernetes libvirt-daemon-kvm kvm nodejs docker

安装这些软件包后,您需要将您的用户添加到正确的组中以允许您使用 KVM。 以下命令会将您的用户添加到组中,然后更新您的当前会话以使组更改生效。

$ sudo usermod -a -G libvirt $(whoami)
$ newgrp libvirt

Docker KVM 驱动程序

如果使用 KVM,您还需要安装 KVM 驱动程序才能使用 Docker。 您需要添加 码头机器Docker 机器 KVM 驱动程序 到您的本地路径。 您可以在 GitHub 上查看他们的页面以获取最新版本,也可以针对特定版本运行以下命令。 这些是在一个 Fedora 25 安装。

码头机器

$ curl -L https://github.com/docker/machine/releases/download/v0.12.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine
$ chmod +x /tmp/docker-machine
$ sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

Docker 机器 KVM 驱动程序

这将安装 CentOS 7 驱动程序,但它也适用于 Fedora.

$ curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 >/tmp/docker-machine-driver-kvm
$ chmod +x /tmp/docker-machine-driver-kvm
$ sudo cp /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm

安装 Minikube

安装的最后一步是获取 Minikube 本身。 目前,没有包在 Fedora 可用,官方文档建议获取二进制文件并将其移动到本地路径。 要下载二进制文件,使其可执行,并将其移动到您的路径,请运行以下命令。

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

现在您已准备好构建集群。

创建 Minikube 集群

现在您已经安装了所有东西并在正确的位置,您可以创建您的 Minikube 集群并开始使用。 要启动 Minikube,请运行此命令。

$ minikube start --vm-driver=kvm

接下来,您需要设置上下文。 上下文是如何

kubectl

(Kubernetes 的命令行界面)知道它在处理什么。 要设置 Minikube 的上下文,请运行此命令。

$ kubectl config use-context minikube

作为检查,请确保

kubectl

可以通过运行此命令与您的集群通信。

$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

构建您的应用程序

现在 Kubernetes 已经准备就绪,我们需要在其中部署一个应用程序。 本文使用与 Kubernetes 文档中官方教程相同的 Node.js 应用程序。 创建一个名为

hellonode

并创建一个名为

服务器.js

使用您最喜欢的文本编辑器。

var http = require('http');

var handleRequest = function(request, response) {
 console.log('Received request for URL: ' + request.url);
 response.writeHead(200);
 response.end('Hello world!');
};
var www = http.createServer(handleRequest);
www.listen(8080);

现在尝试运行您的应用程序并运行它。

$ node server.js

在它运行时,您应该能够访问它 本地主机:8080. 一旦你确认它工作正常,点击

Ctrl+C

杀死进程。

创建 Docker 容器

现在您有一个要部署的应用程序! 下一步是将其打包到 Docker 容器中(稍后您将传递给 Kubernetes)。 您需要创建一个

Dockerfile

在与您的文件夹相同的文件夹中

服务器.js

文件。 本指南使用现有的 Node.js Docker 映像。 它在端口 8080 上公开您的应用程序,复制

服务器.js

到图像,并将其作为服务器运行。 您的

Dockerfile

应该是这样的。

FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js

如果您熟悉 Docker,您可能习惯于将镜像推送到注册表。 在这种情况下,由于我们将其部署到 Minikube,您可以使用与 Minikube 虚拟机相同的 Docker 主机来构建它。 为此,您需要使用 Minikube Docker 守护程序。

$ eval $(minikube docker-env)

现在您可以使用 Minikube Docker 守护程序构建您的 Docker 映像。

$ docker build -t hello-node:v1 .

嘘! 现在你有了一个 Minikube 可以运行的镜像。

创建 Minikube 部署

如果您还记得本系列的第一部分,部署会监视您的应用程序的运行状况,并在它死亡时重新安排它。 部署是创建和扩展 pod 的受支持方式。

kubectl 运行

创建一个部署来管理一个 pod。 我们将创建一个使用

你好节点

我们刚刚构建的 Docker 镜像。

$ kubectl run hello-node --image=hello-node:v1 --port=8080

接下来,检查部署是否创建成功。

$ kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-node   1         1         1            1           30s

创建部署还会创建运行应用程序的 pod。 您可以使用此命令查看 pod。

$ kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
hello-node-1644695913-k2314   1/1       Running   0          3

最后,我们来看看配置是什么样子的。 如果您熟悉 Ansible,Kubernetes 的配置文件也使用易于阅读的 YAML。 您可以使用此命令查看完整配置。

$ kubectl config view

kubectl

做很多事情。 要了解更多关于你可以用它做什么,你可以阅读 文件.

创建服务

目前,该 pod 只能在 Kubernetes pod 内部通过其内部 IP 地址访问。 要在 Web 浏览器中查看它,您需要将其作为服务公开。 要将其公开为服务,请运行此命令。

$ kubectl expose deployment hello-node --type=LoadBalancer

类型被指定为

负载均衡器

因为 Kubernetes 会将 IP 暴露在集群之外。 如果您在云环境中运行负载均衡器,那么您将如何配置外部 IP 地址。 但是,在这种情况下,它将您的应用程序公开为 Minikube 中的服务。 现在,终于,您可以看到您的应用程序了。 运行此命令将在您的应用程序中打开一个新的浏览器窗口。

$ minikube service hello-node

恭喜,您通过 Kubernetes 部署了您的第一个容器化应用程序! 但是现在,如果您需要我们的小型 Hello World 应用程序怎么办?

我们如何推动变革?

是时候做好更新和推送的准备了。 编辑您的

服务器.js

文件并更改“Hello world!” 到“你好,世界!”

response.end('Hello again, world!');

我们将构建另一个 Docker 映像。 注意版本凹凸。

$ docker build -t hello-node:v2 .

接下来,您需要为 Kubernetes 提供要部署的新镜像。

$ kubectl set image deployment/hello-node hello-node=hello-node:v2

现在,您的更新已推送! 像以前一样,运行此命令使其在新的浏览器窗口中打开。

$ minikube service hello-node

如果您的应用程序没有出现任何不同,请仔细检查您是否更新了正确的图像。 您可以通过运行以下命令将 shell 放入您的 pod 来进行故障排除。 您可以从之前运行的命令中获取 pod 名称 (

kubectl 获取 pod

)。 进入 shell 后,检查是否

服务器.js

文件显示您的更改。

$ kubectl exec -it <pod-name> bash

打扫干净

现在我们完成了,我们可以清理环境了。 要清理集群中的资源,请运行这两个命令。

$ kubectl delete service hello-node
$ kubectl delete deployment hello-node

如果你玩完了 Minikube,你也可以停止它。

$ minikube stop

如果您使用 Minikube 有一段时间了,您可以取消设置我们在本指南前面设置的 Minikube Docker 守护程序。

$ eval $(minikube docker-env -u)

了解有关 Kubernetes 的更多信息

你可以找到 原创教程 在 Kubernetes 文档中。 如果你想了解更多,网上有很多很棒的信息。 这 文件 Kubernetes 提供的内容是彻底而全面的。

问题、Minikube 故事或初学者提示? 在下面添加您的评论。