<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on Yossy's Notes</title><link>https://yoshihiroshu.com/tags/kubernetes/</link><description>Recent content in Kubernetes on Yossy's Notes</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Wed, 18 Jan 2023 12:00:00 +0900</lastBuildDate><atom:link href="https://yoshihiroshu.com/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetesリソースメモ</title><link>https://yoshihiroshu.com/blog/kubenertes-resource/</link><pubDate>Wed, 18 Jan 2023 12:00:00 +0900</pubDate><guid>https://yoshihiroshu.com/blog/kubenertes-resource/</guid><description>&lt;div>&lt;a id="td-block-0" class="td-offset-anchor">&lt;/a>&lt;/div>
&lt;section class="row td-box td-box--white td-box--height-auto">
&lt;div class="col">
&lt;div class="container">
&lt;h2 id="背景">背景&lt;a class="td-heading-self-link" href="#%e8%83%8c%e6%99%af" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>以外と忘れがちなリソースについて、まとめました。&lt;/p>
&lt;h2 id="対象としている人">対象としている人&lt;a class="td-heading-self-link" href="#%e5%af%be%e8%b1%a1%e3%81%a8%e3%81%97%e3%81%a6%e3%81%84%e3%82%8b%e4%ba%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>Kubernetesを学習途中の人、またこれからKubernetesを学習しようとしている人&lt;/p>
&lt;h1 id="リソース">リソース&lt;a class="td-heading-self-link" href="#%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9" aria-label="Heading self-link">&lt;/a>&lt;/h1>&lt;h2 id="pod">Pod&lt;a class="td-heading-self-link" href="#pod" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>PodはKubernetesにデプロイ出来る最小単位&lt;/p>
&lt;ul>
&lt;li>コンテナやボリュームの集まり&lt;/li>
&lt;/ul>
&lt;h2 id="deployment">Deployment&lt;a class="td-heading-self-link" href="#deployment" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>新しいReplicaSetを作成したり、既存のDeploymentを削除して新しいDeploymentで全てのリソースを適用することができる&lt;/li>
&lt;/ul>
&lt;h2 id="replicaset">ReplicaSet&lt;a class="td-heading-self-link" href="#replicaset" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>どんな時でも指定された数のPodのレプリカが稼働することを保証する&lt;/li>
&lt;li>&lt;code>spec.template&lt;/code>をハッシュ値で管理しているため、ロールアップ・ダウンによる変更に即座に対応できる。&lt;/li>
&lt;/ul>
&lt;h2 id="ingress">Ingress&lt;a class="td-heading-self-link" href="#ingress" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>IngressはHTTPやHTTPSの外部アクセスを制御するオブジェクト&lt;/li>
&lt;li>Load Balancerの役割をしている。&lt;/li>
&lt;/ul>
&lt;h2 id="service">Service&lt;a class="td-heading-self-link" href="#service" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>動的にIPAddressが変更されるPodへの接続を解決してくれる抽象的なオブジェクト&lt;/li>
&lt;li>Podの集合で実行されているアプリケーションをネットワークサービスとして公開する抽象的な方法&lt;/li>
&lt;/ul>
&lt;p>役割&lt;/p>
&lt;ul>
&lt;li>Pod,Nodeの存在を抽象化し、Podとの通信に単一のエンドポイントを提供する&lt;/li>
&lt;/ul>
&lt;h2 id="volumeについて">Volumeについて&lt;a class="td-heading-self-link" href="#volume%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;p>コンテナのデータは一時的なもので、Pod/コンテナが削除されるか、コンテナがクラッシュした場合コンテナのデータは消えてしまう。
そこでVolumeを使う&lt;/p>
&lt;ul>
&lt;li>メリット
&lt;ul>
&lt;li>Volumeはデータの永続化をしてくれる。 永続化したいデータは指定したVolumeに保存することで削除やクラッシュした際でもデータが残る。&lt;/li>
&lt;li>また、Volumeは別の目的でも使用される。それはPod内でのコンテナ間のデータ共有だ。&lt;/li>
&lt;li>Pod内のコンテナはVolumeを通してデータを共有することが出来る。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="種類">種類&lt;a class="td-heading-self-link" href="#%e7%a8%ae%e9%a1%9e" aria-label="Heading self-link">&lt;/a>&lt;/h3>&lt;ul>
&lt;li>emptyDir
&lt;ul>
&lt;li>Podがノードに割り当てられたときに最初に作成され、そのPodがそのノードで実行されている限り存在する&lt;/li>
&lt;li>名前が示すようにemptyDirボリュームは最初は空&lt;/li>
&lt;li>Podが削除された際に対象のVolumeのデータも削除される。 よってPod内のコンテナ間のデータ共有のみで使用&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>hostPath
&lt;ul>
&lt;li>データが永続化されている(Podが削除されてもデータは消されない)&lt;/li>
&lt;li>Kubernetesが実行されているサーバーにデータが置いてある&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="configmap">ConfigMap&lt;a class="td-heading-self-link" href="#configmap" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>機密性のないデータをキーと値のペアで保存するために使用されるAPIオブジェクト&lt;/li>
&lt;/ul>
&lt;h2 id="secret">Secret&lt;a class="td-heading-self-link" href="#secret" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Secretとは、パスワードやトークン、キーなどの少量の機密データを含むオブジェクト&lt;/li>
&lt;li>PodがSecretを使う方法は3種類がある。
&lt;ul>
&lt;li>ボリューム内のファイルとして、Podの単一または複数のコンテナにマウントする&lt;/li>
&lt;li>コンテナの環境変数として利用する&lt;/li>
&lt;li>Podを生成するためにkubeletがイメージをpullするときに使用する&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="horizontalpodautoscaler">HorizontalPodAutoscaler&lt;a class="td-heading-self-link" href="#horizontalpodautoscaler" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Deployment、ReplicaSetまたはStatefulSetといったレプリケーションコントローラ内のPodの数を、観測されたCPU使用率（もしくはベータサポートの、アプリケーションによって提供されるその他のメトリクス）に基づいて自動的にスケールさせる&lt;/li>
&lt;li>podの負荷に応じて自動的にpodの数を増減させる&lt;/li>
&lt;/ul>
&lt;h2 id="poddisruptionbudget">PodDisruptionBudget&lt;a class="td-heading-self-link" href="#poddisruptionbudget" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>Podの最小の有効状態や最大の無効状態の数を指定する&lt;/li>
&lt;li>Podの管理対象はLabelSelectorで指定する&lt;/li>
&lt;li>フィールドのメモ
&lt;ul>
&lt;li>spec.maxUnavailable : Eviction実行時にPodを無効状態にしていい最大数を指定する。絶対値か百分率で指定する。&lt;/li>
&lt;li>spec.minAvailable : Eviction実行時にPodを有効状態にしておく最小数を指定す る。絶対値か百分率で指定する。&lt;/li>
&lt;li>spec.selector : このBudgetを適用する対象のPodを選択するLabelSelectorを指定&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="cronjob">CronJob&lt;a class="td-heading-self-link" href="#cronjob" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>CronJobはJobをcronのように定期実行するためのKubernetesのWorkloadリソース
&lt;ul>
&lt;li>時間ベースのスケジュールでJobを作成するKubernetesオブジェクト&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>concurrencyPolicy Jobの並行実行についてのポリシーを指定できる
&lt;ul>
&lt;li>Allow
&lt;ul>
&lt;li>並行なJobの実行を許可するポリシー&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Forbid
&lt;ul>
&lt;li>前回のJobがまだ実行中で完了してない場合、スケジュールされたJobはスキップされる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Replace
&lt;ul>
&lt;li>前回のJobがまだ実行中で完了してない場合、前回のJobをキャンセルし新しくスケジュールされるJobに置き換える&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="job">Job&lt;a class="td-heading-self-link" href="#job" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>一つ以上のPodを作成することである特定数のPodが正常終了するまでリトライしながら処理を実行するKubernetesのWorkloadリソース
&lt;ul>
&lt;li>Podの実行が失敗したり削除された場合はJobは新たにPodを起動する&lt;/li>
&lt;li>平行に複数のPodを起動することも可能&lt;/li>
&lt;li>指定された数が正常に終了した際にJobが完了&lt;/li>
&lt;li>Jobを削除するとそのJobによって作成されたPodも削除される&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="namespace">Namespace&lt;a class="td-heading-self-link" href="#namespace" aria-label="Heading self-link">&lt;/a>&lt;/h2>&lt;ul>
&lt;li>同一の物理クラスター上で複数の仮想クラスターの動作をサポートする
&lt;ul>
&lt;li>&lt;code>kubectl api-resources --namespaced=true&lt;/code>でどのリソースが適応なのか確認できる&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h1 id="おまけ">おまけ&lt;a class="td-heading-self-link" href="#%e3%81%8a%e3%81%be%e3%81%91" aria-label="Heading self-link">&lt;/a>&lt;/h1>&lt;p>Manifestについて簡単なメモです。&lt;/p></description></item></channel></rss>