这是一个简短的系列,介绍 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 故事或初学者提示? 在下面添加您的评论。