<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Kubernetes | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/kubernetes-develop/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Thu, 08 Sep 2022 04:23:03 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Kubernetes | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>HelmとSkaffoldを使ってAPIとWebの開発環境を構築する</title>
		<link>https://mintaku-blog.net/helm-skaffold/</link>
					<comments>https://mintaku-blog.net/helm-skaffold/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 08 Sep 2022 04:11:07 +0000</pubDate>
				<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2246</guid>

					<description><![CDATA[<p>HelmとSkaffoldを使ってAPIとWebの開発環境を構築したので、メモしておきます。 Helmとは HelmとはKubernetesクラスタのための …</p>
The post <a href="https://mintaku-blog.net/helm-skaffold/">HelmとSkaffoldを使ってAPIとWebの開発環境を構築する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>HelmとSkaffoldを使ってAPIとWebの開発環境を構築したので、メモしておきます。</p>
<h2>Helmとは</h2>
<p>HelmとはKubernetesクラスタのためのパッケージマネージャーです。</p>
<p>1つのアプリケーションとしての動作を行うために必要なKubernetesの様々な種類のリソースをひとまとめにして管理する仕組みと、そのためのツールセットを提供するものです。</p>
<p>Helm の基本的な概念として以下があります。</p>
<ul>
<li>Chart：アプリケーションのインスタンスを作成するために必要な設定ファイル群</li>
<li>Config：Chartインストール時にアプリケーションのための各種パラメータを設定することができる</li>
<li>Release：Chartがインストールされ、アプリケーションが実行可能な状態</li>
</ul>
<p>HelmではChartという設定ファイル群でKubernetesの全てのマニフェストを管理します。</p>
<p>一般に公開されているChartを利用する際は、公開されているHelmリポジトリからChartを取得して、変数化されているパラメーターのみを書き換え、自身のKubernetesクラスタにデプロイします。</p>
<p>&nbsp;</p>
<h2>Skaffoldとは</h2>
<p>SkaffoldはKubernetesへの継続的な開発を容易にするコマンドラインツールです。</p>
<p>開発環境では､アプリケーションのソースコードの変更を検知してDockerコンテナをBuildし、コンテナレジストリへのPushした後、KubernetesクラスタにDeployまでを自動で行ってくれます｡</p>
<p>また、開発環境におけるログやポートフォワードの機能もあります。他にも 本番やステージング環境におけるパイプライン内でCI/CDの役割を担ってくれます。</p>
<p>&nbsp;</p>
<h2>HelmとSkaffoldで開発環境を構築する</h2>
<p>HelmとSkaffoldで開発環境を構築するにあたり、API・DB・WebそれぞれをSkaffold化しています。今回例としてOKRに関するAPIとWebを開発しています。</p>
<h3>ディレクトリ構成</h3>
<p>ディレクトリ構成は以下のようになっています。</p>
<p><img data-attachment-id="2258" data-permalink="https://mintaku-blog.net/helm-skaffold/screenshot-from-2022-08-19-21-40-33/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?fit=366%2C910&amp;ssl=1" data-orig-size="366,910" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot from 2022-08-19 21-40-33" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?fit=121%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?fit=366%2C910&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?resize=366%2C910&#038;ssl=1" alt="" width="366" height="910" class="aligncenter size-full wp-image-2258" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?w=366&amp;ssl=1 366w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-40-33.png?resize=121%2C300&amp;ssl=1 121w" sizes="(max-width: 366px) 100vw, 366px" data-recalc-dims="1" /></p>
<h2>APIをSkaffold化する</h2>
<p>今回の例であるokr-apiをSkaffold化します。</p>
<p>まずはHelmのChartをSkaffoldに対応させるため、Chart.ymlとvalues.ymlを作成します。</p>
<h3>Chart.yaml</h3>
<p>Chart.yamlではChartの名前や説明などの情報をYAML形式で記述します。</p>
<p>・Chart.yaml</p><pre class="crayon-plain-tag">name: okr-api
version: 1.0.0</pre><p></p>
<h3>values.yaml</h3>
<p>values.yamlでは、パラメータおよびそのデフォルト値の組み合わせを記述します。</p>
<p>ここで指定されたパラメータをtemplatesディレクトリ内に格納されているテンプレートに与えてKubernetesのマニフェストファイルを作成します。</p>
<p>・values.yml</p><pre class="crayon-plain-tag">revision: latest
replicas: 1
imagePullPolicy: IfNotPresent</pre><p>&nbsp;</p>
<h3>templates</h3>
<p>templatesはマニフェストファイルのTemplateが格納されているディレクトリです。</p>
<p>Chartを構成するKubernetesマニフェストはTemplateと呼ばれるファイルによって生成されます。</p>
<p>Templateはマニフェストファイルのテンプレートに変数を埋め込んだり、環境に応じて変更される部分を抽象化することができます。</p>
<p>今回は、DeploymentとServiceをこのtemplates配下において抽象化しています。</p>
<p>・templates/deployment.yaml</p><pre class="crayon-plain-tag">apiVersion: apps/v1
kind: Deployment
metadata:
  name: okr-api
spec:
  selector:
    matchLabels:
      app: okr-api
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels:
        app: okr-api
    spec:
      containers:
      - name: okr-api
        image: {{ .Values.image }}
        imagePullPolicy: {{ .Values.imagePullPolicy }}
        resources:
        env:
          - name: SPRING_DATASOURCE_URL
            value: jdbc:mysql://okr-db-service:3306/okr?autoReconnect=true&amp;useSSL=false
        ports:
        - containerPort: 8080</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<p>・templates/service.yaml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Service
metadata:
  name: okr-api-service
spec:
  type: NodePort
  ports:
  - name: okr-api-service
    port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    app: okr-api</pre><p>&nbsp;</p>
<h3>skaffold.yaml</h3>
<p>skaffold.yamlを作成して記述していきます。</p>
<p>・skaffold.yaml</p><pre class="crayon-plain-tag">apiVersion: skaffold/v2beta17
kind: Config
metadata:
  name: okr-api
build:
  artifacts:
    - image: okr-api
      context: ../../../okr-api
      docker:
        dockerfile: ../environments/okr-api/api/docker/Dockerfile
  local:
    push: false
    useBuildkit: true
deploy:
  helm:
    releases:
      - name: okr-api
        chartPath: ./helm/deployment
        artifactOverrides:
          image: okr-api</pre><p>中身の詳細は以下の通りです。</p>
<h4>apiVersion</h4>
<p>使用するskaffoldのバージョンを指定</p>
<h4>kind</h4>
<p>Configを指定</p>
<h4>metadata</h4>
<p>Configに関する追加情報。プロジェクトの識別子</p>
<h4>build</h4>
<p>ビルドしたいDocker Imageを指定</p>
<p>pushはビルドを行い、Docker Hubのリポジトリにプッシュするかを指定します。</p>
<p>useBuildKitはBuildKitを使用してDockerイメージをビルドするかどうか(無指定の場合はDockerのデフォルトを使用)</p>
<p>BuildKitは高速でのビルドが可能になるdockerのイメージビルダーです。ビルド短縮のためにもtrueにします。</p>
<h4>deploy</h4>
<p>デプロイしたい yaml が保存されている場所を指定</p>
<h3>ローカルでAPI開発する時</h3>
<p>APIを開発する際はDBのみKubernetes上で起動し、APIはローカルのサーバで起動しています。</p>
<p>以下のYAMLファイルを作成しskaffold devすることで、DBの起動とローカルへのポートフォワーディングをしています。</p>
<p>・environments/okr-api/deps.yaml</p><pre class="crayon-plain-tag">apiVersion: skaffold/v2beta24
kind: Config
requires:
  - path: ./db/skaffold.yaml
</pre><p>&nbsp;</p>
<p><img data-attachment-id="2259" data-permalink="https://mintaku-blog.net/helm-skaffold/screenshot-from-2022-08-19-21-59-23/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?fit=1182%2C519&amp;ssl=1" data-orig-size="1182,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot from 2022-08-19 21-59-23" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?fit=300%2C132&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?fit=800%2C352&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?resize=800%2C352&#038;ssl=1" alt="" width="800" height="352" class="aligncenter size-large wp-image-2259" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?resize=1024%2C450&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?resize=300%2C132&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?resize=768%2C337&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-21-59-23.png?w=1182&amp;ssl=1 1182w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h3>ローカルでWeb開発するとき</h3>
<p>Webを開発する際は、APIとDBをKubernetes上で起動し、Webをローカルで起動しています。</p>
<p>以下のYAMLファイルを作成し、APIとDBのskaffold.yamlを起動しています。</p>
<p>・environments/okr-web/deps.yaml</p><pre class="crayon-plain-tag">apiVersion: skaffold/v2beta24
kind: Config
requires:
  - path: ../okr-api/db/skaffold.yaml
  - path: ../okr-api/api/skaffold.yaml</pre><p>&nbsp;</p>
<p><img data-attachment-id="2260" data-permalink="https://mintaku-blog.net/helm-skaffold/screenshot-from-2022-08-19-22-00-56/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?fit=925%2C647&amp;ssl=1" data-orig-size="925,647" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot from 2022-08-19 22-00-56" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?fit=300%2C210&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?fit=800%2C560&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?resize=800%2C560&#038;ssl=1" alt="" width="800" height="560" class="aligncenter size-full wp-image-2260" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?w=925&amp;ssl=1 925w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?resize=300%2C210&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/08/Screenshot-from-2022-08-19-22-00-56.png?resize=768%2C537&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h3>全体E2Eを流すとき</h3>
<p>全体E2Eを流す用にAPI・DB・WEBをローカルで起動するようなYAMLファイルを作成しています。</p>
<p>・environments/okr-web/all.yaml</p><pre class="crayon-plain-tag">apiVersion: skaffold/v2beta24
kind: Config
requires:
  - path: ./deps.yaml
  - path: ./app/skaffold.yaml</pre><p>&nbsp;</p>
<p><img data-attachment-id="2268" data-permalink="https://mintaku-blog.net/helm-skaffold/screenshot-from-2022-09-08-13-18-59/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?fit=675%2C687&amp;ssl=1" data-orig-size="675,687" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screenshot from 2022-09-08 13-18-59" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?fit=295%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?fit=675%2C687&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?resize=675%2C687&#038;ssl=1" alt="" width="675" height="687" class="aligncenter size-full wp-image-2268" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?w=675&amp;ssl=1 675w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/09/Screenshot-from-2022-09-08-13-18-59.png?resize=295%2C300&amp;ssl=1 295w" sizes="(max-width: 675px) 100vw, 675px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>参考情報</h2>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://skaffold.dev/docs/references/yaml/">skaffold.yaml | Skaffold</a>
			</p>
							<div class="ys-blog-card__dscr">
					<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tip The Cloud Code IDE extensions (see&hellip;				</div>
										<div class="ys-blog-card__domain">skaffold.dev</div>
					</div>
	</div>
</div>


<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://knowledge.sakura.ad.jp/23603/#3_templatesdeploymentyamlPodspectemplatespeccontainersargsspectemplatespeccontainerslivenessProbespectemplatespeccontainersreadinessProbe">事実上の標準ツールとなっているKubernetes向けデプロイツール「Helm」入門  |  さくらのナレッジ</a>
			</p>
										<div class="ys-blog-card__domain">knowledge.sakura.ad.jp</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/helm-skaffold/">HelmとSkaffoldを使ってAPIとWebの開発環境を構築する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/helm-skaffold/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2246</post-id>	</item>
		<item>
		<title>Kubernetesのクラスタやリソースを整理する</title>
		<link>https://mintaku-blog.net/kubernetes-cluster/</link>
					<comments>https://mintaku-blog.net/kubernetes-cluster/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 07 Aug 2022 11:10:36 +0000</pubDate>
				<category><![CDATA[まとめ系]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2236</guid>

					<description><![CDATA[<p>業務で普段使っているKubernetesにおけるクラスタやリソースについて改めて調べ整理することで、イメージと理解をより深めることを目的に書いています。 ク …</p>
The post <a href="https://mintaku-blog.net/kubernetes-cluster/">Kubernetesのクラスタやリソースを整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>業務で普段使っているKubernetesにおけるクラスタやリソースについて改めて調べ整理することで、イメージと理解をより深めることを目的に書いています。</p>
<h2>クラスタ(Cluster)</h2>
<p><img data-attachment-id="2238" data-permalink="https://mintaku-blog.net/kubernetes-cluster/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2022-07-16-12-58-30/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?fit=1310%2C614&amp;ssl=1" data-orig-size="1310,614" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2022-07-16 12.58.30" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?fit=300%2C141&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?fit=800%2C375&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?resize=800%2C375&#038;ssl=1" alt="" width="800" height="375" class="aligncenter size-large wp-image-2238" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?resize=1024%2C480&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?resize=300%2C141&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?resize=768%2C360&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/796cc7a9ac0072075631b382790ae140.jpg?w=1310&amp;ssl=1 1310w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>クラスタは、コンテナ化されたアプリケーションを実行するためのノードマシンの集合です。クラスタには少なくとも、1 つのコントロールプレーン(マスターノードとも呼ばれている？)と、1 つ以上のノードと呼ばれるコンピューティングマシンが含まれます。</p>
<ul>
<li>コントロールプレーン：どのアプリケーションが実行されているかといった、クラスタの望ましい状態を維持</li>
<li>ノード：実際にアプリケーションとワークロードを実行</li>
</ul>
<p>以下のコマンドで、configの設定で指定されている接続先クラスター情報を確認できます。</p><pre class="crayon-plain-tag">$ kubectl config get-clusters

NAME
docker-desktop</pre><p>&nbsp;</p>
<h2>コンテキスト(Context)</h2>
<p>コンテキストはクラスタとユーザの組み合わせです。同一クラスタでも接続ユーザが異なれば、別のコンテキストとして扱われます。</p>
<p>以下のコマンドでコンテキストを取得できます。同じクラスタでもコンテキストが違っています。</p><pre class="crayon-plain-tag">$ kubectl config get-contexts

CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* docker-desktop docker-desktop docker-desktop
docker-desktop-2 docker-desktop docker-desktop</pre><p>&nbsp;</p>
<h2>名前空間(Namespace)</h2>
<p>名前空間とは、クラスタの分離機能のことで、複数のチームやユーザーでクラスターリソースを分割することができます。</p>
<p>名前空間を使うことで、Kubernetes内の環境に名前を付けて利用することができます。他の環境と分離させることができ、ユーザーによって権限を変えることも可能です。</p><pre class="crayon-plain-tag">$ kubectl get namespace

NAME STATUS AGE
default Active xxd
kube-node-lease Active xxd
kube-public Active xxd
kube-system Active xxd
sample Active xxd</pre><p>&nbsp;</p>
<h2>Pod</h2>
<p>Podは、1つまたは複数のコンテナのグループです。ストレージやネットワークの共有リソースを持ち、コンテナの実行方法に関する仕様を持っています。</p>
<p>Podとは、Kubernetesで実行できるアプリケーションの最小単位です。</p><pre class="crayon-plain-tag">$ kubectl get pod

NAME READY STATUS RESTARTS AGE
sample-78d9c99bd4-kdbwx 1/1 Running 0 xxd
sample-78d9c99bd4-m7mk2 1/1 Running 0 xxd</pre><p>&nbsp;</p>
<h2>Service</h2>
<p>Serviceとは、Podとの通信を容易に行うためにエンドポイントの提供を行ってくれる機能です。</p>
<p>通常、NodeのIPアドレスは一定ではないため、通信するにはその都度IPアドレスを指定する必要があります。</p>
<p>Serviceという機能があることで、通信するためのDNSラベルが発行され、アプリケーションが他のPodとの通信が簡単にできるようになります。</p><pre class="crayon-plain-tag">$ kubectl get service

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample-service NodePort 10.102.100.87 &lt;none&gt; 80:31512/TCP xxd</pre><p>&nbsp;</p>
<h2>Deployment</h2>
<p>DeploymentはPodやReplicaSetの宣言的なアップデート機能を提供します。</p>
<p>Kubernetesでは、Podを単独で起動することはほとんどなく、大抵の場合は、ReplicaSetやJobなどの管理用オブジェクトを通してPodを利用します。</p>
<p>ReplicaSetは、複数のPodのレプリカをセットで作成する機能で、DeploymentはさらにそのReplicaSetを管理します。</p>
<h3>ローリングアップデート</h3>
<p><img data-attachment-id="2237" data-permalink="https://mintaku-blog.net/kubernetes-cluster/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2022-07-16-12-43-03/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?fit=934%2C666&amp;ssl=1" data-orig-size="934,666" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2022-07-16 12.43.03" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?fit=300%2C214&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?fit=800%2C570&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?resize=800%2C570&#038;ssl=1" alt="" width="800" height="570" class="aligncenter size-full wp-image-2237" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?w=934&amp;ssl=1 934w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?resize=300%2C214&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/07/0f3d7403024c66382a3b042485d97b68.jpg?resize=768%2C548&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>Deploymentは、作成したPodの仕様が変更されると、自動的にReplicaSetを再作成します。</p>
<p>Deploymentのアップデート方法は、デフォルトでローリングアップデートとなっており、新しいReplicaSetを生成し、順に古いPodを新しいPodに入れ替えていきます。</p>
<p>そのため、ダウンタイムが発生しないというメリットがある代わりに、切り替えに多少時間がかかるというデメリットがあります。</p>
<p>上の図の例だと、下の新しいReplica Setが作成され、上の古いReplica Setで作成されたPodが、新しいReplica Setで作成されたPodに徐々に切り替わっていく感じです。</p><pre class="crayon-plain-tag">$ kubectl get deployment

NAME READY UP-TO-DATE AVAILABLE AGE
sample 2/2 2 2 xxd</pre><p>&nbsp;</p>
<h2>参考記事</h2>
<p><a href="https://kubernetes.io/ja/docs/concepts/overview/components/" target="_blank" rel="noopener">https://kubernetes.io/ja/docs/concepts/overview/components/</a></p>
<p><a href="https://udemy.benesse.co.jp/development/system/kubernetes.html" target="_blank" rel="noopener">https://udemy.benesse.co.jp/development/system/kubernetes.html</a></p>
<p><a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/" target="_blank" rel="noopener">https://kubernetes.io/ja/docs/concepts/workloads/pods/</a></p>The post <a href="https://mintaku-blog.net/kubernetes-cluster/">Kubernetesのクラスタやリソースを整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/kubernetes-cluster/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2236</post-id>	</item>
		<item>
		<title>Kubernetesの構成や挙動を整理する</title>
		<link>https://mintaku-blog.net/about-kubernetes/</link>
					<comments>https://mintaku-blog.net/about-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 28 Nov 2021 13:47:08 +0000</pubDate>
				<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2088</guid>

					<description><![CDATA[<p>Kubernetesについて理解を深めるため、を実際に動かしてみてその構成や挙動を整理してみました。 Kubernetesとは Kubernetesとは、宣 …</p>
The post <a href="https://mintaku-blog.net/about-kubernetes/">Kubernetesの構成や挙動を整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Kubernetesについて理解を深めるため、を実際に動かしてみてその構成や挙動を整理してみました。</p>
<h2>Kubernetesとは</h2>
<p>Kubernetesとは、宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースのプラットフォームです。</p>
<p>参考：https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/</p>
<p>Composeのように単一のDockerホスト上でコンテナ群を動かすのではなく、冗長性を得るため複数のホストを束ねてクラスタを構築し、その上で冗長化されたコンテナを動かします。</p>
<p>このようにKubernetesの登場により、複数のDockerなどのコンテナの管理や自動化が進み、この仕組みは「コンテナオーケストレーション」と呼ばれています。</p>
<h3>サッカーの例えがわかりやすい</h3>
<p>といってもなかなかイメージがつかないところ、Docker/Kubernetes超入門という本でKubernetsをサッカーで例えており、わかりやすくイメージしやすくなりました。</p>
<p>サッカーで例えるとコンテナが選手だとすると、Kubernetesは監督にあたります。グラウンドの正しい位置に選手(コンテナ)を配置し、チーム(アプリ)として連携を取れる形を作ります。</p>
<p>それだけでなく、怪我した選手(調子の悪いコンテナ)の交代や選手(コンテナ)をを減らしたり増やしたり(これはサッカーのルールから外れるが。。)などの仕事をします。</p>
<p>エンジニアはチームオーナーとして監督(Kubernetes)に「こういう方針でいきます」と頼んでおけばあとは任せておけるといった感じです。</p>
<p>&nbsp;</p>
<h2>Kubernetesの構成</h2>
<p><img data-attachment-id="2090" data-permalink="https://mintaku-blog.net/about-kubernetes/image2-11/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=1864%2C929&amp;ssl=1" data-orig-size="1864,929" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=300%2C150&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?fit=800%2C398&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469-1024x510.jpg?resize=800%2C398&#038;ssl=1" alt="" width="800" height="398" class="aligncenter wp-image-2090 size-large" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=1024%2C510&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=300%2C150&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=768%2C383&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?resize=1536%2C766&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?w=1864&amp;ssl=1 1864w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2-e1636891963469.jpg?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>参考：Docker/Kubernetes超入門</p>
<p>Kubernetesの構成は主に図の左側のコントロールプレーンと右側のデータプレーンにわかれます。大まかな担当は左側のマスターノードが頭脳として使われ、右側のワーカーノードは処理する肉体として使われます。</p>
<p>また、Kubernetesでシステムを構築する場合は、Kubernetes上だけで構築するのではなく右の図にある仮想マシンやクラウドが提供するマネージドサービスなども併用して開発するのが一般的です。</p>
<p>サービスやポッドのところは実際に動かしながら理解を深めていきます。</p>
<p>&nbsp;</p>
<h2>実際に触ってみる</h2>
<p>というわけで実際にKubernetesを触っていきます。Docker Desktopが既にインストールされていれば環境設定から「Enable Kubernetes」にチェックを入れて有効化するだけで使えます。</p>
<h3>マニフェストファイルを使ってNginxを動かす</h3>
<p><img data-attachment-id="2089" data-permalink="https://mintaku-blog.net/about-kubernetes/image3-8/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=1964%2C964&amp;ssl=1" data-orig-size="1964,964" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=300%2C147&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?fit=800%2C393&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291-1024x503.jpg?resize=800%2C393&#038;ssl=1" alt="" width="800" height="393" class="aligncenter size-large wp-image-2089" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=1024%2C503&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=300%2C147&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=768%2C377&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?resize=1536%2C754&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?w=1964&amp;ssl=1 1964w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3-e1636892029291.jpg?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>Kubernetesのアプリ展開はマニフェストファイルと呼ばれる構成ファイルで行われるのが一般的です。今回はDocker/Kubernetes超入門の本を参考にポッドのマニフェストとそれを外部に公開するサービスのマニフェストを使ってNginxを展開します。</p>
<p>マニフェストファイルはYAML形式で記述します。それぞれの意味は以下のようになっています。</p>
<ul>
<li>apiVersion: マニフェストのバージョン</li>
<li>kind: リソースの種類</li>
<li>metadata: リソース名などのメタデータ</li>
<li>spec: リソースの詳細</li>
</ul>
<p>・pod.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Pod
metadata:
  name: web-pod
  labels: 
    svc2pod: web
spec:
  containers:
  - name: nginx
    image: nginx:1.17.6-alpine
    ports:
    - name: http
      containerPort: 80</pre><p>サービスのマニフェストも上の部分はポッドと同じですが、重要なのはspecの下にある「selector」で、これを使ってサービスが接続するポッドを指定します。</p>
<p>先程ポッドのマニフェストで定義した「svc2pod: web」を指定し、このサービスの接続先を定義します。</p>
<p>selectorの下の「ports」は外部に公開するポートと接続先のポートを指定しています。portがKubernetes内部から接続で利用するポートでnodePortがホスト外から接続で利用するポートです。</p>
<p>・service.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    svc2pod: web
  ports:
  - port: 80
    targetPort: http
    nodePort: 30000
  type: NodePort</pre><p>&nbsp;</p>
<h3>リソースを展開する</h3>
<p>作成したマニフェストファイルを元にリソースを展開していきます。展開コマンドでは「kubectl apply -f」コマンドを使うのが一般的です</p><pre class="crayon-plain-tag">$ kubectl apply -f pod.yml
pod/web-pod created

$ kubectl apply -f service.yml
service/web-service created</pre><p>&nbsp;</p>
<p>サービスリソースを確認するとweb-serviceが立ち上がっていることが確認できます。</p><pre class="crayon-plain-tag">$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-service NodePort 10.99.80.170 &lt;none&gt; 80:30000/TCP 67s</pre><p>&nbsp;</p>
<p><img data-attachment-id="2091" data-permalink="https://mintaku-blog.net/about-kubernetes/image1-14/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=1230%2C490&amp;ssl=1" data-orig-size="1230,490" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=300%2C120&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?fit=800%2C319&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=800%2C319&#038;ssl=1" alt="" width="800" height="319" class="aligncenter size-large wp-image-2091" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=1024%2C408&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=300%2C120&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?resize=768%2C306&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1-1.png?w=1230&amp;ssl=1 1230w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>nodePortで指定したポートを指定し、http://127.0.0.1:30000/にアクセスするとNginxのページを見ることができます。</p>
<p>&nbsp;</p>
<h2>デプロイメントを試してみる</h2>
<p>実際の運用ではポッドを機能拡張したデプロイメントというリソースを使うことが一般的なようなため、実際に動かして試してみます。</p>
<p>デプロイメントは内部に下位リソースとしてレプリカセットというリソースを持ち、それが水平スケールや自動復旧機能を担当します。デプロイメントの主要機能としては、ポッドのアップグレードで、バージョンアップなど発生した際に古いポッドを入れ替えてくれます。</p>
<p>Docker/Kubernetes超入門の本を参考に動かしてみます。</p>
<p>spec.replicasフィールドで指定された通り、5つのレプリカPodを作成します。</p>
<p>spec.strategy.rollingUpdateフィールドでPodの数を指定した個数ずつ増減させてアップデートしていきます。</p>
<p>spec.strategy.typeにRollingUpdateと指定し、spec.strategy.rollingUpdateにmaxSurgeとmaxUnavailableを指定します。</p>
<ul>
<li>maxSurge: replicasで指定した数よりも増やしていい最大Pod数(デフォルト値25%・絶対値 or %を設定)</li>
<li>maxUnavailable: replicasで指定した数よりも減らしていい最大Pod数(デフォルト値25%・絶対値 or %を設定)</li>
</ul>
<p>&nbsp;</p>
<p>・db.yml</p><pre class="crayon-plain-tag">apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  selector:
    pod: db
  ports:
  - port: 6379
    targetPort: redis
  type: ClusterIP

---
apiVersion: v1
kind: Pod
metadata:
  name: db
  labels: 
    pod: db
spec:
  containers:
  - name: db
    image: redis:5.0.6-alpine3.10
    ports:
    - name: redis
      containerPort: 6379</pre><p>&nbsp;</p>
<p>・app.yml</p><pre class="crayon-plain-tag">apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 5
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 0%
  selector:
    matchLabels:
      pod: app
  template:
    metadata:
      name: app
      labels: 
        pod: app
    spec:
      containers:
      - name: app
        image: sample/app
        ports:
        - name: http
          containerPort: 80
        env:
        - name: REDIS_HOST
          value: db

---
apiVersion: v1
kind: Service
metadata:
  name: app
spec:
  selector:
    pod: app
  ports:
  - port: 8080
    targetPort: http
    nodePort: 30000
  type: NodePort</pre><p>&nbsp;</p>
<p>kubectl applyで展開し、ポッドを確認すると5つ起動していることが確認できます。</p><pre class="crayon-plain-tag">$ kubectl apply -f app.yml -f db.yml 
deployment.apps/app created
service/app created
service/db created
pod/db created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
app-975c58898-7rzxk 1/1 Running 0 6m18s
app-975c58898-clwxx 1/1 Running 0 6m18s
app-975c58898-lqfdl 1/1 Running 0 6m18s
app-975c58898-r64gw 1/1 Running 0 6m18s
app-975c58898-s6jl4 1/1 Running 0 6m18s
db 1/1 Running 0 12m

$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
app-975c58898 5 5 5 6m</pre><p>&nbsp;</p>
<p>デプロイメントの詳細情報は以下のコマンドで取得できます。</p><pre class="crayon-plain-tag">$ kubectl describe deployment app
Name:                   app
Namespace:              default
CreationTimestamp:      Sun, 14 Nov 2021 07:15:16 +0900
Labels:                 &lt;none&gt;
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               pod=app
Replicas:               5 desired | 5 updated | 5 total | 5 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  0% max unavailable, 50% max surge
Pod Template:
  Labels:  pod=app
  Containers:
   app:
    Image:      sample/app
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:
      REDIS_HOST:  db
    Mounts:        &lt;none&gt;
  Volumes:         &lt;none&gt;
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  &lt;none&gt;
NewReplicaSet:   app-975c58898 (5/5 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set app-975c58898 to 5</pre><p>&nbsp;</p>The post <a href="https://mintaku-blog.net/about-kubernetes/">Kubernetesの構成や挙動を整理する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/about-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2088</post-id>	</item>
	</channel>
</rss>
