用餐厅来比喻Kubernetes(后半:minikube和kubectl实操)

文章的目標

    • はじめに用語の説明をする

 

    • 用語の説明はざっくりと三行でまとめる。

 

    • 後半minikubeを試すコマンド中心の記事になる。

 

    minikubeを試しているところではあんまり例えとか使って説明しない

先决条件的了解

    • Dockerは使ったことある

 

    • ネットワークの基礎知識あり

 

    Webサーバに関するちょっとした知識あり

容器化是指将应用程序和其所有相关组件打包到一个独立的容器中,以便在不同的计算环境中运行。

为了确保应用程序在任何环境下都能运行,将应用程序及其依赖关系放入”容器”中。

Kubernetes是什么?

你已经创建了许多容器。
然后需要检查每个容器是否在运行,以及每个容器正在做什么,这变得非常麻烦。
Kubernetes是为此目的而设计的工具。

クラスタとは

在Kubernetes中(基本上),最大的单位是“餐厅”,用作后续解释的例子。

Pod是什么?

KubernetesのPodは一つまたは複数のコンテナのグループである。
一つのPodは一つのアプリケーション、になることが多い。
コンテナという「部品」をつなぎ合わせて「ホールスタッフ・ロボA」として機能させる的なイメージ。

服务是什么

提供用于访问Pod的地址。
确定“桌子A在这里”并让客人坐下。

“Node” 是什么? (What is “Node”?)

有两种类型,分别是Worker节点和Control Plane。
每个节点对应一个(物理或虚拟)机器。

Worker Node是什么

Podが動作するサーバ。Podが必要とするものを備えていないといけない。
ホールスタッフロボたちが働く一つの「ホール」的なもの。
複数あることもある。

控制节点(即Master Node)

Podが入れない場所。Podに指示を出す。
例えば「ホールロボットA」は今後から「ホールD」に移動な
的な指示を出す、本部のようなもの。複数あることもある。

Deployment

决定如何对Pod和容器进行扩展、更新和修复。
Pod管理的范围很广泛,不仅仅是简单地将Hall Robot A放在Hall A上,也包括指定Hall B需要3名员工,Hall C需要…这样的指定在部署中。

重新定义“聚类”是什么。

一家餐厅,由多个「大厅」和多个「总部」组成。

MiniKube是什么

 

Kubernetes学習用のクラスタを作ってくれる。
Local Kubernetes = Nodeはひとつ である。
ホールも本部も全部ローカルで動くレストランみたいなことである。

注意点如下

筆者の環境がMacだったのでそれ以外のことは触れない。
またほぼ公式のチュートリアル通りにminikubeを触るだけの記事となっています。

接下来的目标

    • ローカルに開発用Kubernetesクラスターをデプロイ

 

    • そのKubernetesクラスターにアプリをデプロイ

 

    • アプリのログを取る方法の確認

 

    コンテナの方に直接アクセスする方法

参考链接 (英文)

 

可以通过Homebrew进行安装。

brew install minikube

确认版本

minikube version 

minikube version: v1.31.2

创建一个集群

minicube start

只需这么简单就能形成一个组群,太容易了!

kubectl是什么?

在与集群交互的方法中,有一个称为kubectl的命令行工具。

确认集群的信息

kubectl cluster-info

就是这样。

スクリーンショット 2023-08-22 16.03.34.png

控制平面位于 https://127.0.0.1:62761。
(通信方式):以//(地址):(端口)进行连接。

kubectl get nodes

当运行此命令时,应该可以确认只有一个名为minikube的node存在。
状态被标记为ready,应该已经准备好部署应用程序。

kubectl是什么?(2)

kubectl version

当您输入这个指令时,应该会显示客户端版本和服务器版本的两个选项。

客户端显示了kubectl工具本身的版本。
服务器显示了启动集群时显示的集群版本。

创建部署

使用kubectl来指定应用容器的映像来源。这次我们将使用托管在Docker Hub上的映像。

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

当执行时,应用程序被部署。”部署”一词包括以下内容。

適切なノードを探し、アプリのインスタンスが実行されるようにする => 今回の場合一個しかないのでminikubeが選ばれる。
そこでアプリが実行されるよう「スケジュール」する
クラスタがもし新しいノードを作ったらそこにアプリのインスタンスを移せるよう設定する。

kubectl get deployment

実行すると確かにkubernetes-bootcampという名前のdeploymentが作成されているはず。

关于Pod的特性

Pod可以从其他Pod访问,但无法从集群外访问。
这是因为我们运行餐厅的机器使用的网络与餐厅内部的网络不同。

关于kubuctl的内容(3)

kubectl可以建立代理,将通信转发到这些Pod所使用的网络中。

echo -e "プロキシを起動しました。起動中は特に何も出力しないのでcontrol-Cで戻ろう。\n"; kubectl proxy
スクリーンショット 2023-08-22 16.49.12.png

使用API

如果保持先前的代理服务器运行,并访问localhost:8001,您就可以访问API。
要直接从代理的API中查询版本,请尝试以下命令。

curl http://localhost:8001/version

预计在这个结果中会以JSON对象的格式显示出来。
gitVersion属性应该与之前使用 kubectl version 命令显示的Server版本相匹配。

将Pod的名称记录在环境变量中

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

创建一个环境变量作为POD_NAME,并将Pod的名称用换行符分隔后放入其中。

执行第二行代码后,应该会变成以下的样子。

Name of the Pod: hello-minikube-59d4768566-dvqtp
kubernetes-bootcamp-855d5cc575-5fld9

按照这篇文章的指导,只能得到一个Pod的名称:kubernetes-bootcamp。

给那些在这里显示多个人的人:

由于Pod只有一个,所以未来的教程会顺利进行。
如果在$POD_NAME设置中有启动kubernetes-bootcamp以外的Pod,将会出现多个无法正常运作的命令。
如果没有这样的Pod也没有问题,
可以执行kubectl delete deployment kesitai-pod-name
然后重新注册之前Pod的环境变量可能会更方便。

通过API访问Pod

curl http://localhost:8001/api/v1/namespaces/default/pods/$PODNAME

这样做

スクリーンショット 2023-08-22 17.38.33.png

在我的环境中,有非常长的响应时间,如果在其中搜索,确实会找到刚刚启动的pod的元数据。
要让部署的应用程序无需使用此类代理即可访问,应该怎么做呢?

核对应用程序的设置

kubectl get pods

通过这样做,您应该能够查看正在运行的Pod的列表以及其状态、运行时间等信息。
在这里复制并粘贴以”kubernetes-bootcamp”开头的Pod的名称。

kubectl describe pod kubernetes-bootcamp-<nanka_iroiro>

这样做可以清晰地显示Pod的相关信息,例如IP地址、使用的端口以及Pod的运行状态等应该都能显示出来。

在容器中执行命令

当Pod正在运行时,可以使用exec命令来执行命令。
在此访问的不是”Pod”本身,而是用于运行”Pod”的容器(本例中只有一个)。

kubectl exec $POD_NAME -- env

只需一种选项,将以下内容用中文转述为:可以查看已设置在pod中的环境变量清单。

在容器中启动一个bash会话

kubectl exec -ti $POD_NAME -- bash

若按照此方式进行,应该会显示容器的名称以及一个#符号作为root用户提示符。

cat server.js

运行后,可以看到一些函数,比如http.createServer。同时,通过查看handleRequest的内容,可以确定如何定义响应方式。

root@kubernetes-bootcamp-855d5cc575-5fld9:/# curl localhost:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-855d5cc575-5fld9 | v=1

可以通过在容器内使用“本地主机”来指定curl并验证响应。

这次就到这里吧。

广告
将在 10 秒后关闭
bannerAds