<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubernetes Blog</title>
    <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/</link>
    <description>The Kubernetes blog is used by the project to communicate new features, community reports, and any news that might be relevant to the Kubernetes community.</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <image>
      <url>https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png</url>
      <title>The Kubernetes project logo</title>
      <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/</link>
    </image>
    
    <atom:link href="https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/feed.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>フォレンジックコンテナ分析</title>
      <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2023/03/10/forensic-container-analysis/</link>
      <pubDate>Fri, 10 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2023/03/10/forensic-container-analysis/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt; Adrian Reber (Red Hat)&lt;/p&gt;
&lt;p&gt;前回投稿した&lt;a href=&#34;https://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/&#34;&gt;Kubernetesにおけるフォレンジックコンテナチェックポイント処理&lt;/a&gt;では、Kubernetesでのチェックポイントの作成や、それがどのようにセットアップされ、どのように使用されるのかを紹介しました。
機能の名前はフォレンジックコンテナチェックポイントですが、Kubernetesによって作成されたチェックポイントの実際の分析方法については、詳細を説明しませんでした。
この記事では、チェックポイントがどのように分析されるのかについての詳細を提供します。&lt;/p&gt;
&lt;p&gt;チェックポイントの作成はまだKubernetesでalpha機能であり、この記事ではその機能が将来どのように動作するのかについてのプレビューを提供します。&lt;/p&gt;
&lt;h2 id=&#34;準備&#34;&gt;準備&lt;/h2&gt;
&lt;p&gt;チェックポイント作成のサポートを有効にするためのKubernetesの設定方法や、基盤となるCRI実装方法についての詳細は&lt;a href=&#34;https://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/&#34;&gt;Kubernetesにおけるフォレンジックコンテナチェックポイント処理&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;一例として、この記事内でチェックポイントを作成し分析するコンテナイメージ(&lt;code&gt;quay.io/adrianreber/counter:blog&lt;/code&gt;)を準備しました。
このコンテナはコンテナ内でファイルを作成することができ、後でチェックポイント内で探したい情報をメモリーに格納しておくこともできます。&lt;/p&gt;
&lt;p&gt;コンテナを実行するためにはPodが必要であり、この例では下記のPodマニフェストを使用します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Pod&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;metadata&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;counters&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;spec&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;containers&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;counter&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;image&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;quay.io/adrianreber/counter:blog&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この結果、&lt;code&gt;counter&lt;/code&gt;と呼ばれるコンテナが&lt;code&gt;counters&lt;/code&gt;と呼ばれるPod内で実行されます。&lt;/p&gt;
&lt;p&gt;一度コンテナが実行されると、コンテナで下記アクションが行えます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; kubectl get pod counters --template &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;{{.status.podIP}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;10.88.0.25
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; curl 10.88.0.25:8088/create?test-file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; curl 10.88.0.25:8088/secret?RANDOM_1432_KEY
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; curl 10.88.0.25:8088
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最初のアクセスはコンテナ内で&lt;code&gt;test-file&lt;/code&gt;という内容で&lt;code&gt;test-file&lt;/code&gt;と呼ばれるファイルを作成します。
次のアクセスで、コンテナのメモリー内のどこかにシークレット情報(&lt;code&gt;RANDOM_1432_KEY&lt;/code&gt;)を記憶します。
最後のアクセスは内部のログファイルに1行追加するだけです。&lt;/p&gt;
&lt;p&gt;チェックポイントを分析する前の最後のステップは、チェックポイントを作成することをKubernetesに指示することです。
前回の記事で説明したように、これには&lt;em&gt;kubelet&lt;/em&gt;限定の&lt;code&gt;チェックポイント&lt;/code&gt;APIエンドポイントへのアクセスを必要とします。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;default&lt;/em&gt;名前空間内の&lt;em&gt;counters&lt;/em&gt;という名前のPod内の&lt;em&gt;counter&lt;/em&gt;という名前のコンテナに対して、&lt;em&gt;kubelet&lt;/em&gt; APIエンドポイントが次の場所で到達可能です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Podが実行されているNode上で実行する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;https://localhost:10250/checkpoint/default/counters/counter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;厳密には、&lt;em&gt;kubelet&lt;/em&gt;の自己署名証明書を許容し&lt;em&gt;kubelet&lt;/em&gt; &lt;code&gt;チェックポイント&lt;/code&gt;APIの使用を認可するために、下記の&lt;code&gt;curl&lt;/code&gt;コマンドのオプションが必要です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--insecure --cert /var/run/kubernetes/client-admin.crt --key /var/run/kubernetes/client-admin.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;チェックポイントの作成が終了すると、&lt;code&gt;/var/lib/kubelet/checkpoints/checkpoint-&amp;lt;pod-name&amp;gt;_&amp;lt;namespace-name&amp;gt;-&amp;lt;container-name&amp;gt;-&amp;lt;timestamp&amp;gt;.tar&lt;/code&gt;でチェックポイントが利用可能になります。&lt;/p&gt;
&lt;p&gt;この記事の後述のステップでは、チェックポイントアーカイブを分析する際に&lt;code&gt;checkpoint.tar&lt;/code&gt;という名前を使用します。&lt;/p&gt;
&lt;h2 id=&#34;checkpointctl-を使用したチェックポイントアーカイブの分析&#34;&gt;&lt;code&gt;checkpointctl&lt;/code&gt;を使用したチェックポイントアーカイブの分析&lt;/h2&gt;
&lt;p&gt;チェックポイントが作成したコンテナに関するいくつかの初期情報を得るためには、このように&lt;a href=&#34;https://github.com/checkpoint-restore/checkpointctl&#34;&gt;checkpointctl&lt;/a&gt;を使用します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; checkpointctl show checkpoint.tar --print-stats
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;| CONTAINER |              IMAGE               |      ID      | RUNTIME |       CREATED       | ENGINE |     IP     | CHKPT SIZE | ROOT FS DIFF SIZE |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;| counter   | quay.io/adrianreber/counter:blog | 059a219a22e5 | runc    | 2023-03-02T06:06:49 | CRI-O  | 10.88.0.23 | 8.6 MiB    | 3.0 KiB           |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;CRIU dump statistics
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+---------------+-------------+--------------+---------------+---------------+---------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;| FREEZING TIME | FROZEN TIME | MEMDUMP TIME | MEMWRITE TIME | PAGES SCANNED | PAGES WRITTEN |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+---------------+-------------+--------------+---------------+---------------+---------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;| 100809 us     | 119627 us   | 11602 us     | 7379 us       |          7800 |          2198 |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;+---------------+-------------+--------------+---------------+---------------+---------------+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これによって、チェックポイントアーカイブ内のチェックポイントについてのいくつかの情報が、すでに取得できています。
コンテナの名前やコンテナランタイムやコンテナエンジンについての情報を見ることができます。
チェックポイントのサイズ(&lt;code&gt;CHKPT SIZE&lt;/code&gt;)もリスト化されます。
これは大部分がチェックポイントに含まれるメモリーページのサイズですが、コンテナ内の全ての変更されたファイルのサイズ(&lt;code&gt;ROOT FS DIFF SIZE&lt;/code&gt;)についての情報もあります。&lt;/p&gt;
&lt;p&gt;追加のパラメーター&lt;code&gt;--print-stats&lt;/code&gt;はチェックポイントアーカイブ内の情報を復号化し、2番目のテーブル(&lt;em&gt;CRIU dump statistics&lt;/em&gt;)で表示します。
この情報はチェックポイント作成中に収集され、CRIUがコンテナ内のプロセスをチェックポイントするために必要な時間と、チェックポイント作成中に分析され書き込まれたメモリーページ数の概要を示します。&lt;/p&gt;
&lt;h2 id=&#34;より深く掘り下げる&#34;&gt;より深く掘り下げる&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;checkpointctl&lt;/code&gt;の助けを借りて、チェックポイントアーカイブについてのハイレベルな情報を得ることができます。
チェックポイントアーカイブをさらに分析するには、それを展開する必要があります。
チェックポイントアーカイブは&lt;em&gt;tar&lt;/em&gt;アーカイブであり、&lt;code&gt;tar xf checkpoint.tar&lt;/code&gt;の助けを借りて展開可能です。&lt;/p&gt;
&lt;p&gt;チェックポイントアーカイブを展開すると、下記のファイルやディレクトリが作成されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bind.mounts&lt;/code&gt; - このファイルにはバインドマウントについての情報が含まれており、復元中に全ての外部ファイルとディレクトリを正しい場所にマウントするために必要になります。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;checkpoint/&lt;/code&gt; - このディレクトリにはCRIUによって作成された実際のチェックポイントが含まれています。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.dump&lt;/code&gt;と&lt;code&gt;spec.dump&lt;/code&gt; - これらのファイルには、復元中に必要とされるコンテナについてのメタデータが含まれています。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dump.log&lt;/code&gt; - このファイルにはチェックポイント作成中に作成されたCRIUのデバッグ出力が含まれています。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stats-dump&lt;/code&gt; - このファイルには、&lt;code&gt;checkpointctl&lt;/code&gt;が&lt;code&gt;--print-stats&lt;/code&gt;でダンプ統計情報を表示するために使用するデータが含まれています。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rootfs-diff.tar&lt;/code&gt; - このファイルには、コンテナのファイルシステム上で変更された全てのファイルが含まれています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ファイルシステムの変更-rootfs-diff-tar&#34;&gt;ファイルシステムの変更 - &lt;code&gt;rootfs-diff.tar&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;コンテナのチェックポイントをさらに分析するための最初のステップは、コンテナ内で変更されたファイルを見ることです。
これは&lt;code&gt;rootfs-diff.tar&lt;/code&gt;ファイルを参照することで行えます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; tar xvf rootfs-diff.tar
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;home/counter/logfile
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;home/counter/test-file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでコンテナ内で変更されたファイルを調べられます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; cat home/counter/logfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;10.88.0.1 - - [02/Mar/2023 06:07:29] &amp;#34;GET /create?test-file HTTP/1.1&amp;#34; 200 -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;10.88.0.1 - - [02/Mar/2023 06:07:40] &amp;#34;GET /secret?RANDOM_1432_KEY HTTP/1.1&amp;#34; 200 -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;10.88.0.1 - - [02/Mar/2023 06:07:43] &amp;#34;GET / HTTP/1.1&amp;#34; 200 -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; cat home/counter/test-file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;test-file 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコンテナのベースになっているコンテナイメージ(&lt;code&gt;quay.io/adrianreber/counter:blog&lt;/code&gt;)と比較すると、コンテナが提供するサービスへの全てのアクセス情報を含んだ&lt;code&gt;logfile&lt;/code&gt;や予想通り作成された&lt;code&gt;test-file&lt;/code&gt;ファイルを確認することができます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rootfs-diff.tar&lt;/code&gt;の助けを借りることで、作成または変更された全てのファイルを、コンテナのベースイメージと比較して検査することが可能です。&lt;/p&gt;
&lt;h3 id=&#34;チェックポイント処理したプロセスを分析する-checkpoint&#34;&gt;チェックポイント処理したプロセスを分析する - &lt;code&gt;checkpoint/&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;ディレクトリ&lt;code&gt;checkpoint/&lt;/code&gt;はコンテナ内でプロセスをチェックポイントしている間にCRIUによって作成されたデータを含んでいます。
ディレクトリ&lt;code&gt;checkpoint/&lt;/code&gt;の内容は、CRIUの一部として配布されている&lt;a href=&#34;https://criu.org/CRIT&#34;&gt;CRIT&lt;/a&gt;ツールを使用して分析できるさまざまな&lt;a href=&#34;https://criu.org/Images&#34;&gt;イメージファイル&lt;/a&gt;で構成されています。&lt;/p&gt;
&lt;p&gt;まず、コンテナの内部プロセスの概要を取得してみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crit show checkpoint/pstree.img | jq .entries&lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;.pid
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この出力はコンテナのPID名前空間の内部に3つのプロセス(PIDが1と7と8)があることを意味しています。&lt;/p&gt;
&lt;p&gt;これはコンテナのPID名前空間の内部からの視界を表示しているだけです。
復元中に正確にそれらのPIDが再作成されます。
コンテナのPID名前空間の外部からPIDは復元後に変更されます。&lt;/p&gt;
&lt;p&gt;次のステップは、それらの3つのプロセスについての追加情報を取得することです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crit show checkpoint/core-1.img | jq .entries&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;.tc.comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&amp;#34;bash&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crit show checkpoint/core-7.img | jq .entries&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;.tc.comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&amp;#34;counter.py&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crit show checkpoint/core-8.img | jq .entries&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;.tc.comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&amp;#34;tee&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは、コンテナ内の3つのプロセスが&lt;code&gt;bash&lt;/code&gt;と&lt;code&gt;counter.py&lt;/code&gt;(Pythonインタプリター)と&lt;code&gt;tee&lt;/code&gt;であることを意味しています。
プロセスの親子関係についての詳細は、&lt;code&gt;checkpoint/pstree.img&lt;/code&gt;に分析するデータがさらにあります。&lt;/p&gt;
&lt;p&gt;ここまでで収集した情報をまだ実行中のコンテナと比較してみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crictl inspect --output go-template --template &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;{{(index .info.pid)}}&amp;#34;&lt;/span&gt; 059a219a22e56
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;722520
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; ps auxf | grep -A &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;722520&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;fedora    722520  \_ bash -c /home/counter/counter.py 2&amp;gt;&amp;amp;1 | tee /home/counter/logfile
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;fedora    722541      \_ /usr/bin/python3 /home/counter/counter.py
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;fedora    722542      \_ /usr/bin/coreutils --coreutils-prog-shebang=tee /usr/bin/tee /home/counter/logfile
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; cat /proc/722520/comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; cat /proc/722541/comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;counter.py
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; cat /proc/722542/comm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;tee
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この出力では、まずコンテナ内の最初のプロセスのPIDを取得しています。
そしてコンテナを実行しているシステム上で、そのPIDと子プロセスを探しています。
3つのプロセスが表示され、最初のものはコンテナPID名前空間の中でPID 1である&amp;quot;bash&amp;quot;です。
次に&lt;code&gt;/proc/&amp;lt;PID&amp;gt;/comm&lt;/code&gt;を見ると、チェックポイントイメージと正確に同じ値を見つけることができます。&lt;/p&gt;
&lt;p&gt;覚えておく重要なことは、チェックポイントはコンテナのPID名前空間内の視界が含まれていることです。
なぜなら、これらの情報はプロセスを復元するために重要だからです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;crit&lt;/code&gt;がコンテナについて教えてくれる最後の例は、UTS名前空間に関する情報です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; crit show checkpoint/utsns-12.img
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;    &amp;#34;magic&amp;#34;: &amp;#34;UTSNS&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;    &amp;#34;entries&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;            &amp;#34;nodename&amp;#34;: &amp;#34;counters&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;            &amp;#34;domainname&amp;#34;: &amp;#34;(none)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;UTS名前空間内のホストネームが&lt;code&gt;counters&lt;/code&gt;であることを教えてくれます。&lt;/p&gt;
&lt;p&gt;チェックポイント作成中に収集された各リソースCRIUについて、&lt;code&gt;checkpoint/&lt;/code&gt;ディレクトリは対応するイメージファイルを含んでいます。
このイメージファイルは&lt;code&gt;crit&lt;/code&gt;を使用することで分析可能です。&lt;/p&gt;
&lt;h4 id=&#34;メモリーページを見る&#34;&gt;メモリーページを見る&lt;/h4&gt;
&lt;p&gt;CRITを使用して復号化できるCRIUからの情報に加えて、CRIUがディスクに書き込んだ生のメモリーページを含んでいるファイルもあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; ls  checkpoint/pages-*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;checkpoint/pages-1.img  checkpoint/pages-2.img  checkpoint/pages-3.img
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最初にコンテナを使用した際に、メモリー内のどこかにランダムキー(&lt;code&gt;RANDOM_1432_KEY&lt;/code&gt;)を保存しました。
見つけることができるかどうか見てみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; grep -ao RANDOM_1432_KEY checkpoint/pages-*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;checkpoint/pages-2.img:RANDOM_1432_KEY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そして実際に、私のデータがあります。
この方法で、コンテナ内のプロセスの全てのメモリーページの内容を簡単に見ることができます。
しかし、チェックポイントアーカイブにアクセスできるなら誰でも、コンテナのプロセスのメモリー内に保存された全ての情報にアクセスできることを覚えておくことも重要です。&lt;/p&gt;
&lt;h4 id=&#34;さらなる分析のためにgdbを使用する&#34;&gt;さらなる分析のためにgdbを使用する&lt;/h4&gt;
&lt;p&gt;チェックポイントイメージを見るための他の方法は&lt;code&gt;gdb&lt;/code&gt;です。
CRIUリポジトリは、チェックポイントをコアダンプファイルに変換する&lt;a href=&#34;https://github.com/checkpoint-restore/criu/tree/criu-dev/coredump&#34;&gt;coredump&lt;/a&gt;スクリプトを含んでいます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; /home/criu/coredump/coredump-python3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; ls -al core*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;core.1  core.7  core.8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;coredump-python3&lt;/code&gt;スクリプトを実行すると、チェックポイントイメージがコンテナ内の各プロセスに対し1つのコアダンプファイルに変換されます。
&lt;code&gt;gdb&lt;/code&gt;を使用してプロセスの詳細を見ることもできます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#a2f&#34;&gt;echo&lt;/span&gt; info registers | gdb --core checkpoint/core.1 -q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#888&#34;&gt;[New LWP 1]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#888&#34;&gt;Core was generated by `bash -c /home/counter/counter.py 2&amp;gt;&amp;amp;1 | tee /home/counter/logfile&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;&lt;/span&gt;&lt;span style=&#34;&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#000080;font-weight:bold&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;  0x00007fefba110198 in ?? &lt;span style=&#34;color:#666&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;(gdb)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rax            0x3d                61
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rbx            0x8                 8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rcx            0x7fefba11019a      140667595587994
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rdx            0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rsi            0x7fffed9c1110      140737179816208
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rdi            0xffffffff          4294967295
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rbp            0x1                 0x1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rsp            0x7fffed9c10e8      0x7fffed9c10e8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r8             0x1                 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r9             0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r10            0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r11            0x246               582
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r12            0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r13            0x7fffed9c1170      140737179816304
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r14            0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;r15            0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;rip            0x7fefba110198      0x7fefba110198
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;eflags         0x246               [ PF ZF IF ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;cs             0x33                51
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;ss             0x2b                43
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;ds             0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;es             0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;fs             0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888&#34;&gt;gs             0x0                 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では、チェックポイント中の全てのレジストリの値を見ることができ、コンテナのPID 1のプロセスの完全なコマンドライン(&lt;code&gt;bash -c /home/counter/counter.py 2&amp;gt;&amp;amp;1 | tee /home/counter/logfile&lt;/code&gt;)を見ることもできます。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;コンテナチェックポイントを作成することで、コンテナを停止することやチェックポイントが作成されたことを知ることなく、実行中のコンテナのチェックポイントを作成することが可能です。
Kubernetesにおいてコンテナのチェックポイントを作成した結果がチェックポイントアーカイブです。
&lt;code&gt;checkpointctl&lt;/code&gt;や&lt;code&gt;tar&lt;/code&gt;、&lt;code&gt;crit&lt;/code&gt;、&lt;code&gt;gdb&lt;/code&gt;のような異なるツールを使用して、チェックポイントを分析できます。
&lt;code&gt;grep&lt;/code&gt;のようなシンプルなツールでさえ、チェックポイントアーカイブ内の情報を見つけることが可能です。&lt;/p&gt;
&lt;p&gt;この記事で示したチェックポイントの分析方法のさまざまな例は出発点にすぎません。
この記事ではチェックポイントの分析を始める方法を紹介しましたが、要件によってはかなり詳細に特定の物事を見ることも可能です。&lt;/p&gt;
&lt;h2 id=&#34;参加するためにはどうすればよいですか&#34;&gt;参加するためにはどうすればよいですか？&lt;/h2&gt;
&lt;p&gt;SIG Nodeにはいくつかの方法でアクセスできます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slack: &lt;a href=&#34;https://kubernetes.slack.com/messages/sig-node&#34;&gt;#sig-node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slack: &lt;a href=&#34;https://kubernetes.slack.com/messages/sig-security&#34;&gt;#sig-security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubernetes-sig-node&#34;&gt;メーリングリスト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetesにおけるフォレンジックコンテナチェックポイント処理</title>
      <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/</link>
      <pubDate>Mon, 05 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt; Adrian Reber (Red Hat)&lt;/p&gt;
&lt;p&gt;フォレンジックコンテナチェックポイント処理は&lt;a href=&#34;https://criu.org/&#34;&gt;Checkpoint/Restore In Userspace&lt;/a&gt; (CRIU)に基づいており、コンテナがチェックポイントされていることを認識することなく、実行中のコンテナのステートフルコピーを作成することができます。
コンテナのコピーは、元のコンテナに気づかれることなく、サンドボックス環境で複数回の分析やリストアが可能です。
フォレンジックコンテナチェックポイント処理はKubernetes v1.25でalpha機能として導入されました。&lt;/p&gt;
&lt;h2 id=&#34;どのように機能しますか&#34;&gt;どのように機能しますか？&lt;/h2&gt;
&lt;p&gt;CRIUを使用してコンテナのチェックポイントやリストアを行うことが可能です。
CRIUはruncやcrun、CRI-O、containerdと統合されており、Kubernetesで実装されているフォレンジックコンテナチェックポイント処理は、既存のCRIU統合を使用します。&lt;/p&gt;
&lt;h2 id=&#34;なぜ重要なのか&#34;&gt;なぜ重要なのか？&lt;/h2&gt;
&lt;p&gt;CRIUと対応する統合機能を使用することで、後でフォレンジック分析を行うために、ディスク上で実行中のコンテナに関する全ての情報と状態を取得することが可能です。
フォレンジック分析は、疑わしいコンテナを停止したり影響を与えることなく検査するために重要となる場合があります。
コンテナが本当に攻撃を受けている場合、攻撃者はコンテナを検査する処理を検知するかもしれません。
チェックポイントを取得しサンドボックス環境でコンテナを分析することは、元のコンテナや、おそらく攻撃者にも検査を認識されることなく、コンテナを検査することができる可能性があります。&lt;/p&gt;
&lt;p&gt;フォレンジックコンテナチェックポイント処理のユースケースに加えて、内部状態を失うことなく、あるノードから他のノードにコンテナを移行することも可能です。
特に初期化時間の長いステートフルコンテナの場合、チェックポイントからリストアすることは再起動後の時間が節約されるか、起動時間がより早くなる可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;コンテナチェックポイント処理を利用するには&#34;&gt;コンテナチェックポイント処理を利用するには？&lt;/h2&gt;
&lt;p&gt;機能は&lt;a href=&#34;https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/&#34;&gt;フィーチャーゲート&lt;/a&gt;で制限されているため、新しい機能を使用する前に&lt;code&gt;ContainerCheckpoint&lt;/code&gt;を有効にしてください。&lt;/p&gt;
&lt;p&gt;ランタイムがコンテナチェックポイント処理をサポートしている必要もあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;containerd: サポートは現在検討中です。詳細はcontainerdプルリクエスト&lt;a href=&#34;https://github.com/containerd/containerd/pull/6965&#34;&gt;#6965&lt;/a&gt;を見てください。&lt;/li&gt;
&lt;li&gt;CRI-O: v1.25はフォレンジックコンテナチェックポイント処理をサポートしています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cri-oでの使用例&#34;&gt;CRI-Oでの使用例&lt;/h3&gt;
&lt;p&gt;CRI-Oとの組み合わせでフォレンジックコンテナチェックポイント処理を使用するためには、ランタイムをコマンドラインオプション&lt;code&gt;--enable-criu-support=true&lt;/code&gt;で起動する必要があります。
Kubernetesでは、&lt;code&gt;ContainerCheckpoint&lt;/code&gt;フィーチャーゲートを有効にしたクラスターを実行する必要があります。
チェックポイント処理の機能はCRIUによって提供されているため、CRIUをインストールすることも必要となります。
通常、runcやcrunはCRIUに依存しているため、自動的にインストールされます。&lt;/p&gt;
&lt;p&gt;執筆時点ではチェックポイント機能はCRI-OやKubernetesにおいてalpha機能としてみなされており、セキュリティ影響がまだ検討中であることに言及することも重要です。&lt;/p&gt;
&lt;p&gt;コンテナとPodが実行されると、チェックポイントを作成することが可能になります。
&lt;a href=&#34;https://kubernetes.io/docs/reference/node/kubelet-checkpoint-api/&#34;&gt;チェックポイント処理&lt;/a&gt;は&lt;strong&gt;kubelet&lt;/strong&gt;レベルでのみ公開されています。
コンテナをチェックポイントするためには、コンテナが実行されているノード上で&lt;code&gt;curl&lt;/code&gt;を実行し、チェックポイントをトリガーします。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;https://localhost:10250/checkpoint/namespace/podId/container&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;default&lt;/em&gt;名前空間内の&lt;em&gt;counters&lt;/em&gt;と呼ばれるPod内の&lt;em&gt;counter&lt;/em&gt;と呼ばれるコンテナに対し、&lt;strong&gt;kubelet&lt;/strong&gt; APIエンドポイントが次の場所で到達可能です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -X POST &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;https://localhost:10250/checkpoint/default/counters/counter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;厳密には、kubeletの自己署名証明書を許容し、kubeletチェックポイントAPIの使用を認可するために、下記のcurlコマンドのオプションが必要です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--insecure --cert /var/run/kubernetes/client-admin.crt --key /var/run/kubernetes/client-admin.key
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この&lt;strong&gt;kubelet&lt;/strong&gt; APIが実行されると、CRI-Oからチェックポイントの作成をリクエストします。
CRI-Oは低レベルランタイム(例えば&lt;code&gt;runc&lt;/code&gt;)からチェックポイントをリクエストします。
そのリクエストを確認すると、&lt;code&gt;runc&lt;/code&gt;は実際のチェックポイントを行うために&lt;code&gt;criu&lt;/code&gt;ツールを呼び出します。&lt;/p&gt;
&lt;p&gt;チェックポイント処理が終了すると、チェックポイントは&lt;code&gt;/var/lib/kubelet/checkpoints/checkpoint-&amp;lt;pod-name&amp;gt;_&amp;lt;namespace-name&amp;gt;-&amp;lt;container-name&amp;gt;-&amp;lt;timestamp&amp;gt;.tar&lt;/code&gt;で利用可能になります。&lt;/p&gt;
&lt;p&gt;その後、そのtarアーカイブを使用してコンテナを別の場所にリストアできます。&lt;/p&gt;
&lt;h3 id=&#34;restore-checkpointed-container-standalone&#34;&gt;Kubernetesの外部でチェックポイントしたコンテナをリストアする(CRI-Oを使用)&lt;/h3&gt;
&lt;p&gt;チェックポイントtarアーカイブを使用すると、CRI-Oのサンドボックスインスタンス内のKubernetesの外部にコンテナをリストア可能です。
リストア中のより良いユーザエクスペリエンスのために、&lt;em&gt;main&lt;/em&gt; CRI-O GitHubブランチからCRI-Oのlatestバージョンを使用することを推奨します。
CRI-O v1.25を使用している場合、コンテナを開始する前にKubernetesが作成する特定のディレクトリを手動で作成する必要があります。&lt;/p&gt;
&lt;p&gt;Kubernetesの外部にコンテナをリストアするための最初のステップは、&lt;em&gt;crictl&lt;/em&gt;を使用してPodサンドボックスを作成することです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crictl runp pod-config.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、さきほどチェックポイントしたコンテナを新しく作成したPodサンドボックスにリストアします。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crictl create &amp;lt;POD_ID&amp;gt; container-config.json pod-config.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;container-config.json&lt;/code&gt;のレジストリでコンテナイメージを指定する代わりに、前に作成したチェックポイントアーカイブへのパスを指定する必要があります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;counter&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt;:{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;/var/lib/kubelet/checkpoints/&amp;lt;checkpoint-archive&amp;gt;.tar&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、そのコンテナを開始するために&lt;code&gt;crictl start &amp;lt;CONTAINER_ID&amp;gt;&lt;/code&gt;を実行すると、さきほどチェックポイントしたコンテナのコピーが実行されているはずです。&lt;/p&gt;
&lt;h3 id=&#34;restore-checkpointed-container-k8s&#34;&gt;Kubernetes内でチェックポイントしたコンテナをリストアする&lt;/h3&gt;
&lt;p&gt;先ほどチェックポイントしたコンテナをKubernetes内で直接リストアするためには、レジストリにプッシュできるイメージにチェックポイントアーカイブを変換する必要があります。&lt;/p&gt;
&lt;p&gt;ローカルのチェックポイントアーカイブを変換するための方法として、&lt;a href=&#34;https://buildah.io/&#34;&gt;buildah&lt;/a&gt;を使用した下記のステップが考えられます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b8860b&#34;&gt;newcontainer&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;$(&lt;/span&gt;buildah from scratch&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buildah add &lt;span style=&#34;color:#b8860b&#34;&gt;$newcontainer&lt;/span&gt; /var/lib/kubelet/checkpoints/checkpoint-&amp;lt;pod-name&amp;gt;_&amp;lt;namespace-name&amp;gt;-&amp;lt;container-name&amp;gt;-&amp;lt;timestamp&amp;gt;.tar /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buildah config --annotation&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;io.kubernetes.cri-o.annotations.checkpoint.name&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&amp;lt;container-name&amp;gt; &lt;span style=&#34;color:#b8860b&#34;&gt;$newcontainer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buildah commit &lt;span style=&#34;color:#b8860b&#34;&gt;$newcontainer&lt;/span&gt; checkpoint-image:latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buildah rm &lt;span style=&#34;color:#b8860b&#34;&gt;$newcontainer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;出来上がったイメージは標準化されておらず、CRI-Oとの組み合わせでのみ動作します。
このイメージはalphaにも満たないフォーマットであると考えてください。
このようなチェックポイントイメージのフォーマットを標準化するための&lt;a href=&#34;https://github.com/opencontainers/image-spec/issues/962&#34;&gt;議論&lt;/a&gt;が進行中です。
これはまだ標準化されたイメージフォーマットではなく、CRI-Oを&lt;code&gt;--enable-criu-support=true&lt;/code&gt;で起動した場合のみ動作することを忘れないでください。
CRIUサポートでCRI-Oを起動することのセキュリティ影響はまだ明確ではなく、そのため、イメージフォーマットだけでなく機能も気を付けて使用するべきです。&lt;/p&gt;
&lt;p&gt;さて、そのイメージをコンテナイメージレジストリにプッシュする必要があります。
例えば以下のような感じです。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buildah push localhost/checkpoint-image:latest container-image-registry.example/user/checkpoint-image:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このチェックポイントイメージ(&lt;code&gt;container-image-registry.example/user/checkpoint-image:latest&lt;/code&gt;)をリストアするために、イメージはPodの仕様(Specification)に記載する必要があります。
以下はマニフェストの例です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;v1&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Pod&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;metadata&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;namePrefix&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;example-&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;spec&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;containers&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;name&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&amp;lt;container-name&amp;gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;image&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;container-image-registry.example/user/checkpoint-image:latest&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;nodeName&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&amp;lt;destination-node&amp;gt;&lt;span style=&#34;color:#bbb&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kubernetesは新しいPodをノード上にスケジュールします。
そのノード上のKubeletは、&lt;code&gt;registry/user/checkpoint-image:latest&lt;/code&gt;として指定されたイメージをもとに、コンテナを作成し開始するようにコンテナランタイム(この例ではCRI-O)に指示をします。
CRI-Oは&lt;code&gt;registry/user/checkpoint-image:latest&lt;/code&gt;がコンテナイメージでなく、チェックポイントデータへの参照であることを検知します。
その時、コンテナを作成し開始する通常のステップの代わりに、CRI-Oはチェックポイントデータをフェッチし、指定されたチェックポイントからコンテナをリストアします。&lt;/p&gt;
&lt;p&gt;Pod内のアプリケーションはチェックポイントを取得しなかったかのように実行し続けます。
コンテナ内では、アプリケーションはチェックポイントからリストアされず通常起動したコンテナのような見た目や動作をします。&lt;/p&gt;
&lt;p&gt;これらのステップで、あるノードで動作しているPodを、別のノードで動作している新しい同等のPodに置き換えることができ、そのPod内のコンテナの状態を失うことはないです。&lt;/p&gt;
&lt;h2 id=&#34;どのように参加すればよいですか&#34;&gt;どのように参加すればよいですか？&lt;/h2&gt;
&lt;p&gt;SIG Nodeにはいくつかの手段でアクセスすることができます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slack: &lt;a href=&#34;https://kubernetes.slack.com/messages/sig-node&#34;&gt;#sig-node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://groups.google.com/forum/#!forum/kubernetes-sig-node&#34;&gt;メーリングリスト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;さらなる読み物&#34;&gt;さらなる読み物&lt;/h2&gt;
&lt;p&gt;コンテナチェックポイントの分析方法に関する詳細は後続のブログ&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/blog/2023/03/10/forensic-container-analysis/&#34;&gt;Forensic container analysis&lt;/a&gt;を参照してください。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>更新: dockershimの削除に関するFAQ</title>
      <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2022/02/17/dockershim-faq/</link>
      <pubDate>Thu, 17 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2022/02/17/dockershim-faq/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;この記事は2020年の後半に投稿されたオリジナルの記事&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/blog/2020/12/02/dockershim-faq/&#34;&gt;Dockershim Deprecation FAQ&lt;/a&gt;の更新版です。
この記事にはv1.24のリリースに関する更新を含みます。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;この文書では、Kubernetesからの &lt;em&gt;dockershim&lt;/em&gt; の削除に関するよくある質問について説明します。
この削除はKubernetes v1.20リリースの一部としてはじめて&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/blog/2020/12/08/kubernetes-1-20-release-announcement/&#34;&gt;発表&lt;/a&gt;されたものです。
Kubernetes &lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/releases/#release-v1-24&#34;&gt;v1.24のリリース&lt;/a&gt;においてdockershimは実際にKubernetesから削除されました。&lt;/p&gt;
&lt;p&gt;これが何を意味するかについては、ブログ記事&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/&#34;&gt;Don&#39;t Panic: Kubernetes and Docker&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/&#34;&gt;dockershim削除の影響範囲を確認する&lt;/a&gt;をお読みいただくことで、
dockershimの削除があなたやあなたの組織に与える影響をご判断いただけます。&lt;/p&gt;
&lt;p&gt;Kubernetes 1.24リリースに至るまでの間、Kubernetesコントリビューターはこの移行を円滑に行えるようにするために尽力してきました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;私たちの&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/&#34;&gt;コミットメントと次のステップ&lt;/a&gt;を詳述したブログ記事。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/docs/setup/production-environment/container-runtimes/#container-runtimes&#34;&gt;他のコンテナランタイム&lt;/a&gt;への移行に大きな障害があるかどうかのチェック。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/docs/tasks/administer-cluster/migrating-from-dockershim/&#34;&gt;dockershimからの移行&lt;/a&gt;ガイドの追加。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/&#34;&gt;dockershimの削除とCRI互換ランタイムの使用に関する記事一覧&lt;/a&gt;の作成。
このリストには、上に示した文書の一部が含まれており、また、厳選された外部の情報(ベンダーによるガイドを含む)もカバーしています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dockershimはなぜkubernetesから削除されたのですか&#34;&gt;dockershimはなぜKubernetesから削除されたのですか？&lt;/h3&gt;
&lt;p&gt;Kubernetesの初期のバージョンは、特定のコンテナランタイム上でのみ動作しました。
Docker Engineです。その後、Kubernetesは他のコンテナランタイムと連携するためのサポートを追加しました。
オーケストレーター(Kubernetesなど)と多くの異なるコンテナランタイムの間の相互運用を可能にするため、
CRI標準が&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/blog/2016/12/container-runtime-interface-cri-in-kubernetes/&#34;&gt;作成&lt;/a&gt;されました。
Docker Engineはそのインターフェイス(CRI)を実装していないため、Kubernetesプロジェクトは移行を支援する特別なコードを作成し、
その &lt;em&gt;dockershim&lt;/em&gt; コードをKubernetes自身の一部としました。&lt;/p&gt;
&lt;p&gt;dockershimコードは常に一時的な解決策であることを意図されていました(このためshimと名付けられています)。
コミュニティでの議論や計画については、&lt;a href=&#34;https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim&#34;&gt;dockershimの削除によるKubernetes改良の提案&lt;/a&gt;にてお読みいただけます。&lt;/p&gt;
&lt;p&gt;実際、dockershimのメンテナンスはKubernetesメンテナーにとって大きな負担になっていました。&lt;/p&gt;
&lt;p&gt;さらに、dockershimとほとんど互換性のなかった機能、たとえばcgroups v2やユーザーネームスペースなどが、
これらの新しいCRIランタイムに実装されています。Kubernetesからdockershimを削除することで、これらの分野でのさらなる開発が可能になります。&lt;/p&gt;
&lt;h3 id=&#34;dockerとコンテナは同じものですか&#34;&gt;Dockerとコンテナは同じものですか？&lt;/h3&gt;
&lt;p&gt;DockerはLinuxのコンテナパターンを普及させ、その基盤技術の発展に寄与してきましたが、
Linuxのコンテナ技術そのものはかなり以前から存在しています。
また、コンテナエコシステムはDockerを超えてより広範に発展してきました。
OCIやCRIのような標準は、Dockerの機能の一部を置き換えたり、既存の機能を強化したりすることで、
私達のエコシステムの多くのツールの成長と繁栄を助けてきました。&lt;/p&gt;
&lt;h3 id=&#34;既存のコンテナイメージは引き続き使えるのですか&#34;&gt;既存のコンテナイメージは引き続き使えるのですか？&lt;/h3&gt;
&lt;p&gt;はい、&lt;code&gt;docker build&lt;/code&gt;から生成されるイメージは、全てのCRI実装で動作します。
既存のイメージも全く同じように動作します。&lt;/p&gt;
&lt;h3 id=&#34;プライベートイメージについてはどうでしょうか&#34;&gt;プライベートイメージについてはどうでしょうか？&lt;/h3&gt;
&lt;p&gt;はい、すべてのCRIランタイムはKubernetesで使われているものと同一のpull secretsをサポートしており、
PodSpecまたはService Accountを通して利用できます。&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-1-23でdocker-engineを引き続き使用できますか&#34;&gt;Kubernetes 1.23でDocker Engineを引き続き使用できますか？&lt;/h3&gt;
&lt;p&gt;はい、1.20で変更されたのは、Docker Engineランタイムを使用している場合に警告ログが&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/docs/reference/command-line-tools-reference/kubelet/&#34;&gt;kubelet&lt;/a&gt;起動時に出るようになったことだけです。
この警告は、1.23までのすべてのバージョンで表示されます。
dockershimの削除はKubernetes 1.24で行われました。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.24以降を実行している場合は、&lt;a href=&#34;#can-i-still-use-docker-engine-as-my-container-runtime&#34;&gt;Docker Engineを引き続きコンテナランタイムとして利用できますか？&lt;/a&gt;をご覧ください。
(CRIがサポートされているKubernetesリリースを使用している場合、dockershimから切り替えることができることを忘れないでください。
リリースv1.24からはKubernetesにdockershimが含まれなくなったため、&lt;strong&gt;必ず&lt;/strong&gt;切り替えなければなりません)。&lt;/p&gt;
&lt;h3 id=&#34;どのcriの実装を使うべきでしょうか&#34;&gt;どのCRIの実装を使うべきでしょうか？&lt;/h3&gt;
&lt;p&gt;これは難しい質問で、様々な要素に依存します。
もしDocker Engineがうまく動いているのであれば、containerdに移行するのは比較的簡単で、
性能もオーバーヘッドも確実に改善されるでしょう。
しかし、他の選択のほうがあなたの環境により適合する場合もありますので、
&lt;a href=&#34;https://landscape.cncf.io/card-mode?category=container-runtime&amp;amp;grouping=category&#34;&gt;CNCF landscape&lt;/a&gt;にあるすべての選択肢を検討されることをおすすめします。&lt;/p&gt;
&lt;h4 id=&#34;can-i-still-use-docker-engine-as-my-container-runtime&#34;&gt;Docker Engineを引き続きコンテナランタイムとして利用できますか？&lt;/h4&gt;
&lt;p&gt;第一に、ご自身のPCで開発やテスト用途でDockerを使用している場合、何も変わることはありません。
Kubernetesでどのコンテナランタイムを使っていても、Dockerをローカルで使い続けることができます。
コンテナではこのような相互運用性を実現できます。&lt;/p&gt;
&lt;p&gt;MirantisとDockerは、Kubernetesから内蔵のdockershimが削除された後も、
Docker Engineの代替アダプターを維持することに&lt;a href=&#34;https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/&#34;&gt;コミット&lt;/a&gt;しています。
代替アダプターの名前は&lt;a href=&#34;https://github.com/Mirantis/cri-dockerd&#34;&gt;&lt;code&gt;cri-dockerd&lt;/code&gt;&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cri-dockerd&lt;/code&gt;をインストールして、kubeletをDocker Engineに接続するために使用することができます。
詳細については、&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/&#34;&gt;Migrate Docker Engine nodes from dockershim to cri-dockerd&lt;/a&gt;を読んでください。&lt;/p&gt;
&lt;h3 id=&#34;今現在でプロダクション環境に他のランタイムを使用している例はあるのでしょうか&#34;&gt;今現在でプロダクション環境に他のランタイムを使用している例はあるのでしょうか？&lt;/h3&gt;
&lt;p&gt;Kubernetesプロジェクトが生み出したすべての成果物(Kubernetesバイナリ)は、リリースごとに検証されています。&lt;/p&gt;
&lt;p&gt;また、&lt;a href=&#34;https://kind.sigs.k8s.io/&#34;&gt;kind&lt;/a&gt;プロジェクトは以前からcontainerdを使っており、プロジェクトのユースケースにおいて安定性が向上してきています。
kindとcontainerdは、Kubernetesコードベースの変更を検証するために毎日何回も利用されています。
他の関連プロジェクトも同様のパターンを追っており、他のコンテナランタイムの安定性と使いやすさが示されています。
例として、OpenShift 4.xは2019年6月以降、CRI-Oランタイムをプロダクション環境で使っています。&lt;/p&gt;
&lt;p&gt;他の事例や参考資料はについては、
containerdとCRI-O(Cloud Native Computing Foundation (&lt;a href=&#34;https://cncf.io&#34;&gt;CNCF&lt;/a&gt;)の2つのコンテナランタイム)の採用例をご覧ください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containerd/containerd/blob/master/ADOPTERS.md&#34;&gt;containerd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/cri-o/cri-o/blob/master/ADOPTERS.md&#34;&gt;CRI-O&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ociという単語をよく見るのですが-これは何ですか&#34;&gt;OCIという単語をよく見るのですが、これは何ですか？&lt;/h3&gt;
&lt;p&gt;OCIは&lt;a href=&#34;https://opencontainers.org/about/overview/&#34;&gt;Open Container Initiative&lt;/a&gt;の略で、コンテナツールとテクノロジー間の数多くのインターフェースの標準化を行った団体です。
彼らはコンテナイメージをパッケージするための標準仕様(OCI image-spec)と、
コンテナを実行するための標準仕様(OCI runtime-spec)をメンテナンスしています。
また、&lt;a href=&#34;https://github.com/opencontainers/runc&#34;&gt;runc&lt;/a&gt;という形でruntime-specの実装もメンテナンスしており、
これは&lt;a href=&#34;https://containerd.io/&#34;&gt;containerd&lt;/a&gt;と&lt;a href=&#34;https://cri-o.io/&#34;&gt;CRI-O&lt;/a&gt;の両方でデフォルトの下位ランタイムとなっています。
CRIはこれらの低レベル仕様に基づいて、コンテナを管理するためのエンドツーエンドの標準を提供します。&lt;/p&gt;
&lt;h3 id=&#34;cri実装を変更する際に注意すべきことは何ですか&#34;&gt;CRI実装を変更する際に注意すべきことは何ですか？&lt;/h3&gt;
&lt;p&gt;DockerとほとんどのCRI(containerdを含む)において、下位で使用されるコンテナ化コードは同じものですが、
いくつかの細かい違いが存在します。移行する際に考慮すべき一般的な事項は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ログ設定&lt;/li&gt;
&lt;li&gt;ランタイムリソースの制限&lt;/li&gt;
&lt;li&gt;ノード構成スクリプトでdockerコマンドやコントロールソケット経由でDocker Engineを使用しているもの&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt;のプラグインで&lt;code&gt;docker&lt;/code&gt; CLIまたはDocker Engineコントロールソケットが必要なもの&lt;/li&gt;
&lt;li&gt;KubernetesプロジェクトのツールでDocker Engineへの直接アクセスが必要なもの(例:廃止された&lt;code&gt;kube-imagepuller&lt;/code&gt;ツール)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;registry-mirrors&lt;/code&gt;やinsecureレジストリなどの機能の設定&lt;/li&gt;
&lt;li&gt;その他の支援スクリプトやデーモンでDocker Engineが利用可能であることを想定していてKubernetes外で実行されるもの(モニタリング・セキュリティエージェントなど)&lt;/li&gt;
&lt;li&gt;GPUまたは特別なハードウェア、そしてランタイムおよびKubernetesとそれらハードウェアの統合方法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あなたがKubernetesのリソース要求/制限やファイルベースのログ収集DaemonSetを使用しているのであれば、それらは問題なく動作し続けますが、
&lt;code&gt;dockerd&lt;/code&gt;の設定をカスタマイズしていた場合は、それを新しいコンテナランタイムに適合させる必要があるでしょう。&lt;/p&gt;
&lt;p&gt;他に注意することとしては、システムメンテナンスを実行するようなものや、コンテナ内でイメージをビルドするようなものが動作しなくなります。
前者の場合は、&lt;a href=&#34;https://github.com/kubernetes-sigs/cri-tools&#34;&gt;&lt;code&gt;crictl&lt;/code&gt;&lt;/a&gt;ツールをdrop-inの置き換えとして使用できます(&lt;a href=&#34;https://kubernetes.io/ja/docs/tasks/debug/debug-cluster/crictl/#docker-cli%E3%81%8B%E3%82%89crictl%E3%81%B8%E3%81%AE%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0&#34;&gt;docker cliからcrictlへのマッピング&lt;/a&gt;を参照)。
後者の場合は、&lt;a href=&#34;https://github.com/genuinetools/img&#34;&gt;img&lt;/a&gt;、&lt;a href=&#34;https://github.com/containers/buildah&#34;&gt;buildah&lt;/a&gt;、&lt;a href=&#34;https://github.com/GoogleContainerTools/kaniko&#34;&gt;kaniko&lt;/a&gt;、&lt;a href=&#34;https://github.com/vmware-tanzu/buildkit-cli-for-kubectl&#34;&gt;buildkit-cli-for-kubectl&lt;/a&gt;のようなDockerを必要としない新しいコンテナビルドの選択肢を使用できます。&lt;/p&gt;
&lt;p&gt;containerdを使っているのであれば、&lt;a href=&#34;https://github.com/containerd/cri/blob/master/docs/registry.md&#34;&gt;ドキュメント&lt;/a&gt;を参照して、移行するのにどのような構成が利用可能かを確認するところから始めるといいでしょう。&lt;/p&gt;
&lt;p&gt;containerdとCRI-OをKubernetesで使用する方法に関しては、&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/docs/setup/production-environment/container-runtimes/&#34;&gt;コンテナランタイム&lt;/a&gt;に関するKubernetesのドキュメントを参照してください。&lt;/p&gt;
&lt;h3 id=&#34;さらに質問がある場合どうすればいいでしょうか&#34;&gt;さらに質問がある場合どうすればいいでしょうか？&lt;/h3&gt;
&lt;p&gt;ベンダーサポートのKubernetesディストリビューションを使用している場合、彼らの製品に対するアップグレード計画について尋ねることができます。
エンドユーザーの質問に関しては、&lt;a href=&#34;https://discuss.kubernetes.io/&#34;&gt;エンドユーザーコミュニティフォーラム&lt;/a&gt;に投稿してください。&lt;/p&gt;
&lt;p&gt;dockershimの削除に関する決定については、専用の&lt;a href=&#34;https://github.com/kubernetes/kubernetes/issues/106917&#34;&gt;GitHub issue&lt;/a&gt;で議論することができます。&lt;/p&gt;
&lt;p&gt;変更点に関するより詳細な技術的な議論は、&lt;a href=&#34;https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m&#34;&gt;待ってください、DockerはKubernetesで非推奨になったのですか？&lt;/a&gt;という素晴らしいブログ記事も参照してください。&lt;/p&gt;
&lt;h3 id=&#34;dockershimを使っているかどうかを検出できるツールはありますか&#34;&gt;dockershimを使っているかどうかを検出できるツールはありますか？&lt;/h3&gt;
&lt;p&gt;はい！&lt;a href=&#34;https://github.com/aws-containers/kubectl-detector-for-docker-socket&#34;&gt;Detector for Docker Socket (DDS)&lt;/a&gt;というkubectlプラグインをインストールすることであなたのクラスターを確認していただけます。
DDSは、アクティブなKubernetesワークロードがDocker Engineソケット(&lt;code&gt;docker.sock&lt;/code&gt;)をボリュームとしてマウントしているかを検出できます。
さらなる詳細と使用パターンについては、DDSプロジェクトの&lt;a href=&#34;https://github.com/aws-containers/kubectl-detector-for-docker-socket&#34;&gt;README&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&#34;ハグしていただけますか&#34;&gt;ハグしていただけますか？&lt;/h3&gt;
&lt;p&gt;はい、私達は引き続きいつでもハグに応じています。🤗🤗🤗&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Don&#39;t Panic: Kubernetes and Docker</title>
      <link>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/</link>
      <pubDate>Wed, 02 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;著者:&lt;/strong&gt; Jorge Castro, Duffie Cooley, Kat Cosgrove, Justin Garrison, Noah Kantrowitz, Bob Killen, Rey Lejano, Dan “POP” Papandrea, Jeffrey Sica, Davanum “Dims” Srinivas&lt;/p&gt;
&lt;p&gt;Kubernetesはv1.20より新しいバージョンで、コンテナランタイムとして&lt;a href=&#34;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation&#34;&gt;Dockerをサポートしません&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;パニックを起こす必要はありません。これはそれほど抜本的なものではないのです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;概要: ランタイムとしてのDockerは、Kubernetesのために開発された&lt;a href=&#34;https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/&#34;&gt;Container Runtime Interface(CRI)&lt;/a&gt;を利用しているランタイムを選んだ結果としてサポートされなくなります。しかし、Dockerによって生成されたイメージはこれからも、今までもそうだったように、みなさんのクラスターで使用可能です。&lt;/p&gt;
&lt;p&gt;もし、あなたがKubernetesのエンドユーザーであるならば、多くの変化はないでしょう。これはDockerの死を意味するものではありませんし、開発ツールとして今後Dockerを使用するべきでない、使用することは出来ないと言っているのでもありません。Dockerはコンテナを作成するのに便利なツールですし、docker buildコマンドで作成されたイメージはKubernetesクラスター上でこれからも動作可能なのです。&lt;/p&gt;
&lt;p&gt;もし、GKE、EKS、AKSといったマネージドKubernetesサービス(それらはデフォルトで&lt;a href=&#34;https://github.com/Azure/AKS/releases/tag/2020-11-16&#34;&gt;containerdを使用しています&lt;/a&gt;)を使っているのなら、ワーカーノードがサポート対象のランタイムを使用しているか、Dockerのサポートが将来のK8sバージョンで切れる前に確認しておく必要があるでしょう。
もし、ノードをカスタマイズしているのなら、環境やRuntimeの仕様に合わせて更新する必要があるでしょう。サービスプロバイダーと確認し、アップグレードのための適切なテストと計画を立ててください。&lt;/p&gt;
&lt;p&gt;もし、ご自身でClusterを管理しているのなら、やはり問題が発生する前に必要な対応を行う必要があります。v1.20の時点で、Dockerの使用についての警告メッセージが表示されるようになります。将来のKubernetesリリース(現在の計画では2021年下旬のv1.22)でDockerのRuntimeとしての使用がサポートされなくなれば、containerdやCRI-Oといった他のサポート対象のRuntimeに切り替える必要があります。切り替える際、そのRuntimeが現在使用しているDocker Daemonの設定をサポートすることを確認してください。(Loggingなど)&lt;/p&gt;
&lt;h2 id=&#34;では-なぜ混乱が生じ-誰もが恐怖に駆られているのか&#34;&gt;では、なぜ混乱が生じ、誰もが恐怖に駆られているのか。&lt;/h2&gt;
&lt;p&gt;ここで議論になっているのは2つの異なる場面についてであり、それが混乱の原因になっています。Kubernetesクラスターの内部では、Container runtimeと呼ばれるものがあり、それはImageをPullし起動する役目を持っています。Dockerはその選択肢として人気があります(他にはcontainerdやCRI-Oが挙げられます)が、しかしDockerはそれ自体がKubernetesの一部として設計されているわけではありません。これが問題の原因となっています。&lt;/p&gt;
&lt;p&gt;お分かりかと思いますが、ここで”Docker”と呼んでいるものは、ある1つのものではなく、その技術的な体系の全体であり、その一部には&amp;quot;containerd&amp;quot;と呼ばれるものもあり、これはそれ自体がハイレベルなContainer runtimeとなっています。Dockerは素晴らしいもので、便利です。なぜなら、多くのUXの改善がされており、それは人間が開発を行うための操作を簡単にしているのです。しかし、それらはKubernetesに必要なものではありません。Kubernetesは人間ではないからです。
このhuman-friendlyな抽象化レイヤーが作られたために、結果としてはKubernetesクラスターはDockershimと呼ばれるほかのツールを使い、本当に必要な機能つまりcontainerdを利用してきました。これは素晴らしいとは言えません。なぜなら、我々がメンテする必要のあるものが増えますし、それは問題が発生する要因ともなります。今回の変更で実際に行われることというのは、Dockershimを最も早い場合でv1.23のリリースでkubeletから除外することです。その結果として、Dockerのサポートがなくなるということなのです。
ここで、containerdがDockerに含まれているなら、なぜDockershimが必要なのかと疑問に思われる方もいるでしょう。&lt;/p&gt;
&lt;p&gt;DockerはCRI(&lt;a href=&#34;https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/&#34;&gt;Container Runtime Interface&lt;/a&gt;)に準拠していません。もしそうであればshimは必要ないのですが、現実はそうでありません。
しかし、これは世界の終わりでありません、心配しないでください。みなさんはContainer runtimeをDockerから他のサポート対象であるContainer runtimeに切り替えるだけでよいのです。&lt;/p&gt;
&lt;p&gt;1つ注意すべきことは、クラスターで行われる処理のなかでDocker socket(&lt;code&gt;/var/run/docker.sock&lt;/code&gt;)に依存する部分がある場合、他のRuntimeへ切り替えるとこの部分が働かなくなるでしょう。このパターンはしばしばDocker in Dockerと呼ばれます。このような場合の対応方法はたくさんあります。&lt;a href=&#34;https://github.com/GoogleContainerTools/kaniko&#34;&gt;kaniko&lt;/a&gt;、&lt;a href=&#34;https://github.com/genuinetools/img&#34;&gt;img&lt;/a&gt;、&lt;a href=&#34;https://github.com/containers/buildah&#34;&gt;buildah&lt;/a&gt;などです。&lt;/p&gt;
&lt;h2 id=&#34;では開発者にとって-この変更は何を意味するのか-これからもdockerfileを使ってよいのか-これからもdockerでビルドを行ってよいのか&#34;&gt;では開発者にとって、この変更は何を意味するのか。これからもDockerfileを使ってよいのか。これからもDockerでビルドを行ってよいのか。&lt;/h2&gt;
&lt;p&gt;この変更は、Dockerを直接操作している多くのみなさんとは別の場面に影響を与えるでしょう。
みなさんが開発を行う際に使用しているDockerと、Kubernetesクラスターの内部で使われているDocker runtimeは関係ありません。これがわかりにくいことは理解しています。開発者にとって、Dockerはこれからも便利なものであり、このアナウンスがあった前と変わらないでしょう。DockerでビルドされたImageは、決してDockerでだけ動作するというわけではありません。それはOCI(&lt;a href=&#34;https://opencontainers.org/&#34;&gt;Open Container Initiative&lt;/a&gt;) Imageと呼ばれるものです。あらゆるOCI準拠のImageは、それを何のツールでビルドしたかによらず、Kubernetesから見れば同じものなのです。&lt;a href=&#34;https://containerd.io/&#34;&gt;containerd&lt;/a&gt;も&lt;a href=&#34;https://cri-o.io/&#34;&gt;CRI-O&lt;/a&gt;も、そのようなImageをPullし、起動することが出来ます。
これがコンテナの仕様について、共通の仕様を策定している理由なのです。&lt;/p&gt;
&lt;p&gt;さて、この変更は決定しています。いくつかの問題は発生するかもしてませんが、決して壊滅的なものではなく、ほとんどの場合は良い変化となるでしょう。Kubernetesをどのように使用しているかによりますが、この変更が特に何の影響も及ぼさない人もいるでしょうし、影響がとても少ない場合もあります。長期的に見れば、物事を簡単にするのに役立つものです。
もし、この問題がまだわかりにくいとしても、心配しないでください。Kubernetesでは多くのものが変化しており、その全てに完璧に精通している人など存在しません。
経験の多寡や難易度にかかわらず、どんなことでも質問してください。我々の目標は、全ての人が将来の変化について、可能な限りの知識と理解を得られることです。
このブログが多くの質問の答えとなり、不安を和らげることができればと願っています。&lt;/p&gt;
&lt;p&gt;別の情報をお探しであれば、&lt;a href=&#34;https://deploy-preview-57407--kubernetes-io-main-staging.netlify.app/ja/dockershim&#34;&gt;dockershimの削除に関するFAQ&lt;/a&gt;を参照してください。&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
