Kubernetesオブジェクト


KubernetesオブジェクトはKubernetesによって提供されたさまざまな種類のエンティティを展開し、維持し、スケーリングしたり、クラウド上の前提インフラストラクチャのアプリケーションです.このポストでは、我々は我々のApplications展開で使用する異なるKubernetesオブジェクトを通過します.

ポッド


PODはKubernetesクラスタで作成できる最も基本的なオブジェクトです.通常、1つ以上の実行中のコンテナが含まれます.コンテナは、同じネットワーク、ストレージ、およびライフサイクルを共有します.これが意味するのは、直接通信することができ、両方を停止し、同時に起動することです.
pod定義
apiVersion: v1
kind: Pod
metadata:
  name: my-first-pod
  labels:
    name: my-first-pod
    app: nginx-app
spec:
  containers:
     - image: nginx
        name: nginx-app
        ports:
           - containerPort: 80
我々が同様に他のオブジェクト定義で同様の定義を使用しているように、我々がちょうど使ったYAML定義を壊しましょう.また、この定義ファイルを理解しようとします.
これは、このオブジェクトを作成するために使用しているKubernetes APIのバージョンを定義します.いくつかのバージョンがあり、いくつかのオブジェクトが各バージョンで導入されます.いくつかの一般的なものは、V 1、Apps/V 1、および拡張モジュール/V 1 beta 1です.

種類:Kubernetesオブジェクトの型です.この例では、podを作成しています.(そうポッド)
メタデータ:メタデータはオブジェクトに関する情報です.メタデータには、通常、オブジェクトを与える名前、ラベルのラベルなどが含まれます.名前、アプリケーション、所有者、グループ、ティアなどのように多くのラベルを定義できます.
spec : specのセクションは、オブジェクトの仕様を定義する場所です.podの場合は、コンテナの状態を記述します.specセクションで指定できるオプションは以下の通りです.
コンテナを指定します
  • あなたのポッド
  • で実行するイメージ
  • あなたのポッドで動くコンテナの名前.
  • ポート
  • のポッド定義でポッドを作成しましょう.YAMLファイル:
    今すぐあなたの端末に行く、あなたのファイルを作成したディレクトリにしてください.
    kubectl apply -f pod-definition.yaml
    
    上記のコマンドはpod定義ファイルで定義されているnginxイメージを持つpodを生成します.そして、kubectl get podsを使用して、ポッドを見ることができます.

    レプリカスセット


    レプリカは、Kubernetesクラスタで同じpodの複数のコピーを作成するために使用されます.これは、指定された任意の時点で、指定されたポッドの指定された数が実行状態にあることを保証するのに役立ちます.
    ReplicSetは、既存のものが失敗したときに、podの新しいインスタンスを生成し、実行中のインスタンスが指定された数に達していない場合にスケールアップし、同じラベルを持つ別のインスタンスが作成された場合には、スケールダウンまたは削除を行います.ReplicSetは、指定された数のpod複製が連続的に実行されて、リソース使用量の増加の場合に負荷バランシングに役立つことを確実とします.
    レプリカ定義
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: myapp-replicaset
      labels:
        app: myapp
        tier: frontend
    spec:
      replicas: 2
      selector:
        matchLabels:
          tier: frontend
      template:
        metadata:
          labels:
            tier: frontend
        spec:
          containers:
          - name: nginx-app
            image: nginx
    
    レプリケートを作成するには、次のコマンドをYAML定義ファイルで実行します.
    kubectl apply -f ReplicaSet-definition.yaml
    
    レプリカが実行されると、kubectl get replicaset <your-replicaset-name>

    展開


    展開はPODを管理するために使用されるKubernetesオブジェクトです.展開が作成される最初のものはレプリケートを作成することです.レプリカは、レプリカオプションで指定された番号に従ってPODを作成します.以下の配置のためのYAML定義を見ると、展開のspecセクションはレプリケートの定義のように見えます.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
      labels:
        app: mongo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: mongo
      template:
        metadata:
          labels:
            app: mongo
        spec:
          containers:
          - name: mongo
            image: mongo
    
    
    したがって、配置を作成するときに、定義に記載されたPODを持つレプリケートを作成します.
    展開は、実行中のアプリケーションの数を増やすか、または実行するアプリケーションを更新することによって、アプリケーションをスケールするために使用できます.
    kubectl apply -f Deployment-definition.yaml
    
    あなたはkubectl get deploymentsで展開を見ることができます

    名前空間


    名前空間は、Kubernetesクラスタ内のオブジェクトを整理するために使用されます.リソースをグループ化し、それらのリソースに対するアクションを実行できます.
    環境内のすべての名前空間を見るには、kubectl get namespacesを使用します
    名前空間の作成は単一のコマンドで行うことができます.' test 'という名前空間を作りたいなら、以下のように実行します.
    kubectl create namespace testing
    
    または、YAML定義を使用して名前空間を作成することができます
    apiVersion: v1
    kind: Namespace
    metadata:
      name: testing
    
    ここで、名前空間を作成しましたが、新しく作成された名前空間にどのようにオブジェクトを作成するのでしょうか.定義ファイル/コマンド内の名前空間を参照する必要があります.
    apiVersion: v1
    kind: Pod
    metadata:
      name: myPod
      namespace: testing
      labels:
        name: namespaced-pod
    spec:
        containers:
          - image: hello-world
             name: firstpod
    

    サービス


    Kubernetesサービスは、1つのエンドポイントを使用して、一連のポッドに配備されたアプリケーションを公開するために使用されます.サービスは、Kubernetesのポッドのセットへのネットワークアクセスを可能にします.
    Kubernetesのサービスは、次のようなサービス定義を渡すことによってAPIリクエストを通じて作成できます.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: myApp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
    
    
    この例では、サービスは私のサービスと命名されて、メタデータラベル「APP = MyApp」でどんなTCPの上でもTCPポート9376を目標とします.Kubernetesはサービスのラベルセレクタを常にポッドがサービスに含まれている任意の時点で決定するために評価します.これは、新しいサービスがラベルセレクタにすでにマッチする既存のポッドを含むことができることを意味します.

    サービスタイプ


    デフォルトで最も簡単なサービスタイプはClusterIPです.それはKubernetesクラスタにサービスのclusteripアドレスを内部的に公開します.NodePort - Kubernetesクラスタ内のすべてのノードで、指定したポート番号にサービスを公開します.指定されたポートのノードのIPへの着信要求がサービスのclusteripに発送されるという意味.LoadBalancer -サービスはNodeportのように露出していますが、Kubernetesがサービスに外部の要求を受け取る(クラウドプロバイダーによってサポートされている場合)クラウドでロードバランサーを作成します.そして、それをノードノードの間で配布します.この型を指定するには、この行をspecに追加します.
    type: LoadBalancer