このチュートリアルでは、Kubernetesポッドを作成および管理する方法を学習します。まず、Kubernetesのポッドとは何か、ポッドはどのように機能するかから始めます。次に、ポッドの種類について簡単に説明します。次に、新しいポッドを作成する方法と、コマンドラインからポッドの情報を表示する方法を確認します。最後に、ポッドが不要になったときに削除する方法を学習します。
Kubernetesのポッドとは何ですか?
Kubernetes 、ポッドは、構築および制御できる最小のデプロイ可能なコンピューティングユニットです。ポッドは、共有ストレージとネットワークリソース、およびコンテナの実行方法に関する一連のルールを備えた1つ以上のコンテナのコレクションです。
ポッドのコンテンツは、常に同じ環境で同じ場所に配置され、同じスケジュールで実行されます。ポッドは、アプリケーション固有の「論理ホスト」を表します。ポッドには、1つ以上の密接に接続されたアプリケーションコンテナが含まれます。
Dockerの観点では、ポッドは、共通の名前空間とファイルシステムボリュームを持つDockerコンテナーのセットに相当します。
Kubernetesポッドの種類
Kubernetesクラスタには、2種類のポッドがあります。
- シングルコンテナPOD: 最も頻繁なKubernetesのユースケースは、「ポッドごとに1つのコンテナ」アプローチです。このシナリオでは、ポッドを単一のコンテナーのラッパーと見なします。 Kubernetesは、コンテナではなくポッドを直接維持します。
- 複数のコンテナPOD: ポッドは、リソースを共有する必要がある多数の緊密に接続されたコンテナーで構成されるアプリケーションをカプセル化できます。これらのコンテナはグループ化されて単一のサービスユニットを形成し、これらのコンテナは相互に通信します。
PODはどのように機能しますか?
各ポッドは、単一のアプリケーションインスタンスを実行するように設計されています。アプリケーションを水平方向に拡張する必要がある場合は、インスタンスごとに1つずつ、複数のポッドを利用できます。これは一般にKubernetesでのレプリケーションと呼ばれます 。ワークロードリソースとそのコントローラーは通常、グループ内で複製されたポッドを生成および管理します。
Kubernetesの最終的な目的は、ワーカーノードと呼ばれる一連のマシンにコンテナの形式でアプリケーションをデプロイすることです。 Kubernetesクラスターで。
Kubernetesはノードで直接コンテナを起動せず、コンテナはアプリケーションの単一インスタンスであるポッドとしてカプセル化されます。

Kubernetesクラスタでは、ノードはポッドで構成され、ポッドはコンテナで構成されます。たとえば、ポッドによってカプセル化された単一のコンテナで実行されているアプリケーションの単一のインスタンスがあります。
アプリケーションにアクセスするユーザーの数が増える場合は、アプリケーションをスケールアップする必要があります。その場合、負荷を共有するために追加のインスタンスを起動する必要がある場合があります。
アプリケーションをスケールアップするには、同じアプリケーションのノードで追加の新しいポッドを起動する必要があります。負荷がさらに増加し、現在のノードに容量がない場合は、同じアプリケーションコンテナでポッドを起動するために追加のノードが必要です。
同様に、スケールダウンするには、既存のポッドを削除する必要があります。
Kubernetesポッドについての基本的な考え方を理解していただければ幸いです。ここで、Kubernetesでポッドを作成および管理する方法を見てみましょう。
開始する前に、システムにKubernetesがインストールされていることを確認してください。次のリンクには、LinuxでシングルノードとマルチノードのKubernetesクラスターのデプロイをセットアップする方法が記載されています。
- CentOSLinuxでMinikubeを使用してKubernetesをインストールする方法
- RHEL、CentOS、AlmaLinux、RockyLinuxでKubeadmを使用してKubernetesクラスターをインストールする
Kubernetesをインストールすると、ポッドの作成を開始できます。
通常、シングルトンポッドであっても、ポッドを直接作成する必要はありません。代わりに、導入などのワークロードリソースを使用してそれらを作成してください または仕事 。デプロイメントは、ポッドとレプリカセットの宣言型の更新を提供します。
デプロイメントを作成する
既存のイメージを使用してサンプルデプロイメントを作成する"echoserver" 。これは単純なHTTPサーバーであり、ポート8080
で公開できます。 --port
を使用する オプション。
コンテナイメージは、プログラムとそのすべてのソフトウェア依存関係をバイナリデータでラップするファイルです。コンテナイメージは、実行環境について非常に具体的な仮定を行う独立した実行可能ソフトウェアパッケージです。
この記事では、シングルノードクラスターですべてのデモンストレーションを行います。 。
以下のコマンドをroot
として実行すると、ノードの詳細を知ることができます。 ユーザー
# kubectl get nodes
出力例:
NAME STATUS ROLES AGE VERSION ostechnix Ready Master 25h v1.22.3

次に、 "hello-ostechnix"というサンプルアプリケーションをデプロイします。 以下のコマンドを使用します。都合に合わせて名前を付けることができます。
# kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10
出力例:
deployment.apps/hello-ostechnix created [[email protected] ~]#
デプロイメントが作成されました。以下のコマンドを使用してデプロイメントを確認してください。
# kubectl get deployments
出力例:
NAME READY UP-TO-DATE AVAILABLE AGE hello-ostechnix 1/1 1 1 85s
アクセスの展開
このデプロイメントにサービスとしてアクセスするには、それをサービスとして公開する必要があります。以下のコマンドを使用して、ポート8080
でのデプロイメントを公開します 。
# kubectl expose deployment hello-ostechnix --type=NodePort --port=8080
出力例:
service/hello-ostechnix exposed
以下のコマンドを使用して、公開されたサービスのURLを取得します。
# minikube service hello-ostechnix --url
出力例:
http://192.168.181.131:30525

URLをコピーしてブラウザに貼り付けると、デプロイされたアプリケーションの詳細が一覧表示されます。

ポートが30525
であることを確認してください ルーターまたはファイアウォールで許可されています。このポートがブロックされていると、ブラウザにポッドの情報が表示されない場合があります。
展開の削除
まず、コマンドを使用してサービス「hello-ostechnix」を削除します:
# kubectl delete services hello-ostechnix
出力例:
service "hello-ostechnix" deleted
次に、デプロイメント「hello-ostechnix」を削除します:
# kubectl delete deployment hello-ostechnix
出力例:
deployment.apps "hello-ostechnix" deleted
デプロイメントを削除すると、アプリケーションに関連付けられているポッドは終了します。終了には数秒かかります。
# kubectl get pods
出力例:
NAME READY STATUS RESTARTS AGE hello-ostechnix-5d4cf4df75-jlwff 1/1 Terminating 0 57m
デプロイメントを終了すると、アプリケーションにアクセスできなくなります。
# kubectl get pods
サンプル出力:
No resources found in default namespace.
画像を使用してポッドを実行する
'kubectl run
を使用できます 'ポッドでアプリケーションを作成して実行するコマンド。
$ kubectl run <POD name> --image=<image name>
ここで、ポッド名は任意の名前にすることができ、イメージ名はDockerHubまたは任意のローカルリポジトリで使用できる特定のものである必要があります。
Nginxイメージでポッドを作成しましょう。
# kubectl run ostechnix-nginx --image=nginx
出力例:
pod/ostechnix-nginx created
'ostechnix-nginx'という名前のポッドが作成されました。以下のコマンドでポッドのステータスを確認できます。
# kubectl get pods
出力例:
NAME READY STATUS RESTARTS AGE ostechnix-nginx 1/1 Running 0 4m20s
'wide
を使用すると、ポッドが実行されている場所やポッドのIPなどの追加情報を取得できます。 'オプション。
# kubectl get pods -o wide
出力例:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ostechnix-nginx 1/1 Running 0 38m 172.17.0.6 ostechnix <none> <none>
'kubectl describe
を使用して、PODに関する完全な情報を取得できます。 'コマンド。
# kubectl describe pod ostechnix-nginx
このコマンドは、コンテナの詳細とその状態、ポッドの作成後に発生したイベントの詳細など、PODの完全な詳細を取得します。
Name: ostechnix-nginx Namespace: default Priority: 0 Node: ostechnix/192.168.181.131 Start Time: Thu, 03 Feb 2022 01:40:48 -0800 Labels: run=ostechnix-nginx Annotations: <none> Status: Running IP: 172.17.0.6 IPs: IP: 172.17.0.6 Containers: ostechnix-nginx: Container ID: docker://29eeb0392247aef193d6dff0138f8ef132dfb6359d8e67c3a5e4a21d7e259989 Image: nginx Image ID: docker-pullable://[email protected]:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 Port: <none> Host Port: <none> State: Running Started: Thu, 03 Feb 2022 01:40:54 -0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ggvk6 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-ggvk6: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 7m26s default-scheduler Successfully assigned default/ostechnix-nginx to ostechnix Normal Pulling 7m24s kubelet Pulling image "nginx" Normal Pulled 7m20s kubelet Successfully pulled image "nginx" in 4.114836826s Normal Created 7m20s kubelet Created container ostechnix-nginx Normal Started 7m20s kubelet Started container ostechnix-nginx [[email protected] ~]#

完了したら、'kubectl delete
を使用してポッドを削除できます。 'コマンド。
# kubectl delete pod ostechnix-nginx
出力例:
pod "ostechnix-nginx" deleted
使用可能なポッドを一覧表示して、ポッドが削除されているかどうかを確認します。
# kubectl get pods No resources found in default namespace.

結論
このチュートリアルでは、Kubernetesでのポッドの概念、簡単なアプリケーションのデプロイ、およびポッドの実行方法について説明しました。 YAML
を使用したポッドの作成について詳しく説明します 今後の詳細の定義ファイル。