1. 概要
Kubernetesを使用する場合、ローカル開発に役立つツールが不足しています。これは、Dockerコンテナをノードとして使用してローカルKubernetesクラスターを実行できるツールです。
このチュートリアルでは、Kubernetesを親切に調べます。 主にKubernetesのテストツールであるkindは、ローカル開発やCIにも便利です。
2. 設定
前提条件として、Dockerがシステムにインストールされていることを確認する必要があります。 Dockerをインストールする簡単な方法は、オペレーティングシステム(およびmacOSの場合はプロセッサ)に適した DockerDesktopを使用することです。
2.1. Kubernetesコマンドラインをインストールする
まず、Kubernetesコマンドラインkubectl をインストールしましょう。macOSでは、Homebrewを使用してインストールできます。
$ brew install kubectl
次のコマンドを使用して、インストールが成功したことを確認できます。
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3",
GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean",
BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/amd64"}
同様に、curlを使用してWindowsにダウンロードできます。
curl -LO https://dl.k8s.io/v1.21.0/bin/windows/amd64/kubectl.exe.sha256
次に、kubectlコマンドのバイナリ位置をPATH変数に追加する必要があります。
2.2. 種類をインストールします
次に、macOSにHomebrewを使用してkindをインストールします。
$ brew install kind
インストールが成功したことを確認するために、次のコマンドを試すことができます。
$ kind version
kind v0.11.1 go1.15.6 darwin/amd64
ただし、 kind version コマンドが機能しない場合は、その場所をPATH変数に追加してください。
同様に、Windowsオペレーティングシステムの場合、curlを使用してkindをダウンロードできます。
curl -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.11.1/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\kind\kind.exe
3. Kubernetesクラスター
これで、Kubernetesのローカル開発環境を準備するために親切に使用する準備が整いました。
3.1. クラスターの作成
まず、デフォルト構成でローカルKubernetesクラスターを作成しましょう。
$ kind create cluster
デフォルトでは、kindという名前のクラスターが作成されます。 ただし、 –name パラメーターを使用して、クラスターに名前を指定できます。
$ kind create cluster --name baeldung-kind
Creating cluster "baeldung-kind" ...
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-baeldung-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-baeldung-kind
Thanks for using kind! 😊
また、YAML構成ファイルを使用してクラスターを構成することもできます。 たとえば、baeldungConfig.yamlファイルに単純な構成を記述してみましょう。
kind: Cluster
apiVersion: kind.x-k8s.io/v1
name: baeldung-kind
次に、構成ファイルを使用してクラスターを作成しましょう。
$ kind create cluster --config baeldungConfig.yaml
さらに、クラスターの作成中に特定のバージョンのKubernetesイメージを提供することもできます。
$ kind create cluster --image kindest/node:v1.20.7
3.2. クラスターを取得
get コマンドを使用して、作成されたクラスターを確認しましょう。
$ kind get clusters
baeldung-kind
また、対応するDockerコンテナを確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
612a98989e99 kindest/node:v1.21.1 "/usr/local/bin/entr…" 1 min ago Up 2 minutes 127.0.0.1:59489->6443/tcp baeldung-kind-control-plane
または、kubectlを介してノードを確認できます。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
baeldung-kind-control-plane Ready control-plane,master 41s v1.21.1
3.3. クラスターの詳細
クラスタの準備ができたら、kubectlでcluster-infoコマンドを使用して詳細を確認できます。
$ kubectl cluster-info --context kind-baeldung-kind
Kubernetes master is running at https://127.0.0.1:59489
CoreDNS is running at https://127.0.0.1:59489/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
また、 dumpパラメーターをcluster-info コマンドと一緒に使用して、クラスターに関する詳細情報を抽出することもできます。
$ kubectl cluster-info dump --context kind-baeldung-kind
3.4. クラスターの削除
get コマンドと同様に、deleteコマンドを使用して特定のクラスターを削除できます。
$ kind delete cluster --name baeldung-kind
4. 入力コントローラー
4.1. 構成、設定
ローカル環境とKubernetesクラスタ間の接続を確立するには、ingressコントローラが必要です。
したがって、extraPortMappingsやnode-labelsなどのkindの構成オプションを使用できます。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: baeldung-kind
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
ここでは、 baeldungConfig.yaml ファイルを更新して、入力コントローラーの構成を設定し、コンテナーポートをホストポートにマッピングしました。 また、 ingress-ready = true を定義することにより、入力に対してノードを有効にしました。
次に、変更した構成でクラスターを再作成する必要があります。
kind create cluster --config baeldungConfig.yaml
4.2. 配備
次に、Kubernetesでサポートされている ingress NGINXコントローラーをデプロイして、リバースプロキシおよびロードバランサーとして機能させます。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
さらに、AWSおよびGCEロードバランサーコントローラーを使用することもできます。
5. ローカルでのサービスの展開
最後に、サービスを展開する準備が整いました。 このチュートリアルでは、Dockerイメージとして利用可能な単純なhttp-echoWebサーバーを使用できます。
5.1. 構成、設定
それでは、サービスを定義する構成ファイルを作成し、ingressを使用してローカルでホストしましょう。
kind: Pod
apiVersion: v1
metadata:
name: baeldung-app
labels:
app: baeldung-app
spec:
containers:
- name: baeldung-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=Hello World! This is a Baeldung Kubernetes with kind App"
---
kind: Service
apiVersion: v1
metadata:
name: baeldung-service
spec:
selector:
app: baeldung-app
ports:
# Default port used by the image
- port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: baeldung-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/baeldung"
backend:
service:
name: baeldung-service
port:
number: 5678
---
ここでは、baeldung-appという名前のポッドをtext引数と、baeldung-service。というサービスで作成しました。
次に、5678ポートの baeldung-service に、 / baeldungURIを介して入力ネットワークを設定します。
5.2. 配備
すべての構成の準備が整い、クラスターが入力NGINXコントローラーと統合されたので、サービスをデプロイしましょう。
$ kubectl apply -f baeldung-service.yaml
kubectlでサービスのステータスを確認できます。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
baeldung-service ClusterIP 10.96.172.116 <none> 5678/TCP 5m38s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m5s
それでおしまい! 私たちのサービスはデプロイされており、 localhost /baeldungで利用できるはずです。
$ curl localhost/baeldung
Hello World! This is a Baeldung Kubernetes with kind App
注: validate.nginx.ingress.kubernetes.io Webhookに関連するエラーが発生した場合は、ValidationWebhookConfigurationを削除する必要があります。
$ kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
validatingwebhookconfiguration.admissionregistration.k8s.io "ingress-nginx-admission" deleted
次に、サービスを再度デプロイします。
6. 結論
この記事では、種類を使用してKubernetesについて説明しました。
まず、Kubernetesコマンドラインkubectlとkindのインストールを含むセットアップを行いました。 次に、種類のいくつかの機能を使用して、Kubernetesローカルクラスターを作成/更新しました。
最後に、入力コントローラーを統合し、Kubernetesクラスターにプライベートアクセス可能なサービスをデプロイしました。