GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでKubernetesポッドを作成および管理する方法

このチュートリアルでは、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を使用したポッドの作成について詳しく説明します 今後の詳細の定義ファイル。


Linux
  1. Linuxでハードリンクとシンボリックリンクを作成する方法

  2. Linuxでユーザーパスワードの有効期限とエージングを管理する方法

  3. Linuxでエイリアスを作成してエイリアスコマンドを使用する方法

  1. Linuxでサービスを管理および一覧表示する方法

  2. Linuxでユーザーグループを作成および削除する方法

  3. Kubernetesでポッドを削除する方法[K8sのクイックヒント]

  1. Kubernetesポッドを再起動する方法

  2. 最初のポッドをKubernetesクラスターにデプロイする方法

  3. Linuxで環境変数とシェル変数を設定/作成する方法