65.9K
CodeProject 正在变化。 阅读更多。
Home

Kubernetes 入门指南(使用 Minikube)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2017 年 5 月 3 日

CPOL

9分钟阅读

viewsIcon

20954

在本地环境中使用 MiniKube 对 Kubernetes 进行简要介绍

引言

在我Project Calico 博客的新系列中,我首先分享了一些企业目前在其现有基础设施和架构上面临的挑战。这包括需要能够快速适应和创新,同时又要平衡规模、安全性和网络弹性。

应对这些挑战的答案,正如 Netflix 最初大力推广的那样,是转向云原生架构。换句话说,能够根据需要设置、销毁和替换实例,且几乎没有后果(想象一下如果有人今天关闭了你的服务器,你是否还能说同样的话?)。

根据云原生计算基金会的说法,云原生系统包含三个要素:

  • 应用程序和进程被容器化
  • 这些容器被动态编排
  • 架构是面向微服务的

这基本上意味着您的应用程序存储为可以快速轻松部署和管理的镜像。但是,由于您可能拥有成千上万个实例或部署,手动管理它们变得非常困难——更不用说每次服务失败时您可能不希望自己去重置它了。因此,您需要利用像 Kubernetes、Swarm、Apache Mesos 或 Rancher Cattle 这样的编排器。

Kubernetes(也称为 k8s)最初由 Google 创建并开源,然后捐赠给了云原生计算基金会。自发布以来,Kubernetes 已迅速成为最受欢迎和使用最广泛的编排器之一,以其容错性、可伸缩性、发现能力以及其活跃的社区而闻名。

不幸的是,它并不一定以简单著称,随着您深入研究 Kubernetes,您会发现虽然它拥有强大的 API,但还是有一点学习曲线。但这并不意味着 Kubernetes 本身不容易上手,并且可以开始进行试用/探索。

这正是我们将在本简短教程中要做的。只需几个步骤,我们将本地设置 Kubernetes(使用 MiniKube),启动 Kubernetes Dashboard,启动一个新的 Ghost 博客平台部署,使服务公开可用,最后进入 pod 内的第一个容器进行一些快速更新。

第一步:安装虚拟机

要安装 Minikube,您首先需要确保您的系统上运行着合适的虚拟机

对于运行 OS X 的Mac 用户,您可以使用xhyve 驱动程序VirtualBoxVMware Fusion。如果您不确定,最好从 VirtualBox 开始。

对于Linux 用户,您需要VirtualBoxKVM安装。

最后,对于Windows 用户,可以使用VirtualBoxHyper-V

第二步:安装 kubectl

下一步是安装 kubectl

对于Mac 用户,请在您的终端中运行以下命令

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s 
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl

对于Linux 用户,请运行

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s 
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

对于Windows 用户,请运行

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s 
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe

然后(所有用户),运行以下命令使 kubectl 可执行(请注意,您可能需要更改其本地存储路径)

chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

第三步:安装 Minikube

最后,我们现在可以安装 Minikube了。在本教程中,我们将使用 Minikube v0.18.0,但是,请务必访问 GitHub 上的Minikube 仓库,以确保这是最新版本。

对于Mac 用户,同样在您的终端中运行

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

对于Linux 用户,请运行

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

如果您使用 Windows,您需要安装minikube-windows-amd64.exe并将其重命名为minikube.exe

如果遇到问题,请访问Minikube 安装指南

第四步:一些快速的基本测试

您现在应该已经安装了 Minikube。要测试一切是否正常,请运行以下命令来启动 Minikube

minikube start

如果安装成功,您应该会看到类似以下内容的输出

Starting local Kubernetes cluster...

Starting VM...

此过程可能需要几分钟,因为它会继续将文件 SSH 到 VM,设置证书,并为您启动各种组件。

当您看到以下内容时,就表示设置已完成

Connecting to cluster...

Setting up kubeconfig...

Kubectl is now configured to use the cluster.

现在我们可以通过运行以下命令来测试 kubectl 和 Minikube

kubectl get pods

由于我们还没有部署任何内容,这应该会返回“未找到资源”。

第五步:部署 Dashboard

Minikube 的优点在于它提供了一个方便的快捷方式来打开 Kubernetes Dashboard,这是一个我们可以用来创建和管理我们部署的 Web GUI。

要打开 Kubernetes Dashboard,只需键入

minikube dashboard

您的计算机应该会打开一个新的浏览器窗口,看起来像这样

第六步:创建新部署

要创建新部署,您可以点击“部署容器化应用”或窗口右上角的“+ 创建”。

现在您应该会看到一个类似以下的屏幕

应用程序名称,我们将此部署命名为“myblog”。

对于容器镜像,我们将使用 Ghost 博客系统的容器镜像。您可以在Docker Hub上通过查看右侧的拉取命令来找到镜像名称。

所以对于容器镜像,我们将使用实际的镜像名称,在本例中是“ghost”。

您可以将 Pod 数量设置为 1,并将服务设置为“none”。

继续点击“部署。

您现在应该在屏幕上看到两个不同的部分,一个用于部署,一个用于副本集。在部署下,您应该看到 myblog,在副本集下,您应该看到以 myblog 开头,后跟一个连字符和一系列数字的内容。

在 Pod 下,您应该看到 0/1 或 1/1(取决于 Pod 是否已成功运行)。

如果您看到 0/1,请刷新屏幕直到看到 1/1。

现在,在命令行中运行以下命令

kubectl get deployments

您应该会看到您的 myblog 部署,或者类似以下的内容

NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myblog    1         1         1            1           2m

现在让我们检查一下我们创建的 Pod

kubectl get pods

希望您能看到 Pod 正在运行,或者类似以下的内容

NAME                      READY     STATUS    RESTARTS   AGE

myblog-2479762429-7n5xw 1/1 运行中 0 3

这里我们重点关注的一些关键信息是 Pod 是否已准备好(#/# 应等于 100%),Pod 状态(应为运行中)以及 Pod 的重启次数。

如果状态为“CrashLoopBackOff”或重启次数大于0,则表示您的 Pod 由于某种原因未能启动。

第七步:公开服务

虽然我们已经启动了服务,但这并不意味着它可以通过我们的 Web 浏览器访问… 这在启动新博客时可能很重要。

在这种情况下,我们需要告诉 Kubernetes 为此 Pod 打开一个端口(Ghost 期望端口为 2368),并为其提供一个可访问的 IP。

为此,我们将运行以下命令来公开部署:myblog

kubectl expose deployment/myblog --port=2368 --type=NodePort

如果成功,您应该会看到类似以下的内容

service "myblog" exposed

第八步:打开服务

现在服务已公开,我们可以尝试在浏览器窗口中打开它。最简单的方法是利用 minikube service 快捷方式,如下所示

minikube service myblog

这应该会在新的浏览器窗口中打开您的 Ghost 博客(就像打开仪表板一样)。如果一切正常,您应该会看到您的新博客已启动并运行

要了解有关 Ghost 的更多信息以及设置您新的(本地托管)博客,您可以点击“欢迎来到 Ghost”博客文章。

第九步:进入第一个容器

我们最后想尝试做的是进入运行我们博客的容器并进行一些快速更改(*请注意,这仅出于学习/测试目的*)。

为此,我们首先获取 Pod 名称。您可以在 Kubernetes Dashboard(minikube dashboard)的“Pods”下找到 Pod 名称,或者使用命令 kubectl get pods 从终端获取。

现在我们可以使用 kubectl exec 进入此 Pod 中的第一个容器,如下所示

kubectl exec myblog-2479762429-7n5xw -it -- /bin/bash

您会注意到您现在是 root 用户,已进入第一个容器

root@myblog-2479762429-7n5xw:/usr/src/ghost#

现在您可以浏览容器的目录,修改 Ghost 主题,上传其他主题等等。

请注意,Ghost 容器默认未安装 Vim,因此如果您想安装 Vim,则需要运行以下命令

apt-get update

apt-get install vim

要退出 Ghost 容器 shell,只需运行 exit 命令

exit

第十步:销毁部署/Pod

现在,我们将删除我们的部署和 Pod,以释放它们当前占用的资源(这在 AWS/GKE 等服务上托管部署和 Pod 时避免收费也很重要)。

为此,我们将运行以下命令(我们也可以从 Kubernetes Dashboard 进行,但命令行通常更快)

kubectl delete deployments --all

kubectl delete pods --all

请记住 - 使用这些命令将删除 ALL 部署和 Pod。您也可以通过在后面添加部署或 Pod 的名称而不是添加“--all”标志来逐个删除部署和 Pod。

现在如果我们获取我们的部署(kubectl get deployments)和 Pod(kubectl get pods),我们应该再次看到未找到资源

最后,我们可以停止 Minikube

minikube stop
ProTip:尝试再次运行这些步骤,仅使用“httpd”作为容器镜像,并将端口 80 公开而不是 2368。您现在应该会有一个正在运行并公开的 Apache 容器!

回顾

总而言之,Kubernetes 是一种容器编排解决方案,旨在简化容器、Pod 和集群的管理。它还有助于保持 Pod 运行,管理故障,并使您的应用程序能够根据需要进行扩展。

在本简单的教程中,我们快速了解了安装 kubectl、Minikube、Kubernetes Dashboard、设置部署、公开部署、进入容器以及最后删除部署和 Pod。

当然,这仅仅是容器化和 Kubernetes 功能的冰山一角,并且侧重于一个非常简单的本地部署(而不是高可用性、任务关键型部署)。

同样重要的是要理解,迁移到云原生基础设施(无论您选择哪种编排器)都会带来新的挑战,包括网络和安全。当您开始评估 Kubernetes 时,我建议您也开始评估工具和插件,以不仅充分利用 Kubernetes,还能确保您的应用程序具有内置的网络和安全冗余。一个更受欢迎的开源插件,Project Calico将为您提供可扩展的容器网络(使用纯 L3 方法)以及无缝的集群隔离。

在我下一篇文章中,我将尝试涵盖在更生产化的环境中(如AWSGKE)使用 Kubernetes,并深入探讨如何确保可扩展的网络和容器/集群安全。

您还可以通过此AWS Kubernetes Quick Start找到在 Amazon 上设置 Kubernetes 的模板。

© . All rights reserved.