0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetesリソースメモ

Last updated at Posted at 2023-01-17

自己紹介

初めまして。私は都内でwebエンジニアをしています。

今の会社にインターンとして経て、入社しました。

業務では、Nuxtjs, Golang, Kubernetesを用いて運用保守開発や

最近はPandasを用いてデータ分析など日々苦戦している若輩者です。

背景

以外と忘れがちなリソースについて、まとめました。

対象としている人

Kubernetesを学習途中の人、またこれからKubernetesを学習しようとしている人

リソース

Pod

PodはKubernetesにデプロイ出来る最小単位

  • コンテナやボリュームの集まり

Deployment

  • 新しいReplicaSetを作成したり、既存のDeploymentを削除して新しいDeploymentで全てのリソースを適用することができる

ReplicaSet

  • どんな時でも指定された数のPodのレプリカが稼働することを保証する
  • spec.templateをハッシュ値で管理しているため、ロールアップ・ダウンによる変更に即座に対応できる。

Ingress

  • IngressはHTTPやHTTPSの外部アクセスを制御するオブジェクト
  • Load Balancerの役割をしている。

Service

  • 動的にIPAddressが変更されるPodへの接続を解決してくれる抽象的なオブジェクト
  • Podの集合で実行されているアプリケーションをネットワークサービスとして公開する抽象的な方法

役割

  • Pod,Nodeの存在を抽象化し、Podとの通信に単一のエンドポイントを提供する

Volumeについて

コンテナのデータは一時的なもので、Pod/コンテナが削除されるか、コンテナがクラッシュした場合コンテナのデータは消えてしまう。
そこでVolumeを使う

  • メリット
    • Volumeはデータの永続化をしてくれる。 永続化したいデータは指定したVolumeに保存することで削除やクラッシュした際でもデータが残る。
    • また、Volumeは別の目的でも使用される。それはPod内でのコンテナ間のデータ共有だ。
    • Pod内のコンテナはVolumeを通してデータを共有することが出来る。

種類

  • emptyDir
    • Podがノードに割り当てられたときに最初に作成され、そのPodがそのノードで実行されている限り存在する
    • 名前が示すようにemptyDirボリュームは最初は空
    • Podが削除された際に対象のVolumeのデータも削除される。 よってPod内のコンテナ間のデータ共有のみで使用
  • hostPath
    • データが永続化されている(Podが削除されてもデータは消されない)
    • Kubernetesが実行されているサーバーにデータが置いてある

ConfigMap

  • 機密性のないデータをキーと値のペアで保存するために使用されるAPIオブジェクト

Secret

  • Secretとは、パスワードやトークン、キーなどの少量の機密データを含むオブジェクト
  • PodがSecretを使う方法は3種類がある。
    • ボリューム内のファイルとして、Podの単一または複数のコンテナにマウントする
    • コンテナの環境変数として利用する
    • Podを生成するためにkubeletがイメージをpullするときに使用する

HorizontalPodAutoscaler

  • Deployment、ReplicaSetまたはStatefulSetといったレプリケーションコントローラ内のPodの数を、観測されたCPU使用率(もしくはベータサポートの、アプリケーションによって提供されるその他のメトリクス)に基づいて自動的にスケールさせる
  • podの負荷に応じて自動的にpodの数を増減させる

PodDisruptionBudget

  • Podの最小の有効状態や最大の無効状態の数を指定する
  • Podの管理対象はLabelSelectorで指定する
  • フィールドのメモ
    • spec.maxUnavailable : Eviction実行時にPodを無効状態にしていい最大数を指定する。絶対値か百分率で指定する。
    • spec.minAvailable : Eviction実行時にPodを有効状態にしておく最小数を指定す る。絶対値か百分率で指定する。
    • spec.selector : このBudgetを適用する対象のPodを選択するLabelSelectorを指定

CronJob

  • CronJobはJobをcronのように定期実行するためのKubernetesのWorkloadリソース
    • 時間ベースのスケジュールでJobを作成するKubernetesオブジェクト
  • concurrencyPolicy Jobの並行実行についてのポリシーを指定できる
    • Allow
      • 並行なJobの実行を許可するポリシー
    • Forbid
      • 前回のJobがまだ実行中で完了してない場合、スケジュールされたJobはスキップされる
    • Replace
      • 前回のJobがまだ実行中で完了してない場合、前回のJobをキャンセルし新しくスケジュールされるJobに置き換える

Job

  • 一つ以上のPodを作成することである特定数のPodが正常終了するまでリトライしながら処理を実行するKubernetesのWorkloadリソース
    • Podの実行が失敗したり削除された場合はJobは新たにPodを起動する
    • 平行に複数のPodを起動することも可能
    • 指定された数が正常に終了した際にJobが完了
    • Jobを削除するとそのJobによって作成されたPodも削除される

Namespace

  • 同一の物理クラスター上で複数の仮想クラスターの動作をサポートする
    • kubectl api-resources --namespaced=trueでどのリソースが適応なのか確認できる

おまけ

Manifestについて簡単なメモです。

Manifest

Podを作成するにはKubernetesのManifestファイルを作成する必要がある。

共通部分のメモ

  • apiVersion
    • apiVersion はオブジェクトのSchemaのVersionを指定する
  • kind
    • kind は作成するObject名を指定する。指定については対象のObjectのKindを参照する。
  • metadata
    • MetadataのnameでResourceの名前を指定する。
  • spec
    • オブジェクトの期待する状態を定義する
    • name はPod内でのコンテナ名を指定する。このnameはPod内でユニークである必要がある
    • image はイメージ名を指定する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?