12.私の最初のコンテナアプリケーション

12.チョッパー小規模:私の最初のコンテナアプリケーション

1.私はあなたが最も関連性の概念の内部KubernetesおよびDeveloper関係を説明させてしまいます。

  1. アプリケーション開発者は、最初にやるべきことは、コンテナの鏡像を生成することです。「方言容器ベース(III):コンテナミラーの深い理解」上説明に焦点を当て

  2. コンテナは鏡を持った後、あなたの組織が「知っている」ようにして、その後、アップ提出する能力であるミラーリングする仕様と要件Kubernetesプロジェクトを実行する必要があります。コンフィギュレーション・ファイルの書き込み:Kubernetesは必要不可欠なスキルを使用することです。

    注:これらのプロファイルは、YAMLやJSONフォーマットすることができます。説明以降で読み込みと理解を容易にするために、私はそれらを参照するために統一YAMLファイルを使用します。

    どのように1 YAMLファイル?

    、しかし、あなたはYAMLファイルを使用する方法に:最大の違いは、あなたが(kubectlランKubernetesプロジェクトはまた、として、このアプローチをサポートするが)直接の容器を実行するためのコマンドラインを使用することをお勧めされていないこと、ドッカーおよび他の多くのプロジェクトでKubernetesそれは次のとおりです。容器の定義、パラメータ、設定、YAMLファイル内のすべてのレコード、そしてそれは、そのような命令を使用して、実行中:

    $ kubectl create -f 我的配置文件

    2.ファイルでYAMLのキーワードを理解する方法

    最も直接的な利益はあなたが次に何Kubernetesファイル「ファイル名を指定して実行」があるだろう最後に記録することができますということです行います。たとえば、次の例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80

    YAML Kubernetesに対応し、このようなファイルは、APIオブジェクト(APIオブジェクト)であります

    あなたが記入し、このオブジェクトの各フィールドのKubernetes値を送信すると、Kubernetesは、コンテナまたは定義されたAPIのリソースオブジェクトの他の種類を作成するための責任を負うことになります。

    私は上記のプロファイルにあなたにキーのいくつかを説明しましょう:

    1. 種類フィールドは、タイプ(タイプ)APIオブジェクト、指定の展開を

      いわゆる展開、マルチコピーアプリケーション(つまり、複数のコピーポッド)の定義の目的である、私は以前の記事(第1の9の記事「コンテナのコンテナからが行く:Kubernetesの性質についての話」)で午前単に言及していましたその使用法。また、展開もポッド、コピーごとにローリングアップデート(ローリングアップデート)の変化を定義する責任があります。

      2:上記のYAMLファイルでは、ポッドのコピー数(spec.replicas)私は定義があるそれを与えます。

    2. ポッドステンシル(spec.template)。このテンプレートは、ポッドは、私が作成したいの詳細を説明します。上記の例では、ポッドのみつの容器、この画像(spec.containers.image)のコンテナがnginxのである:1.7.9、この容器リスニングポート(containerPort)80。

    Pod 就是 Kubernetes 世界里的“应用”;而一个应用,可以由多个容器组成。

    PS:「コントローラ」モード(Controllerパターン)と呼ばれる方法、KubernetesのAPIオブジェクトの使用(展開)別の管理APIオブジェクト(POD)のように、なお我々の場合での役割、展開はまさにポッドコントローラを果たしました。ポッドとコントローラモードの詳細については、私は、その後のレイアウトのセクションでさらに説明します。

    1. メタデータフィールド。このフィールドは、私たちがメインの基礎Kubernetes内側からこのオブジェクトを見つける理由である「アイデンティティ」、すなわちメタデータAPIオブジェクトであり、

    2. ラベルフィールド。ラベルタグは、キーと値のフォーマットのセットです。そのようなコントローラなどのオブジェクトの展開は、このフィールドを介して濾過することができないという懸念から制御さKubernetesをラベル。

      例えば、上記のYAMLファイルに、展開は「APP:nginxの」運ぶ、全ての動作するオブジェクトのためのポッド識別タグを管理するために、そして確実にするために、二つに厳密に等しいものポッドの総数。

      そして、これは「spec.selector.matchLabels」フィールドの展開では、フィルタリングルールを定義しています。私たちは、一般的に呼び出す:ラベルセレクタ。

    3. 注釈フィールド。内部情報のキーと値のフォーマットを運ぶように設計されています。いわゆる内部情報、関心のあるこれらの情報を参照し、それはユーザではなく、Kubernetes成分そのものです。だから、ほとんどの注釈は、Kubernetes操作の過程で、これは自動的にAPIオブジェクトに追加されています。

    概要:Kubernetes APIオブジェクトの定義は、それらのほとんどは二つの部分メタデータと仕様に分けることができます。前者は、すべてのAPIオブジェクト、フィールド、およびこのセクションは、実質的に同一であることの形式のオブジェクトのメタデータに格納され、後者の記憶装置、オブジェクトに固有で発現するようにそれを記述するために使用される定義に属します機能。

リソースファイルを作成する方法2. YAMLは、リソース、リソースの更新を表示し、リソースを削除します。

  1. リソースを作成します。作成kubectl

    $ kubectl create -f nginx-deployment.yaml
  2. リソースの表示

    # 查看运行的状态
    kubectl get pods -l app=nginx
    或者
    kubectl get pods 具体的pod名称  -o  wide
    
    -l参数 表示获取所有匹配 app: nginx 标签的 Pod。需要注意的是,在命令行中,所有 key-value 格式的参数,都使用“=”而非“:”表示
    
    -o参数 表示展示的信息更加全面
    
    
    # 查看运行的详细状态
    kubectl describe  pods  具体的pod名称
  3. 更新リソース

    # 第一种方法:直接修改yaml文件后,然后使用kubectl replace命令进行更新
    kubectl replace -f nginx-deployment.yaml
    
    # 第二种方法:修改yaml文件后,然后使用kubectl apply 命令进行更新(推荐使用)
    kubectl apply -f nginx-deployment.yaml
  4. リソースを削除します。

    kubectl delete -f yaml文件名

3.肯定そのYAMLでVulumeデータ量(フォーカス)

最初:emptyDirタイプ

Kubernetesでは、ボリュームポッドは、オブジェクトの一部です。そこで、我々は次のようにtemplate.spec分野でYAML文書を変更する必要があります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:
      - name: nginx-vol
        emptyDir: {}

MOUNTPATH:「は、/ usr / share / nginxの/ HTML」 とemptyDir:{}は、一体化されている:(システム用に作成)ホスト上の一時ディレクトリを作成し、ディレクトリを/ usr / shareにポッドをマウントします/ nginxの/ htmlのディレクトリの下に。

emptyDirは、機能をマウントします。

  • ホスト上の一時的なシステムの一時ディレクトリを作成し、ポッドディレクトリをマウント
  • ポッドリソースを削除する場合は、一時ファイルが削除されます。
第二:ホストパス

コンテナ内のポッド、彼らは、ボリュームをマウントするボリュームと、たとえば、MOUNTPATHフィールドで、コンテナ内のディレクトリを定義するためにしなければならないものを宣言するためにvolumeMountsフィールドを使用して:を/ usr / share / nginxの/ htmlの。

もちろん、Kubernetesもそれがホストパスと呼ばれ、明示的にボリュームが定義されています。例えば、YAMLファイルを次のよう:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:
      - name: nginx-vol
        hostPath: 
          path: "/var/data"

MOUNTPATH: "は、/ usr / share / nginxの/ HTML" とパス:/ VAR /データ表現するために組み合わせ:ホスト上の/ var / dataディレクトリに、マウントするには、/ usr / share / nginxの/ htmlディレクトリを(あなたがホスト上ではないの/ var / dataディレクトリを行う場合は、システムが自動的に作成されます)。

より多くのデータボリュームの分類:
  1. ローカルマウント
    • emptyDir
    • ホストパス
  2. ネットワークマウント
    • 従来のネットワークマウント
      • SAN:ISCSI
      • NAS:NFS、CIFS
    • 分散型ネットワークマウント
      • glusterfs、RBD、cephfs
    • クラウドストレージ
      • EBS、アズール、ドライブ、米国

おすすめ

転載: www.cnblogs.com/plf-Jack/p/11299995.html