<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubernetes Blog</title>
    <link>https://deploy-preview-55342--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-55342--kubernetes-io-main-staging.netlify.app/ja/</link>
    </image>
    
    <atom:link href="https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/feed.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Kubernetes 1.31: Fine-grained SupplementalGroups control</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/08/22/fine-grained-supplementalgroups-control/</link>
      <pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/08/22/fine-grained-supplementalgroups-control/</guid>
      <description>
        
        
        &lt;p&gt;この記事ではKubernetes 1.31の新機能である、Pod内のコンテナにおける補助グループ制御の改善機能について説明します。&lt;/p&gt;
&lt;h2 id=&#34;動機-コンテナイメージ内の-etc-group-に定義される暗黙的なグループ情報&#34;&gt;動機: コンテナイメージ内の&lt;code&gt;/etc/group&lt;/code&gt;に定義される暗黙的なグループ情報&lt;/h2&gt;
&lt;p&gt;この挙動は多くのKubernetesクラスターのユーザー、管理者にとってあまり知られていないかもしれませんが、Kubernetesは、デフォルトでは、Podで定義された情報に加えて、コンテナイメージ内の&lt;code&gt;/etc/group&lt;/code&gt;のグループ情報を &lt;em&gt;マージ&lt;/em&gt; します。&lt;/p&gt;
&lt;p&gt;例を見てみましょう。このPodはsecurityContextで&lt;code&gt;runAsUser=1000&lt;/code&gt;、&lt;code&gt;runAsGroup=3000&lt;/code&gt;、&lt;code&gt;supplementalGroups=4000&lt;/code&gt;を指定しています。&lt;/p&gt;
&lt;div class=&#34;highlight code-sample&#34;&gt;
    &lt;div class=&#34;copy-code-icon&#34;&gt;
    &lt;a href=&#34;https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/implicit-groups.yaml&#34; download=&#34;implicit-groups.yaml&#34;&gt;&lt;code&gt;implicit-groups.yaml&lt;/code&gt;
    &lt;/a&gt;&lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/images/copycode.svg&#34; class=&#34;icon-copycode&#34; onclick=&#34;copyCode(&#39;implicit-groups-yaml&#39;)&#34; title=&#34;Copy implicit-groups.yaml to clipboard&#34;&gt;&lt;/img&gt;&lt;/div&gt;
    &lt;div class=&#34;includecode&#34; id=&#34;implicit-groups-yaml&#34;&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;implicit-groups&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;securityContext&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;runAsUser&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&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;runAsGroup&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3000&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;supplementalGroups&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;[&lt;span style=&#34;color:#666&#34;&gt;4000&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;ctr&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;registry.k8s.io/e2e-test-images/agnhost:2.45&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;command&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;[&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sh&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sleep 1h&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &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;securityContext&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;allowPrivilegeEscalation&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&lt;/span&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;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;ctr&lt;/code&gt;コンテナで&lt;code&gt;id&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; Podを作成してみましょう。
&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; kubectl apply -f https://k8s.io/blog/2024-08-22-Fine-grained-SupplementalGroups-control/implicit-groups.yaml
&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:#000080;font-weight:bold&#34;&gt;#&lt;/span&gt; Podのコンテナが実行されていることを確認します。
&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; kubectl get pod implicit-groups
&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:#000080;font-weight:bold&#34;&gt;#&lt;/span&gt; idコマンドを確認します。
&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; kubectl &lt;span style=&#34;color:#a2f&#34;&gt;exec&lt;/span&gt; implicit-groups -- id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;出力は次のようになるでしょう。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-none&#34; data-lang=&#34;none&#34;&gt;uid=1000 gid=3000 groups=3000,4000,50000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Podマニフェストには&lt;code&gt;50000&lt;/code&gt;は一切定義されていないにもかかわらず、補助グループ(&lt;code&gt;groups&lt;/code&gt;フィールド)に含まれているグループID&lt;code&gt;50000&lt;/code&gt;は一体どこから来るのでしょうか? 答えはコンテナイメージの&lt;code&gt;/etc/group&lt;/code&gt;ファイルです。&lt;/p&gt;
&lt;p&gt;コンテナイメージの&lt;code&gt;/etc/group&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; kubectl &lt;span style=&#34;color:#a2f&#34;&gt;exec&lt;/span&gt; implicit-groups -- cat /etc/group
&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;user-defined-in-image:x:1000:
&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;group-defined-in-image:x:50000:user-defined-in-image
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;なるほど！コンテナのプライマリユーザーであるユーザー(&lt;code&gt;1000&lt;/code&gt;)がグループ(&lt;code&gt;50000&lt;/code&gt;)に属していることが最後のエントリから確認出来ました。&lt;/p&gt;
&lt;p&gt;このように、コンテナイメージ上の&lt;code&gt;/etc/group&lt;/code&gt;で定義される、コンテナのプライマリユーザーのグループ情報は、Podからの情報に加えて &lt;em&gt;暗黙的にマージ&lt;/em&gt; されます。ただし、この挙動は、現在のCRI実装がDockerから引き継いだ設計上の決定であり、コミュニティはこれまでこの挙動について再検討することはほとんどありませんでした。&lt;/p&gt;
&lt;h3 id=&#34;何が悪いのか&#34;&gt;何が悪いのか？&lt;/h3&gt;
&lt;p&gt;コンテナイメージの&lt;code&gt;/etc/group&lt;/code&gt;から &lt;em&gt;暗黙的にマージ&lt;/em&gt; されるグループ情報は、特にボリュームアクセスを行う際に、セキュリティ上の懸念を引き起こすことがあります(詳細は&lt;a href=&#34;https://issue.k8s.io/112879&#34;&gt;kubernetes/kubernetes#112879&lt;/a&gt;を参照してください)。なぜなら、Linuxにおいて、ファイルパーミッションはuid/gidで制御されているからです。更に悪いことに、&lt;code&gt;/etc/group&lt;/code&gt;に由来する暗黙的なgidは、マニフェストにグループ情報の手がかりが無いため、ポリシーエンジン等でチェック・検知をすることが出来ません。これはKubernetesセキュリティの観点からも懸念となります。&lt;/p&gt;
&lt;h2 id=&#34;podにおけるfine-grained-きめ細かい-supplementalgroups-control-supplementarygroupspolicy&#34;&gt;PodにおけるFine-grained(きめ細かい) SupplementalGroups control: &lt;code&gt;SupplementaryGroupsPolicy&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;この課題を解決するために、Kubernetes 1.31はPodの&lt;code&gt;.spec.securityContext&lt;/code&gt;に、新しく&lt;code&gt;supplementalGroupsPolicy&lt;/code&gt;フィールドを追加します。&lt;/p&gt;
&lt;p&gt;このフィールドは、Pod内のコンテナプロセスに付与される補助グループを決定するを方法を制御できるようにします。有効なポリシーは次の2つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Merge&lt;/em&gt;: &lt;code&gt;/etc/group&lt;/code&gt;で定義されている、コンテナのプライマリユーザーが所属するグループ情報をマージします。指定されていない場合、このポリシーがデフォルトです(後方互換性を考慮して既存の挙動と同様)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Strict&lt;/em&gt;: &lt;code&gt;fsGroup&lt;/code&gt;、&lt;code&gt;supplementalGroups&lt;/code&gt;、&lt;code&gt;runAsGroup&lt;/code&gt;フィールドで指定されたグループIDのみ補助グループに指定されます。つまり、&lt;code&gt;/etc/group&lt;/code&gt;で定義された、コンテナのプライマリユーザーのグループ情報はマージされません。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;では、どのように&lt;code&gt;Strict&lt;/code&gt;ポリシーが動作するか見てみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight code-sample&#34;&gt;
    &lt;div class=&#34;copy-code-icon&#34;&gt;
    &lt;a href=&#34;https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/strict-supplementalgroups-policy.yaml&#34; download=&#34;strict-supplementalgroups-policy.yaml&#34;&gt;&lt;code&gt;strict-supplementalgroups-policy.yaml&lt;/code&gt;
    &lt;/a&gt;&lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/images/copycode.svg&#34; class=&#34;icon-copycode&#34; onclick=&#34;copyCode(&#39;strict-supplementalgroups-policy-yaml&#39;)&#34; title=&#34;Copy strict-supplementalgroups-policy.yaml to clipboard&#34;&gt;&lt;/img&gt;&lt;/div&gt;
    &lt;div class=&#34;includecode&#34; id=&#34;strict-supplementalgroups-policy-yaml&#34;&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;strict-supplementalgroups-policy&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;securityContext&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;runAsUser&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&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;runAsGroup&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3000&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;supplementalGroups&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;[&lt;span style=&#34;color:#666&#34;&gt;4000&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;supplementalGroupsPolicy&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Strict&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;ctr&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;registry.k8s.io/e2e-test-images/agnhost:2.45&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;command&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;[&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sh&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sleep 1h&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &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;securityContext&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;allowPrivilegeEscalation&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&lt;/span&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;/div&gt;
&lt;/div&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; Podを作成してみましょう。
&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; kubectl apply -f https://k8s.io/blog/2024-08-22-Fine-grained-SupplementalGroups-control/strict-supplementalgroups-policy.yaml
&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:#000080;font-weight:bold&#34;&gt;#&lt;/span&gt; Podのコンテナが実行されていることを確認します。
&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; kubectl get pod strict-supplementalgroups-policy
&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:#000080;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;&lt;span style=&#34;color:#888&#34;&gt;kubectl exec -it strict-supplementalgroups-policy -- id
&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;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-none&#34; data-lang=&#34;none&#34;&gt;uid=1000 gid=3000 groups=3000,4000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;Strict&lt;/code&gt;ポリシーによってグループ&lt;code&gt;50000&lt;/code&gt;が&lt;code&gt;groups&lt;/code&gt;から除外されているのが確認できました！&lt;/p&gt;
&lt;p&gt;このように、確実に&lt;code&gt;supplementalGroupsPolicy: Strict&lt;/code&gt;を設定する(ポリシーエンジン等によって強制する)ことで、暗黙的な補助グループを回避することが可能になります。&lt;/p&gt;

&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&lt;h4 class=&#34;alert-heading&#34;&gt;備考:&lt;/h4&gt;このフィールドの値を強制するだけでは不十分な場合もあります。なぜなら、プロセスが自分自身のユーザー、グループ情報を変更できる権限/ケーパビリティを持っている場合があるからです。詳細は次のセクションを参照してください。&lt;/div&gt;

&lt;h2 id=&#34;podステータスにおける付与されたユーザー-グループ情報の確認&#34;&gt;Podステータスにおける付与されたユーザー、グループ情報の確認&lt;/h2&gt;
&lt;p&gt;この機能は、Podの&lt;code&gt;status.containerStatuses[].user.linux&lt;/code&gt;フィールドでコンテナの最初のプロセスに付与されたユーザー、グループ情報を公開しています。暗黙的なグループIDが付与されているかどうかを確認するのに便利でしょう。&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:#00f;font-weight:bold&#34;&gt;...&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;status&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;containerStatuses&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;ctr&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;user&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;linux&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;gid&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3000&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;supplementalGroups&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:#666&#34;&gt;3000&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:#666&#34;&gt;4000&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;uid&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1000&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:#00f;font-weight:bold&#34;&gt;...&lt;/span&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;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&lt;h4 class=&#34;alert-heading&#34;&gt;備考:&lt;/h4&gt;&lt;code&gt;status.containerStatuses[].user.linux&lt;/code&gt;フィールドで公開されているユーザー、グループ情報は、コンテナの最初のプロセスに、&lt;em&gt;最初に付与された&lt;/em&gt; 情報であることに注意してください。
もしそのプロセスが、自身のユーザー、グループ情報を変更できるシステムコール(例えば &lt;a href=&#34;https://man7.org/linux/man-pages/man2/setuid.2.html&#34;&gt;&lt;code&gt;setuid(2)&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&#34;https://man7.org/linux/man-pages/man2/setgid.2.html&#34;&gt;&lt;code&gt;setgid(2)&lt;/code&gt;&lt;/a&gt;,
&lt;a href=&#34;https://man7.org/linux/man-pages/man2/setgroups.2.html&#34;&gt;&lt;code&gt;setgroups(2)&lt;/code&gt;&lt;/a&gt;等)を実行する権限を持っている場合、プロセス自身で動的に変更が可能なためです。
つまり、実際にプロセスに付与されているユーザー、グループ情報は動的に変化します。&lt;/div&gt;

&lt;h2 id=&#34;この機能を利用するには&#34;&gt;この機能を利用するには&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;supplementalGroupsPolicy&lt;/code&gt;フィールドを有効化するには、下記のコンポーネントを利用する必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes: v1.31以降、かつ、&lt;code&gt;SupplementalGroupsPolicy&lt;/code&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/command-line-tools-reference/feature-gates/&#34;&gt;フィーチャーゲート&lt;/a&gt;が有効化されていること。v1.31現在、このフィーチャーゲートはアルファです。&lt;/li&gt;
&lt;li&gt;CRI実装:
&lt;ul&gt;
&lt;li&gt;containerd: v2.0以降&lt;/li&gt;
&lt;li&gt;CRI-O: v1.31以降&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ノードの&lt;code&gt;.status.features.supplementalGroupsPolicy&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-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;Node&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:#00f;font-weight:bold&#34;&gt;...&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;status&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;features&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;supplementalGroupsPolicy&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;true&lt;/span&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;h2 id=&#34;将来の展望&#34;&gt;将来の展望&lt;/h2&gt;
&lt;p&gt;Kubernetes SIG Nodeは、この機能が将来的なKubernetesのリリースでベータ版に昇格し、最終的には一般提供(GA)されることを望んでおり、期待しています。そうなれば、ユーザーはもはや機能ゲートを手動で有効にする必要がなくなります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;supplementalGroupsPolicy&lt;/code&gt;が指定されていない場合は、後方互換性のために&lt;code&gt;Merge&lt;/code&gt;ポリシーが適用されます。&lt;/p&gt;
&lt;h2 id=&#34;より学ぶには&#34;&gt;より学ぶには？&lt;/h2&gt;
&lt;!-- https://github.com/kubernetes/website/pull/46920 --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/tasks/configure-pod-container/security-context/&#34;&gt;Podとコンテナにセキュリティコンテキストを設定する&lt;/a&gt;(&lt;code&gt;supplementalGroupsPolicy&lt;/code&gt;の詳細)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3619&#34;&gt;KEP-3619: Fine-grained SupplementalGroups control&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参加するには&#34;&gt;参加するには？&lt;/h2&gt;
&lt;p&gt;この機能はSIG Nodeコミュニティによって推進されています。コミュニティに参加して、上記の機能やそれ以外のアイデアやフィードバックを共有してください。皆さんからのご意見をお待ちしています！&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetes v1.31: Elli</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/08/13/kubernetes-v1-31-release/</link>
      <pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/08/13/kubernetes-v1-31-release/</guid>
      <description>
        
        
        &lt;p&gt;&lt;strong&gt;編集者:&lt;/strong&gt; Matteo Bianchi, Yigit Demirbas, Abigail McCarthy, Edith Puclla, Rashan Smith&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31: Elliのリリースを発表します！&lt;/p&gt;
&lt;p&gt;これまでのリリースと同様に、Kubernetes v1.31では新たなGA、ベータ、アルファの機能が導入されています。
継続的に高品質なリリースを提供できていることは、私たちの開発サイクルの強さと、活発なコミュニティのサポートを示すものです。
今回のリリースでは、45の機能強化が行われました。
そのうち、11の機能がGAに昇格し、22の機能がベータに移行し、12の機能がアルファとして導入されています。&lt;/p&gt;
&lt;h2 id=&#34;リリースのテーマとロゴ&#34;&gt;リリースのテーマとロゴ&lt;/h2&gt;


&lt;figure class=&#34;release-logo &#34;&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/images/blog/2024-08-13-kubernetes-1.31-release/k8s-1.31.png&#34;
         alt=&#34;Kubernetes v1.31 Elliのロゴ&#34;/&gt; 
&lt;/figure&gt;
&lt;p&gt;Kubernetes v1.31のリリーステーマは&amp;quot;Elli&amp;quot;です。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31のElliは、優しい心を持つ愛らしい犬で、かわいらしい船乗りの帽子をかぶっています。
これは、多様で大きなKubernetesコントリビューターファミリーへの遊び心あふれる敬意を表しています。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31は、プロジェクトが&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/06/10-years-of-kubernetes/&#34;&gt;10周年&lt;/a&gt;を祝った後の初めてのリリースです。
Kubernetesは誕生以来、長い道のりを歩んできました。
そして今もなお、各リリースで新たな方向に進化し続けています。
10年という節目を迎え、これを実現させた数え切れないほどのKubernetesコントリビューターたちの努力、献身、技術、知恵、そして地道な作業を振り返ると、深い感銘を受けずにはいられません。&lt;/p&gt;
&lt;p&gt;プロジェクトの運営には膨大な労力が必要ですが、それにもかかわらず、熱意と笑顔を持って何度も貢献し、コミュニティの一員であることに誇りを感じる人々が絶えません。
新旧問わずコントリビューターから見られるこの「魂」こそが、活気に満ちた、まさに「喜びにあふれた」コミュニティの証なのです。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31のElliは、まさにこの素晴らしい精神を祝福する存在なのです！
Kubernetesの輝かしい次の10年に、みんなで乾杯しましょう！&lt;/p&gt;
&lt;h2 id=&#34;gaに昇格した機能のハイライト&#34;&gt;GAに昇格した機能のハイライト&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;これは、v1.31のリリースに伴いGAとなった改善点の一部です。&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;apparmorのサポートがgaに&#34;&gt;AppArmorのサポートがGAに&lt;/h3&gt;
&lt;p&gt;KubernetesのAppArmorサポートがGAになりました。
コンテナの&lt;code&gt;securityContext&lt;/code&gt;内の&lt;code&gt;appArmorProfile.type&lt;/code&gt;フィールドを設定することで、AppArmorを使用してコンテナを保護できます。
Kubernetes v1.30より前では、AppArmorはアノテーションで制御されていましたが、v1.30からはフィールドを使用して制御されるようになりました。
そのためアノテーションの使用をやめ、&lt;code&gt;appArmorProfile.type&lt;/code&gt;フィールドの使用に移行することをお勧めします。&lt;/p&gt;
&lt;p&gt;詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/tutorials/security/apparmor/&#34;&gt;AppArmorのチュートリアル&lt;/a&gt;をご覧ください。
この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;によって&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/24&#34;&gt;KEP #24&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;kube-proxyによる外部からの接続の安定性改善&#34;&gt;kube-proxyによる外部からの接続の安定性改善&lt;/h3&gt;
&lt;p&gt;kube-proxyを使用した外部からの接続の安定性が、v1.31で大きく改善されました。
Kubernetesのロードバランサーに関する一般的な課題の1つに、トラフィックの損失を防ぐための各コンポーネント間の連携があります。
この機能では、kube-proxyに新たな仕組みを導入し、&lt;code&gt;type: LoadBalancer&lt;/code&gt;と&lt;code&gt;externalTrafficPolicy: Cluster&lt;/code&gt;を設定したサービスで公開される終了予定のNodeに対して、ロードバランサーが接続をスムーズに切り替えられるようにしています。
また、クラウドプロバイダーとKubernetesのロードバランサー実装における推奨プラクティスも確立しました。&lt;/p&gt;
&lt;p&gt;この機能を利用するには、kube-proxyがクラスタ上でデフォルトのサービスプロキシとして動作し、ロードバランサーが接続の切り替えをサポートしている必要があります。
特別な設定は不要で、v1.30からkube-proxyにデフォルトで組み込まれており、v1.31で正式にGAとなりました。&lt;/p&gt;
&lt;p&gt;詳しくは、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/networking/virtual-ips/#external-traffic-policy&#34;&gt;仮想IPとサービスプロキシのドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-network&#34;&gt;SIG Network&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3836&#34;&gt;KEP #3836&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;永続ボリュームの状態変化時刻の記録機能が正式リリース&#34;&gt;永続ボリュームの状態変化時刻の記録機能が正式リリース&lt;/h3&gt;
&lt;p&gt;永続ボリュームの状態変化時刻を記録する機能が、v1.31で正式にリリースされました。
この機能により、PersistentVolumeの状態が最後に変わった時刻を保存する&lt;code&gt;PersistentVolumeStatus&lt;/code&gt;フィールドが追加されます。
機能が有効になると、すべてのPersistentVolumeオブジェクトに&lt;code&gt;.status.lastTransitionTime&lt;/code&gt;という新しいフィールドが設けられ、ボリュームの状態が最後に変わった時刻が記録されます。
ただし、この変更はすぐには反映されません。
Kubernetes v1.31にアップグレードした後、PersistentVolumeが更新され、状態(&lt;code&gt;Pending&lt;/code&gt;、&lt;code&gt;Bound&lt;/code&gt;、&lt;code&gt;Released&lt;/code&gt;)が初めて変わったときに、新しいフィールドに時刻が記録されます。
この機能により、PersistentVolumeが&lt;code&gt;Pending&lt;/code&gt;から&lt;code&gt;Bound&lt;/code&gt;に変わるまでの時間を測定できるようになります。
また、様々な指標やSLOの設定にも活用できます。&lt;/p&gt;
&lt;p&gt;詳しくは、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/storage/persistent-volumes/&#34;&gt;永続ボリュームのドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-storage&#34;&gt;SIG Storage&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3762&#34;&gt;KEP #3762&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h2 id=&#34;ベータに昇格した機能のハイライト&#34;&gt;ベータに昇格した機能のハイライト&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;これは、v1.31のリリースに伴いベータとなった改善点の一部です。&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;kube-proxyでのnftablesバックエンドの導入&#34;&gt;kube-proxyでのnftablesバックエンドの導入&lt;/h3&gt;
&lt;p&gt;v1.31では、nftablesバックエンドがベータとして登場しました。
この機能は&lt;code&gt;NFTablesProxyMode&lt;/code&gt;という設定で制御され、現在はデフォルトで有効になっています。&lt;/p&gt;
&lt;p&gt;nftables APIは、iptables APIの次世代版として開発され、より高いパフォーマンスと拡張性を提供します。
&lt;code&gt;nftables&lt;/code&gt;プロキシモードは、&lt;code&gt;iptables&lt;/code&gt;モードと比べてサービスエンドポイントの変更をより迅速かつ効率的に処理できます。
また、カーネル内でのパケット処理も効率化されています(ただし、この効果は数万のサービスを持つ大規模クラスタでより顕著になります)。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31の時点では、&lt;code&gt;nftables&lt;/code&gt;モードはまだ新しい機能のため、すべてのネットワークプラグインとの互換性が確認されているわけではありません。
お使いのネットワークプラグインのドキュメントで対応状況を確認してください。
このプロキシモードはLinux Nodeのみで利用可能で、カーネル5.13以降が必要です。
移行を検討する際は、特にNodePortサービスに関連する一部の機能が、iptablesモードとnftablesモードで完全に同じように動作しない点に注意が必要です。
デフォルト設定の変更が必要かどうかは、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/networking/virtual-ips/#migrating-from-iptables-mode-to-nftables&#34;&gt;移行ガイド&lt;/a&gt;で確認してください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-network&#34;&gt;SIG Network&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3866&#34;&gt;KEP #3866&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;永続ボリュームのreclaimポリシーに関する変更&#34;&gt;永続ボリュームのreclaimポリシーに関する変更&lt;/h3&gt;
&lt;p&gt;Kubernetes v1.31では、PersistentVolumeのreclaimポリシーを常に尊重する機能がベータになりました。
この機能強化により、関連するPersistentVolumeClaim(PVC)が削除された後でも、PersistentVolume(PV)のreclaimポリシーが確実に適用されるようになり、ボリュームの漏洩を防止します。&lt;/p&gt;
&lt;p&gt;これまでは、PVとPVCのどちらが先に削除されたかによって、特定の条件下でPVに設定されたreclaimポリシーが無視されることがありました。
その結果、reclaimポリシーが&amp;quot;Delete&amp;quot;に設定されていても、外部インフラの対応するストレージリソースが削除されないケースがありました。
これにより、一貫性の欠如やリソースのリークが発生する可能性がありました。&lt;/p&gt;
&lt;p&gt;この機能の導入により、PVとPVCの削除順序に関係なく、reclaimポリシーの&amp;quot;Delete&amp;quot;が確実に実行され、バックエンドインフラから基盤となるストレージオブジェクトが削除されることがKubernetesによって保証されるようになりました。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-storage&#34;&gt;SIG Storage&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/2644&#34;&gt;KEP #2644&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;バインドされたサービスアカウントトークンの改善&#34;&gt;バインドされたサービスアカウントトークンの改善&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ServiceAccountTokenNodeBinding&lt;/code&gt;機能が、v1.31でベータに昇格しました。
この機能により、PodではなくNodeにのみバインドされたトークンを要求できるようになりました。
このトークンには、Node情報が含まれており、トークンが使用される際にNodeの存在を検証します。
詳しくは、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-tokens&#34;&gt;バインドされたサービスアカウントトークンのドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-auth&#34;&gt;SIG Auth&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4193&#34;&gt;KEP #4193&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;複数のサービスcidrのサポート&#34;&gt;複数のサービスCIDRのサポート&lt;/h3&gt;
&lt;p&gt;v1.31では、複数のサービスCIDRを持つクラスターのサポートがベータになりました(デフォルトでは無効)。&lt;/p&gt;
&lt;p&gt;Kubernetesクラスターには、IPアドレスを使用する複数のコンポーネントがあります: Node、Pod、そしてServiceです。
NodeとPodのIP範囲は、それぞれインフラストラクチャやネットワークプラグインに依存するため、動的に変更できます。
しかし、サービスのIP範囲は、クラスター作成時にkube-apiserverのハードコードされたフラグとして定義されていました。
長期間運用されているクラスターや大規模なクラスターでは、管理者が割り当てられたサービスCIDR範囲を拡張、縮小、あるいは完全に置き換える必要があり、IPアドレスの枯渇が問題となっていました。
これらの操作は正式にサポートされておらず、複雑で繊細なメンテナンス作業を通じて行われ、しばしばクラスタのダウンタイムを引き起こしていました。
この新機能により、ユーザーとクラスター管理者はダウンタイムなしでサービスCIDR範囲を動的に変更できるようになります。&lt;/p&gt;
&lt;p&gt;この機能の詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/networking/virtual-ips/#ip-address-objects&#34;&gt;仮想IPとサービスプロキシ&lt;/a&gt;のドキュメントページをご覧ください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-network&#34;&gt;SIG Network&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/1880&#34;&gt;KEP #1880&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;サービスのトラフィック分散機能&#34;&gt;サービスのトラフィック分散機能&lt;/h3&gt;
&lt;p&gt;サービスのトラフィック分散機能が、v1.31でベータとなり、デフォルトで有効になりました。&lt;/p&gt;
&lt;p&gt;SIG Networkingは、サービスネットワーキングにおける最適なユーザー体験とトラフィック制御機能を見出すため、何度も改良を重ねてきました。
その結果、サービス仕様に&lt;code&gt;trafficDistribution&lt;/code&gt;フィールドを実装しました。
このフィールドは、ルーティングの決定を行う際に、基盤となる実装が考慮すべき指針として機能します。&lt;/p&gt;
&lt;p&gt;この機能の詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2024/04/17/kubernetes-v1-30-release/#traffic-distribution-for-services-sig-network-https-github-com-kubernetes-community-tree-master-sig-network&#34;&gt;1.30リリースブログ&lt;/a&gt;をお読みいただくか、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/services-networking/service/#traffic-distribution&#34;&gt;サービス&lt;/a&gt;のドキュメントページをご覧ください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-network&#34;&gt;SIG Network&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4444&#34;&gt;KEP #4444&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;kubernetes-volumeattributesclassによるボリューム修正機能&#34;&gt;Kubernetes VolumeAttributesClassによるボリューム修正機能&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/storage/volume-attributes-classes/&#34;&gt;VolumeAttributesClass&lt;/a&gt; APIが、v1.31でベータになります。
VolumeAttributesClassは、プロビジョニングされたIOのような動的なボリュームパラメータを修正するための、Kubernetes独自の汎用APIを提供します。
これにより、プロバイダーがサポートしている場合、ワークロードはコストとパフォーマンスのバランスを取るために、オンラインでボリュームを垂直スケーリングできるようになります。
この機能は、Kubernetes 1.29からアルファとして提供されていました。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-storage&#34;&gt;SIG Storage&lt;/a&gt;が主導し、&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3751&#34;&gt;KEP #3751&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h2 id=&#34;アルファとして導入された新機能&#34;&gt;アルファとして導入された新機能&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;これは、v1.31のリリースでアルファとして導入された主な改善点の一部です。&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;アクセラレータなどのハードウェア管理を改善する新しいdra-api&#34;&gt;アクセラレータなどのハードウェア管理を改善する新しいDRA API&lt;/h3&gt;
&lt;p&gt;Kubernetes v1.31では、動的リソース割り当て(DRA)APIとその設計が更新されました。
この更新の主な焦点は構造化パラメータにあります。
これにより、リソース情報とリクエストがKubernetesとクライアントに対して透明になり、クラスタのオートスケーリングなどの機能の実装が可能になります。
kubeletのDRAサポートも更新され、kubeletとコントロールプレーン間のバージョンの違いに対応できるようになりました。
構造化パラメータにより、スケジューラはPodのスケジューリング時にResourceClaimを割り当てます。
DRAドライバコントローラによる割り当ては、現在「クラシックDRA」と呼ばれる方法でも引き続きサポートされています。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31では、クラシックDRAに&lt;code&gt;DRAControlPlaneController&lt;/code&gt;という別のフィーチャーゲートが用意されており、これを明示的に有効にする必要があります。
このコントロールプレーンコントローラーを使用することで、DRAドライバは構造化パラメータではまだサポートされていない割り当てポリシーを実装できます。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3063&#34;&gt;KEP #3063&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;イメージボリュームのサポート&#34;&gt;イメージボリュームのサポート&lt;/h3&gt;
&lt;p&gt;Kubernetesコミュニティは、将来的に人工知能(AI)や機械学習(ML)のユースケースをより多く実現することを目指しています。&lt;/p&gt;
&lt;p&gt;これらのユースケースを実現するための要件の1つは、Open Container Initiative(OCI)互換のイメージやアーティファクト(OCIオブジェクトと呼ばれる)を、ネイティブのボリュームソースとして直接サポートすることです。
これにより、ユーザーはOCI標準に集中でき、OCIレジストリを使用してあらゆるコンテンツを保存・配布できるようになります。&lt;/p&gt;
&lt;p&gt;そこで、v1.31では、OCIイメージをPod内のボリュームとして使用できる新しいアルファ機能が追加されました。
この機能により、ユーザーはPod内でイメージ参照をボリュームとして指定し、それをコンテナ内のボリュームマウントとして再利用できます。
この機能を試すには、&lt;code&gt;ImageVolume&lt;/code&gt;フィーチャーゲートを有効にする必要があります。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;と&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-storage&#34;&gt;SIG Storage&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4639&#34;&gt;KEP #4639&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;podステータスを通じたデバイスの健全性情報の公開&#34;&gt;Podステータスを通じたデバイスの健全性情報の公開&lt;/h3&gt;
&lt;p&gt;Podステータスを通じてデバイスの健全性情報を公開する機能が、v1.31で新しいアルファ機能として追加されました。デフォルトでは無効になっています。&lt;/p&gt;
&lt;p&gt;Kubernetes v1.31以前では、Podが故障したデバイスと関連付けられているかどうかを知る方法は、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#monitoring-device-plugin-resources&#34;&gt;PodResources API&lt;/a&gt;を使用することでした。&lt;/p&gt;
&lt;p&gt;この機能を有効にすると、各Pod の&lt;code&gt;.status&lt;/code&gt;内の各コンテナステータスに&lt;code&gt;allocatedResourcesStatus&lt;/code&gt;フィールドが追加されます。
&lt;code&gt;allocatedResourcesStatus&lt;/code&gt;フィールドは、コンテナに割り当てられた各デバイスの健全性情報を報告します。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4680&#34;&gt;KEP #4680&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;セレクターに基づいたより細かな認可&#34;&gt;セレクターに基づいたより細かな認可&lt;/h3&gt;
&lt;p&gt;この機能により、Webhookオーソライザーや将来の(現在は設計されていない)ツリー内オーソライザーが、ラベルやフィールドセレクターを使用するリクエストに限り、&lt;strong&gt;list&lt;/strong&gt;と&lt;strong&gt;watch&lt;/strong&gt;リクエストを許可できるようになります。
例えば、オーソライザーは次のような表現が可能になります: このユーザーはすべてのPodをリストできないが、&lt;code&gt;.spec.nodeName&lt;/code&gt;が特定の値に一致するPodはリストできる。
あるいは、ユーザーが名前空間内の&lt;code&gt;confidential: true&lt;/code&gt;とラベル付けされて&lt;strong&gt;いない&lt;/strong&gt;すべてのSecretを監視することを許可する。
CRDフィールドセレクター(これもv1.31でベータに移行)と組み合わせることで、より安全なNodeごとの拡張機能を作成することが可能になります。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-auth&#34;&gt;SIG Auth&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4601&#34;&gt;KEP #4601&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h3 id=&#34;匿名apiアクセスへの制限&#34;&gt;匿名APIアクセスへの制限&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;AnonymousAuthConfigurableEndpoints&lt;/code&gt;フィーチャーゲートを有効にすることで、ユーザーは認証設定ファイルを使用して、匿名リクエストがアクセスできるエンドポイントを設定できるようになりました。
これにより、匿名ユーザーにクラスタへの広範なアクセスを与えてしまうようなRBAC設定ミスから、ユーザー自身を守ることができます。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-auth&#34;&gt;SIG Auth&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4633&#34;&gt;KEP #4633&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h2 id=&#34;1-31における機能の昇格-非推奨化-および削除&#34;&gt;1.31における機能の昇格、非推奨化、および削除&lt;/h2&gt;
&lt;h3 id=&#34;gaへの昇格&#34;&gt;GAへの昇格&lt;/h3&gt;
&lt;p&gt;ここでは、GA(一般提供とも呼ばれる)に昇格したすべての機能を紹介します。新機能やアルファからベータへの昇格を含む完全な更新リストについては、リリースノートをご覧ください。&lt;/p&gt;
&lt;p&gt;このリリースでは、以下の11個の機能強化がGAに昇格しました:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3762&#34;&gt;PersistentVolume last phase transition time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/2305&#34;&gt;Metric cardinality enforcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3836&#34;&gt;Kube-proxy improved ingress connectivity reliability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4009&#34;&gt;Add CDI devices to device plugin API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4569&#34;&gt;Move cgroup v1 support into maintenance mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/24&#34;&gt;AppArmor support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3017&#34;&gt;PodHealthyPolicy for PodDisruptionBudget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3329&#34;&gt;Retriable and non-retriable Pod failures for Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3715&#34;&gt;Elastic Indexed Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/3335&#34;&gt;Allow StatefulSet to control start replica ordinal numbering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/2185&#34;&gt;Random Pod selection on ReplicaSet downscaling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;非推奨化と削除&#34;&gt;非推奨化と削除&lt;/h3&gt;
&lt;p&gt;Kubernetesの開発と成熟に伴い、プロジェクト全体の健全性のために、機能が非推奨化、削除、またはより良いものに置き換えられる場合があります。
このプロセスの詳細については、Kubernetesの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/reference/using-api/deprecation-policy/&#34;&gt;非推奨化と削除のポリシー&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h4 id=&#34;cgroup-v1のメンテナンスモードへの移行&#34;&gt;cgroup v1のメンテナンスモードへの移行&lt;/h4&gt;
&lt;p&gt;Kubernetesがコンテナオーケストレーションの変化に適応し続ける中、コミュニティはv1.31でcgroup v1のサポートをメンテナンスモードに移行することを決定しました。
この変更は、業界全体の&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/architecture/cgroups/&#34;&gt;cgroup v2&lt;/a&gt;への移行と歩調を合わせており、機能性、拡張性、そしてより一貫性のあるインターフェースの向上を提供します。
Kubernetesのメンテナンスモードとは、cgroup v1サポートに新機能が追加されないことを意味します。
重要なセキュリティ修正は引き続き提供されますが、バグ修正はベストエフォートとなり、重大なバグは可能な場合修正されますが、一部の問題は未解決のままとなる可能性があります。&lt;/p&gt;
&lt;p&gt;できるだけ早くcgroup v2への移行を開始することをお勧めします。
この移行はアーキテクチャに依存し、基盤となるオペレーティングシステムとコンテナランタイムがcgroup v2をサポートしていることを確認し、ワークロードとアプリケーションがcgroup v2で正しく機能することを検証するためのテストを含みます。&lt;/p&gt;
&lt;p&gt;問題が発生した場合は、&lt;a href=&#34;https://github.com/kubernetes/kubernetes/issues/new/choose&#34;&gt;issue&lt;/a&gt;を作成して報告してください。&lt;/p&gt;
&lt;p&gt;この機能は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;が&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4569&#34;&gt;KEP #4569&lt;/a&gt;の一環として開発しました。&lt;/p&gt;
&lt;h4 id=&#34;sha-1署名サポートに関する注意事項&#34;&gt;SHA-1署名サポートに関する注意事項&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://go.dev/doc/go1.18#sha1&#34;&gt;go1.18&lt;/a&gt;(2022年3月リリース)以降、crypto/x509ライブラリはSHA-1ハッシュ関数で署名された証明書を拒否するようになりました。
SHA-1は安全でないことが確立されており、公的に信頼された認証局は2015年以降SHA-1証明書を発行していません。
Kubernetesのコンテキストでは、アグリケーションAPIサーバーやWebhookに使用される私的な認証局を通じてSHA-1ハッシュ関数で署名されたユーザー提供の証明書が依然として存在する可能性があります。
SHA-1ベースの証明書を使用している場合は、環境に&lt;code&gt;GODEBUG=x509sha1=1&lt;/code&gt;を設定することで、明示的にそのサポートを有効にする必要があります。&lt;/p&gt;
&lt;p&gt;Goの&lt;a href=&#34;https://go.dev/blog/compat&#34;&gt;GODEBUGの互換性ポリシー&lt;/a&gt;に基づき、&lt;code&gt;x509sha1&lt;/code&gt; GODEBUGとSHA-1証明書のサポートは、&lt;a href=&#34;https://tip.golang.org/doc/go1.23&#34;&gt;go1.24で完全に削除される&lt;/a&gt;予定です。
go1.24は2025年前半にリリースされる予定です。
SHA-1証明書に依存している場合は、できるだけ早く移行を開始してください。&lt;/p&gt;
&lt;p&gt;SHA-1サポートの終了時期、Kubernetesリリースがgo1.24を採用する計画、およびメトリクスと監査ログを通じてSHA-1証明書の使用を検出する方法の詳細については、&lt;a href=&#34;https://github.com/kubernetes/kubernetes/issues/125689&#34;&gt;Kubernetes issue #125689&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h4 id=&#34;nodeの-status-nodeinfo-kubeproxyversion-フィールドの非推奨化-kep-4004-https-github-com-kubernetes-enhancements-issues-4004&#34;&gt;Nodeの&lt;code&gt;status.nodeInfo.kubeProxyVersion&lt;/code&gt;フィールドの非推奨化(&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4004&#34;&gt;KEP 4004&lt;/a&gt;)&lt;/h4&gt;
&lt;p&gt;Kubernetes v1.31では、Nodeの&lt;code&gt;.status.nodeInfo.kubeProxyVersion&lt;/code&gt;フィールドが非推奨となり、将来のリリースで削除される予定です。
このフィールドの値が正確ではなかった(そして現在も正確ではない)ため、非推奨化されています。
このフィールドはkubeletによって設定されますが、kubeletはkube-proxyのバージョンやkube-proxyが実行されているかどうかについて信頼できる情報を持っていません。&lt;/p&gt;
&lt;p&gt;v1.31では、&lt;code&gt;DisableNodeKubeProxyVersion&lt;/code&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/command-line-tools-reference/feature-gates/&#34;&gt;フィーチャーゲート&lt;/a&gt;がデフォルトで&lt;code&gt;true&lt;/code&gt;に設定され、kubeletは関連するNodeの&lt;code&gt;.status.kubeProxyVersion&lt;/code&gt;フィールドを設定しなくなります。&lt;/p&gt;
&lt;h4 id=&#34;クラウドプロバイダーとの全てのインツリー統合の削除&#34;&gt;クラウドプロバイダーとの全てのインツリー統合の削除&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/05/20/completing-cloud-provider-migration/&#34;&gt;以前の記事&lt;/a&gt;で強調したように、クラウドプロバイダー統合の最後に残っていたインツリーサポートがv1.31リリースの一部として削除されました。
これは、クラウドプロバイダーと統合できなくなったという意味ではありません。
ただし、外部統合を使用する推奨アプローチを&lt;strong&gt;必ず&lt;/strong&gt;使用する必要があります。
一部の統合はKubernetesプロジェクトの一部であり、他はサードパーティのソフトウェアです。&lt;/p&gt;
&lt;p&gt;この節目は、Kubernetes v1.26から始まった、全てのクラウドプロバイダー統合のKubernetesコアからの外部化プロセスの完了を示しています(&lt;a href=&#34;https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md&#34;&gt;KEP-2395&lt;/a&gt;)。
この変更により、Kubernetesは真にベンダー中立なプラットフォームに近づきます。&lt;/p&gt;
&lt;p&gt;クラウドプロバイダー統合の詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2023/12/14/cloud-provider-integration-changes/&#34;&gt;v1.29 クラウドプロバイダー統合機能のブログ記事&lt;/a&gt;をお読みください。
インツリーのコード削除に関する追加の背景については、(&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2023/11/16/kubernetes-1-29-upcoming-changes/#removal-of-in-tree-integrations-with-cloud-providers-kep-2395-https-kep-k8s-io-2395&#34;&gt;v1.29 非推奨化ブログ&lt;/a&gt;)をご確認ください。&lt;/p&gt;
&lt;p&gt;後者のブログには、v1.29以降のバージョンに移行する必要があるユーザーにとって有用な情報も含まれています。&lt;/p&gt;
&lt;h4 id=&#34;インツリープロバイダーのフィーチャーゲートの削除&#34;&gt;インツリープロバイダーのフィーチャーゲートの削除&lt;/h4&gt;
&lt;p&gt;Kubernetes v1.31では、以下のアルファフィーチャーゲートが削除されました: &lt;code&gt;InTreePluginAWSUnregister&lt;/code&gt;、&lt;code&gt;InTreePluginAzureDiskUnregister&lt;/code&gt;、&lt;code&gt;InTreePluginAzureFileUnregister&lt;/code&gt;、&lt;code&gt;InTreePluginGCEUnregister&lt;/code&gt;、&lt;code&gt;InTreePluginOpenStackUnregister&lt;/code&gt;、および&lt;code&gt;InTreePluginvSphereUnregister&lt;/code&gt;。
これらのフィーチャーゲートは、実際にコードベースから削除することなく、インツリーのボリュームプラグインが削除されたシナリオのテストを容易にするために導入されました。
Kubernetes 1.30でこれらのインツリーのボリュームプラグインが非推奨となったため、これらのフィーチャーゲートは冗長となり、もはや目的を果たさなくなりました。
唯一残っているCSIの移行ゲートは&lt;code&gt;InTreePluginPortworxUnregister&lt;/code&gt;で、これはPortworxのCSI移行が完了し、そのツリー内ボリュームプラグインの削除準備が整うまでアルファのままとなります。&lt;/p&gt;
&lt;h4 id=&#34;kubeletの-keep-terminated-pod-volumes-コマンドラインフラグの削除&#34;&gt;kubeletの&lt;code&gt;--keep-terminated-pod-volumes&lt;/code&gt;コマンドラインフラグの削除&lt;/h4&gt;
&lt;p&gt;2017年に非推奨となったkubeletのフラグ&lt;code&gt;--keep-terminated-pod-volumes&lt;/code&gt;が、v1.31リリースの一部として削除されました。&lt;/p&gt;
&lt;p&gt;詳細については、Pull Request &lt;a href=&#34;https://github.com/kubernetes/kubernetes/pull/122082&#34;&gt;#122082&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h4 id=&#34;cephfsボリュームプラグインの削除&#34;&gt;CephFSボリュームプラグインの削除&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/storage/volumes/#cephfs&#34;&gt;CephFSボリュームプラグイン&lt;/a&gt;がこのリリースで削除され、&lt;code&gt;cephfs&lt;/code&gt;ボリュームタイプは機能しなくなりました。&lt;/p&gt;
&lt;p&gt;代わりに、サードパーティのストレージドライバーとして&lt;a href=&#34;https://github.com/ceph/ceph-csi/&#34;&gt;CephFS CSIドライバー&lt;/a&gt;を使用することをお勧めします。
クラスターバージョンをv1.31にアップグレードする前にCephFSボリュームプラグインを使用していた場合は、新しいドライバーを使用するようにアプリケーションを再デプロイする必要があります。&lt;/p&gt;
&lt;p&gt;CephFSボリュームプラグインは、v1.28で正式に非推奨とマークされていました。&lt;/p&gt;
&lt;h4 id=&#34;ceph-rbdボリュームプラグインの削除&#34;&gt;Ceph RBDボリュームプラグインの削除&lt;/h4&gt;
&lt;p&gt;v1.31リリースでは、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/storage/volumes/#rbd&#34;&gt;Ceph RBDボリュームプラグイン&lt;/a&gt;とそのCSI移行サポートが削除され、&lt;code&gt;rbd&lt;/code&gt;ボリュームタイプは機能しなくなりました。&lt;/p&gt;
&lt;p&gt;代わりに、クラスターで&lt;a href=&#34;https://github.com/ceph/ceph-csi/&#34;&gt;RBD CSIドライバー&lt;/a&gt;を使用することをお勧めします。
クラスターバージョンをv1.31にアップグレードする前にCeph RBDボリュームプラグインを使用していた場合は、新しいドライバーを使用するようにアプリケーションを再デプロイする必要があります。&lt;/p&gt;
&lt;p&gt;Ceph RBDボリュームプラグインは、v1.28で正式に非推奨とマークされていました。&lt;/p&gt;
&lt;h4 id=&#34;kube-schedulerにおける非csiボリューム制限プラグインの非推奨化&#34;&gt;kube-schedulerにおける非CSIボリューム制限プラグインの非推奨化&lt;/h4&gt;
&lt;p&gt;v1.31リリースでは、すべての非CSIボリューム制限スケジューラープラグインが非推奨となり、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/scheduling/config/&#34;&gt;デフォルトプラグイン&lt;/a&gt;から既に非推奨となっているいくつかのプラグインが削除されます。
これには以下が含まれます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AzureDiskLimits&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CinderLimits&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EBSLimits&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GCEPDLimits&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらのボリュームタイプはCSIに移行されているため、代わりに&lt;code&gt;NodeVolumeLimits&lt;/code&gt;プラグインを使用することをお勧めします。
&lt;code&gt;NodeVolumeLimits&lt;/code&gt;プラグインは、削除されたプラグインと同じ機能を処理できます。
&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/reference/scheduling/config/&#34;&gt;スケジューラーの設定&lt;/a&gt;で明示的にこれらのプラグインを使用している場合は、非推奨のプラグインを&lt;code&gt;NodeVolumeLimits&lt;/code&gt;プラグインに置き換えてください。
&lt;code&gt;AzureDiskLimits&lt;/code&gt;、&lt;code&gt;CinderLimits&lt;/code&gt;、&lt;code&gt;EBSLimits&lt;/code&gt;、&lt;code&gt;GCEPDLimits&lt;/code&gt;プラグインは将来のリリースで削除される予定です。&lt;/p&gt;
&lt;p&gt;これらのプラグインは、Kubernetes v1.14以降非推奨となっていたため、デフォルトのスケジューラープラグインリストから削除されます。&lt;/p&gt;
&lt;h3 id=&#34;リリースノートとアップグレードに必要なアクション&#34;&gt;リリースノートとアップグレードに必要なアクション&lt;/h3&gt;
&lt;p&gt;Kubernetes v1.31リリースの詳細については、&lt;a href=&#34;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.31.md&#34;&gt;リリースノート&lt;/a&gt;をご確認ください。&lt;/p&gt;
&lt;h4 id=&#34;schedulerqueueinghints-が有効な場合-スケジューラーはqueueinghintを使用するようになりました&#34;&gt;&lt;code&gt;SchedulerQueueingHints&lt;/code&gt;が有効な場合、スケジューラーはQueueingHintを使用するようになりました&lt;/h4&gt;
&lt;p&gt;スケジューラーに、Pod/Updatedイベントに登録されたQueueingHintを使用して、以前スケジュール不可能だったPodの更新がそれらをスケジュール可能にしたかどうかを判断するサポートが追加されました。
この新機能は、フィーチャーゲート&lt;code&gt;SchedulerQueueingHints&lt;/code&gt;が有効な場合に動作します。&lt;/p&gt;
&lt;p&gt;これまで、スケジュール不可能なPodが更新された場合、スケジューラは常にPodをキュー(&lt;code&gt;activeQ&lt;/code&gt; / &lt;code&gt;backoffQ&lt;/code&gt;)に戻していました。
しかし、Podへのすべての更新がPodをスケジュール可能にするわけではありません。
特に、現在の多くのスケジューリング制約が不変であることを考慮すると、そうではありません。
新しい動作では、スケジュール不可能なPodが更新されると、スケジューリングキューはQueueingHint(s)を使用して、その更新がPodをスケジュール可能にする可能性があるかどうかをチェックします。
少なくとも1つのQueueingHintが&lt;code&gt;Queue&lt;/code&gt;を返した場合にのみ、それらを&lt;code&gt;activeQ&lt;/code&gt;または&lt;code&gt;backoffQ&lt;/code&gt;に再度キューイングします。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;カスタムスケジューラープラグイン開発者向けの必要なアクション&lt;/strong&gt;:
プラグインからの拒否が、スケジュールされていないPod自体の更新によって解決される可能性がある場合、プラグインはPod/Updateイベントに対するQueueingHintを実装する必要があります。
例えば&lt;code&gt;schedulable=false&lt;/code&gt;ラベルを持つPodを拒否するカスタムプラグインを開発したとします。
&lt;code&gt;schedulable=false&lt;/code&gt;ラベルを持つPodは、&lt;code&gt;schedulable=false&lt;/code&gt;ラベルが削除されるとスケジュール可能になります。このプラグインはPod/Updateイベントに対するQueueingHintを実装し、スケジュールされていないPodでそのようなラベルの変更が行われた場合にQueueを返すようにします。
詳細については、Pull Request &lt;a href=&#34;https://github.com/kubernetes/kubernetes/pull/122234&#34;&gt;#122234&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h4 id=&#34;kubeletの-keep-terminated-pod-volumes-コマンドラインフラグの削除-1&#34;&gt;kubeletの&lt;code&gt;--keep-terminated-pod-volumes&lt;/code&gt;コマンドラインフラグの削除&lt;/h4&gt;
&lt;p&gt;2017年に非推奨となったkubeletのフラグ&lt;code&gt;--keep-terminated-pod-volumes&lt;/code&gt;が、v1.31リリースの一部として削除されました。&lt;/p&gt;
&lt;p&gt;詳細については、Pull Request &lt;a href=&#34;https://github.com/kubernetes/kubernetes/pull/122082&#34;&gt;#122082&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&#34;入手方法&#34;&gt;入手方法&lt;/h2&gt;
&lt;p&gt;Kubernetes v1.31は、&lt;a href=&#34;https://github.com/kubernetes/kubernetes/releases/tag/v1.31.0&#34;&gt;GitHub&lt;/a&gt;または&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/releases/download/&#34;&gt;Kubernetesダウンロードページ&lt;/a&gt;からダウンロードできます。&lt;/p&gt;
&lt;p&gt;Kubernetesを始めるには、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/tutorials/&#34;&gt;対話式のチュートリアル&lt;/a&gt;をチェックするか、&lt;a href=&#34;https://minikube.sigs.k8s.io/&#34;&gt;minikube&lt;/a&gt;を使用してローカルKubernetesクラスタを実行してください。
また、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/setup/independent/create-cluster-kubeadm/&#34;&gt;kubeadm&lt;/a&gt;を使用して簡単にv1.31をインストールすることもできます。&lt;/p&gt;
&lt;h2 id=&#34;リリースチーム&#34;&gt;リリースチーム&lt;/h2&gt;
&lt;p&gt;Kubernetesは、そのコミュニティのサポート、献身、そして懸命な努力に支えられて実現しています。
各リリースチームは、皆様が頼りにしているKubernetesリリースを構成する多くの要素を構築するために協力して働く、献身的なコミュニティボランティアで構成されています。
これには、コード自体からドキュメンテーション、プロジェクト管理に至るまで、コミュニティのあらゆる分野から専門的なスキルを持つ人々が必要です。&lt;/p&gt;
&lt;p&gt;私たちは、Kubernetes v1.31リリースをコミュニティに提供するために多くの時間を費やしてくださった&lt;a href=&#34;https://github.com/kubernetes/sig-release/blob/master/releases/release-1.31/release-team.md&#34;&gt;リリースチーム&lt;/a&gt;全体に感謝の意を表します。
リリースチームのメンバーは、初めてShadowとして参加する人から、複数のリリースサイクルを経験したベテランのチームリーダーまで多岐にわたります。
特に、リリースリーダーのAngelos Kolaitisには特別な感謝の意を表します。
リリースサイクルを成功に導き、チーム全体をサポートし、各メンバーが最大限に貢献できる環境を整えると同時に、リリースプロセスの改善にも取り組んでくれました。&lt;/p&gt;
&lt;h2 id=&#34;プロジェクトの進捗速度&#34;&gt;プロジェクトの進捗速度&lt;/h2&gt;
&lt;p&gt;CNCF K8s DevStatsプロジェクトは、Kubernetesと様々なサブプロジェクトの進捗に関する興味深いデータポイントを集計しています。
これには、個人の貢献から貢献している企業の数まで、このエコシステムの進化に関わる取り組みの深さと広さを示す様々な情報が含まれています。&lt;/p&gt;
&lt;p&gt;14週間(5月7日から8月13日まで)続いたv1.31リリースサイクルでは、113の異なる企業と528の個人がKubernetesに貢献しました。&lt;/p&gt;
&lt;p&gt;クラウドネイティブエコシステム全体では、379の企業から合計2268人の貢献者がいます。
これは、前回のリリースサイクルと比較して、貢献者数が驚異の63%増加しました！&lt;/p&gt;
&lt;p&gt;このデータの出典:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&amp;amp;from=1715032800000&amp;amp;to=1723586399000&amp;amp;var-period=d28&amp;amp;var-repogroup_name=Kubernetes&amp;amp;var-repo_name=kubernetes%2Fkubernetes&#34;&gt;Kubernetesに貢献している企業&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&amp;amp;from=1715032800000&amp;amp;to=1723586399000&amp;amp;var-period=d28&amp;amp;var-repogroup_name=All&amp;amp;var-repo_name=kubernetes%2Fkubernetes&#34;&gt;エコシステム全体への貢献&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここでいう貢献とは、コミットの作成、コードレビュー、コメント、IssueやPRの作成、PRのレビュー(ブログやドキュメントを含む)、またはIssueやPRへのコメントを指します。&lt;/p&gt;
&lt;p&gt;貢献に興味がある方は、&lt;a href=&#34;https://www.kubernetes.dev/docs/guide/#getting-started&#34;&gt;このページ&lt;/a&gt;を訪れて始めてください。&lt;/p&gt;
&lt;p&gt;Kubernetesプロジェクトとコミュニティ全体の進捗速度についてもっと知りたい方は、&lt;a href=&#34;https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&amp;amp;var-period=m&amp;amp;var-repogroup_name=All&#34;&gt;DevStatsをチェック&lt;/a&gt;してください。&lt;/p&gt;
&lt;h2 id=&#34;イベント情報&#34;&gt;イベント情報&lt;/h2&gt;
&lt;p&gt;2024年8月から11月にかけて開催予定のKubernetesとクラウドネイティブ関連のイベントをご紹介します。KubeCon、KCD、その他世界各地で開催される注目のカンファレンスが含まれています。Kubernetesコミュニティの最新情報を入手し、交流を深めましょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2024年8月&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-open-source-summit-ai-dev-china/&#34;&gt;&lt;strong&gt;KubeCon + CloudNativeCon + Open Source Summit China 2024&lt;/strong&gt;&lt;/a&gt;: 2024年8月21日-23日 | 香港&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/kubeday-japan/&#34;&gt;&lt;strong&gt;KubeDay Japan&lt;/strong&gt;&lt;/a&gt;: 2024年8月27日 | 東京、日本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2024年9月&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-lahore-presents-kcd-lahore-pakistan-2024/&#34;&gt;&lt;strong&gt;KCD Lahore - Pakistan 2024&lt;/strong&gt;&lt;/a&gt;: 2024年9月1日 | ラホール、パキスタン&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-stockholm-presents-kubertenes-birthday-bash-stockholm-a-couple-of-months-late/&#34;&gt;&lt;strong&gt;KuberTENes Birthday Bash Stockholm&lt;/strong&gt;&lt;/a&gt;: 2024年9月5日 | ストックホルム、スウェーデン&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-australia-presents-kcd-sydney-24/&#34;&gt;&lt;strong&gt;KCD Sydney &#39;24&lt;/strong&gt;&lt;/a&gt;: 2024年9月5日-6日 | シドニー、オーストラリア&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-washington-dc-presents-kcd-washington-dc-2024/&#34;&gt;&lt;strong&gt;KCD Washington DC 2024&lt;/strong&gt;&lt;/a&gt;: 2024年9月24日 | ワシントンDC、アメリカ合衆国&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-porto-presents-kcd-porto-2024/&#34;&gt;&lt;strong&gt;KCD Porto 2024&lt;/strong&gt;&lt;/a&gt;: 2024年9月27日-28日 | ポルト、ポルトガル&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2024年10月&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/kubeday-australia/&#34;&gt;&lt;strong&gt;KubeDay Australia&lt;/strong&gt;&lt;/a&gt;: 2024年10月1日 | メルボルン、オーストラリア&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-austria-presents-kcd-austria-2024/&#34;&gt;&lt;strong&gt;KCD Austria 2024&lt;/strong&gt;&lt;/a&gt;: 2024年10月8日-10日 | ウィーン、オーストリア&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.cncf.io/events/details/cncf-kcd-uk-presents-kubernetes-community-days-uk-london-2024/&#34;&gt;&lt;strong&gt;KCD UK - London 2024&lt;/strong&gt;&lt;/a&gt;: 2024年10月22日-23日 | グレーターロンドン、イギリス&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2024年11月&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/&#34;&gt;&lt;strong&gt;KubeCon + CloudNativeCon North America 2024&lt;/strong&gt;&lt;/a&gt;: 2024年11月12日-15日 | ソルトレイクシティ、アメリカ合衆国&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/kubernetes-on-edge-day/&#34;&gt;&lt;strong&gt;Kubernetes on EDGE Day North America&lt;/strong&gt;&lt;/a&gt;: 2024年11月12日 | ソルトレイクシティ、アメリカ合衆国&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;次期リリースに関するウェビナーのお知らせ&#34;&gt;次期リリースに関するウェビナーのお知らせ&lt;/h2&gt;
&lt;p&gt;2024年9月12日(木)午前10時(太平洋時間)に開催されるKubernetes v1.31リリースチームメンバーによるウェビナーにご参加ください。このリリースの主要な機能や、アップグレード計画に役立つ非推奨化および削除された機能について学ぶことができます。
詳細および登録については、CNCFオンラインプログラムサイトの&lt;a href=&#34;https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-131-release/&#34;&gt;イベントページ&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&#34;参加方法&#34;&gt;参加方法&lt;/h2&gt;
&lt;p&gt;Kubernetesに関わる最も簡単な方法は、あなたの興味に合った&lt;a href=&#34;https://github.com/kubernetes/community/blob/master/sig-list.md&#34;&gt;Special Interest Groups(SIG)&lt;/a&gt;のいずれかに参加することです。
Kubernetesコミュニティに向けて何か発信したいことはありますか？
毎週の&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/communication&#34;&gt;コミュニティミーティング&lt;/a&gt;や、以下のチャンネルであなたの声を共有してください。
継続的なフィードバックとサポートに感謝いたします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最新情報はX(旧Twitter)の&lt;a href=&#34;https://x.com/kubernetesio&#34;&gt;@Kubernetesio&lt;/a&gt;をフォローしてください&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://discuss.kubernetes.io/&#34;&gt;Discuss&lt;/a&gt;でコミュニティディスカッションに参加してください&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://slack.k8s.io/&#34;&gt;Slack&lt;/a&gt;でコミュニティに参加してください&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://stackoverflow.com/questions/tagged/kubernetes&#34;&gt;Stack Overflow&lt;/a&gt;で質問したり、回答したりしてください&lt;/li&gt;
&lt;li&gt;あなたのKubernetesに関する&lt;a href=&#34;https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform&#34;&gt;ストーリー&lt;/a&gt;を共有してください&lt;/li&gt;
&lt;li&gt;Kubernetesの最新情報は&lt;a href=&#34;https://kubernetes.io/blog/&#34;&gt;ブログ&lt;/a&gt;でさらに詳しく読むことができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/sig-release/tree/master/release-team&#34;&gt;Kubernetesリリースチーム&lt;/a&gt;についてもっと学んでください&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>SIG Nodeの紹介</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/20/sig-node-spotlight-2024/</link>
      <pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/20/sig-node-spotlight-2024/</guid>
      <description>
        
        
        &lt;p&gt;コンテナオーケストレーションの世界で、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja&#34;&gt;Kubernetes&lt;/a&gt;は圧倒的な存在感を示しており、世界中で最も複雑で動的なアプリケーションの一部を動かしています。
その裏では、Special Interest Groups(SIG)のネットワークがKubernetesの革新と安定性を牽引しています。&lt;/p&gt;
&lt;p&gt;今日は、SIG Nodeのメンバーである&lt;a href=&#34;https://www.linkedin.com/in/matthias-bertschy-b427b815/&#34;&gt;Matthias Bertschy&lt;/a&gt;、&lt;a href=&#34;https://www.linkedin.com/in/gunju-kim-916b33190/&#34;&gt;Gunju Kim&lt;/a&gt;、&lt;a href=&#34;https://www.linkedin.com/in/sergeykanzhelev/&#34;&gt;Sergey Kanzhelev&lt;/a&gt;にお話を伺い、彼らの役割、課題、そして&lt;a href=&#34;https://github.com/kubernetes/community/blob/master/sig-node/README.md&#34;&gt;SIG Node&lt;/a&gt;内の注目すべき取り組みについて光を当てていきます。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;複数の回答者による共同回答の場合は、回答者全員のイニシャルで表記します。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;自己紹介&#34;&gt;自己紹介&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 本日はお時間をいただき、ありがとうございます。まず、自己紹介とSIG Node内での役割について簡単に教えていただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Matthias:&lt;/strong&gt; Matthias Bertschyと申します。フランス人で、フランスアルプスの近く、ジュネーブ湖のそばに住んでいます。2017年からKubernetesのコントリビューターとして活動し、SIG Nodeのレビュアー、そして&lt;a href=&#34;https://docs.prow.k8s.io/docs/overview/&#34;&gt;Prow&lt;/a&gt;のメンテナーを務めています。現在は、&lt;a href=&#34;https://www.armosec.io/&#34;&gt;ARMO&lt;/a&gt;というセキュリティスタートアップでシニアKubernetes開発者として働いています。ARMOは、&lt;a href=&#34;https://www.cncf.io/projects/kubescape/&#34;&gt;Kubescape&lt;/a&gt;というプロジェクトをCNCFに寄贈しました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/Lake_Geneva_and_the_Alps.jpg&#34; alt=&#34;ジュネーブ湖とアルプス&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gunju:&lt;/strong&gt; Gunju Kimと申します。&lt;a href=&#34;https://www.navercorp.com/naver/naverMain&#34;&gt;NAVER&lt;/a&gt;でソフトウェアエンジニアとして働いており、検索サービス用のクラウドプラットフォームの開発に注力しています。2021年から空き時間を使ってKubernetesプロジェクトにコントリビュートしています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sergey:&lt;/strong&gt; Sergey Kanzhelevと申します。3年間Kubernetesと&lt;a href=&#34;https://cloud.google.com/kubernetes-engine&#34;&gt;Google Kubernetes Engine&lt;/a&gt;に携わり、長年オープンソースプロジェクトに取り組んできました。現在はSIG Nodeの議長を務めています。&lt;/p&gt;
&lt;h2 id=&#34;sig-nodeについて&#34;&gt;SIG Nodeについて&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; ありがとうございます！Kubernetesエコシステム内でのSIG Nodeの責任について、読者の方々に概要を説明していただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; SIG NodeはKubernetesで最初に、あるいは最初期に設立されたSIGの1つです。このSIGは、KubernetesとNodeリソースとのすべてのやり取り、そしてNode自体のメンテナンスに責任を持っています。これはかなり広範囲に及び、SIGはKubernetesのコードベースの大部分を所有しています。この広範な所有権のため、SIG NodeはSIG Network、SIG Storage、SIG Securityなど他のSIGと常に連絡を取り合っており、Kubernetesの新機能や開発のほとんどが何らかの形でSIG Nodeに関わっています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit&lt;/strong&gt;: SIG NodeはKubernetesのパフォーマンスと安定性にどのように貢献していますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; Kubernetesは、安価なハードウェアを搭載した小型の物理VMから、大規模なAI/ML最適化されたGPU搭載Nodeまで、さまざまなサイズと形状のNodeで動作します。Nodeは数か月オンラインのままの場合もあれば、クラウドプロバイダーの余剰コンピューティングで実行されているため、短命で任意のタイミングでプリエンプトされる可能性もあります。&lt;/p&gt;
&lt;p&gt;Node上のKubernetesエージェントである&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/overview/components/#kubelet&#34;&gt;&lt;code&gt;kubelet&lt;/code&gt;&lt;/a&gt;は、これらすべての環境で確実に動作する必要があります。
近年、&lt;code&gt;kubelet&lt;/code&gt;の操作パフォーマンスの重要性が増しています。
その理由は二つあります。
一つは、Kubernetesが通信や小売業などの分野で、より小規模なNodeで使用されるようになってきており、可能な限り小さなリソース消費(フットプリント)で動作することが求められているからです。
もう一つは、AI/MLワークロードでは各Nodeが非常に高価なため、操作の遅延がわずか1秒でも計算コストに大きな影響を与える可能性があるからです。&lt;/p&gt;
&lt;h2 id=&#34;課題と機会&#34;&gt;課題と機会&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; SIG Nodeが今後直面すると予想される課題や可能性について、どのようなものがあるでしょうか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; Kubernetesが誕生から10年を迎え、次の10年に向かう中で、新しい種類のワークロードへの対応が強く求められています。SIG Nodeはこの取り組みで重要な役割を果たすことになるでしょう。後ほど詳しく説明しますが、サイドカーのKEPは、こうした新しいタイプのワークロードをサポートするための取り組みの一例です。&lt;/p&gt;
&lt;p&gt;今後数年間の主な課題は、既存の機能の品質と後方互換性を維持しつつ、いかに革新を続けていくかということです。
SIG Nodeは、これからもKubernetesの開発において中心的な役割を担い続けるでしょう。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; SIG Nodeで現在取り組んでいる研究や開発分野の中で、特に注目しているものはありますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 新しいタイプのワークロードへの対応は、私たちにとって非常に興味深い分野です。最近取り組んでいるサイドカーコンテナの研究はその好例といえるでしょう。サイドカーは、アプリケーションの中核となるコードを変更することなく、その機能を拡張できる柔軟なソリューションを提供します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; SIG Nodeを維持する上で直面した課題と、それをどのように克服したかを教えてください。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; SIG Nodeが直面する最大の課題は、その広範な責任範囲と数多くの機能要望への対応です。この課題に取り組むため、私たちは新たなレビュアーの参加を積極的に呼びかけています。また、常にプロセスの改善に努め、フィードバックに迅速に対応できる体制を整えています。さらに、各リリースの後にはSIG Nodeのミーティングでフィードバックセッションを開催し、問題点や改善が必要な分野を特定し、具体的な行動計画を立てています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; SIG Nodeが現在注目している技術や、Kubernetesへの導入を検討している新しい機能などはありますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; SIG Nodeは、Kubernetesが依存しているさまざまなコンポーネントの開発に積極的に関与し、その進展を注意深く見守っています。これには、&lt;a href=&#34;(/ja/docs/setup/production-environment/container-runtimes/)&#34;&gt;コンテナランタイム&lt;/a&gt;(&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;など)やOSの機能が含まれます。例えば、現在 &lt;em&gt;cgroup v1&lt;/em&gt; の廃止と削除が迫っていますが、これに対してKubernetesユーザーが円滑に移行できるよう、SIG NodeとKubernetesプロジェクト全体で取り組んでいます。また、containerdがバージョン&lt;code&gt;2.0&lt;/code&gt;をリリースする予定ですが、これには非推奨機能の削除が含まれており、Kubernetesユーザーにも影響が及ぶと考えられます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; SIG Nodeのメンテナーとしての経験の中で、特に誇りに思う思い出深い経験や成果を共有していただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mathias:&lt;/strong&gt; 最高の瞬間は、私の最初のKEP(&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/workloads/pods/pod-lifecycle/#container-probes&#34;&gt;&lt;code&gt;startupProbe&lt;/code&gt;&lt;/a&gt;の導入)がついにGA(General Availability)に昇格したときだと思います。また、私の貢献がコントリビューターによって日々使用されているのを見るのも楽しいです。例えば、スカッシュコミットにもかかわらずLGTMを保持するために使用されるGitHubツリーハッシュを含むコメントなどです。&lt;/p&gt;
&lt;h2 id=&#34;サイドカーコンテナ&#34;&gt;サイドカーコンテナ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; Kubernetesの文脈におけるサイドカーコンテナの概念とその進化について、もう少し詳しく教えていただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/workloads/pods/sidecar-containers/&#34;&gt;サイドカーコンテナ&lt;/a&gt;の概念は、Kubernetesが複合コンテナのアイデアを導入した2015年にさかのぼります。同じPod内でメインのアプリケーションコンテナと並行して実行されるこれらの追加コンテナは、コアのコードベースを変更することなくアプリケーションの機能を拡張・強化する方法として見られていました。サイドカーの初期の採用者はカスタムスクリプトと設定を使用して管理していましたが、このアプローチは一貫性とスケーラビリティの面で課題がありました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; サイドカーコンテナが特に有益な具体的なユースケースや例を共有していただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; サイドカーコンテナは、さまざまな方法でアプリケーションの機能を強化するために使用できる多用途なツールです:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ロギングとモニタリング:&lt;/strong&gt; サイドカーコンテナを使用して、Pod内の主要アプリケーションコンテナからログとメトリクスを収集し、中央のロギングおよびモニタリングシステムに送信できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;トラフィックのフィルタリングとルーティング:&lt;/strong&gt; サイドカーコンテナを使用して、Pod内の主要アプリケーションコンテナとの間のトラフィックをフィルタリングおよびルーティングできます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;暗号化と復号化:&lt;/strong&gt; サイドカーコンテナを使用して、Pod内の主要アプリケーションコンテナと外部サービスの間で流れるデータを暗号化および復号化できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;データ同期:&lt;/strong&gt; サイドカーコンテナを使用して、Pod内の主要アプリケーションコンテナと外部データベースやサービスの間でデータを同期できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;フォールトインジェクション:&lt;/strong&gt; サイドカーコンテナを使用して、Pod内の主要アプリケーションコンテナに障害を注入し、障害に対する耐性をテストできます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 提案によると、一部の企業がサイドカー機能を追加したKubernetesのフォークを使用しているそうです。この機能の採用状況やコミュニティの関心度について、何か見解をお聞かせいただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 採用率を測定する具体的な指標はありませんが、KEPはコミュニティから大きな関心を集めています。特にIstioのようなサービスメッシュベンダーは、アルファテストフェーズに積極的に参加しました。KEPの可視性は、多数のブログ投稿、インタビュー、講演、ワークショップを通じてさらに実証されています。KEPは、ネットワークプロキシ、ロギングシステム、セキュリティ対策など、KubernetesのPod内のメインコンテナと並行して追加機能を提供する需要の増加に対応しています。コミュニティは、この機能の広範な採用を促進するために、既存のワークロードに対する容易な移行パスを提供することの重要性を認識しています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 本番環境でサイドカーコンテナを使用している企業の注目すべき例や成功事例はありますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 本番環境での広範な採用を期待するにはまだ早すぎます。1.29リリースは2024年1月11日からGoogle Kubernetes Engine(GKE)で利用可能になったばかりで、ユニバーサルインジェクターを介して効果的に有効化し使用する方法に関する包括的なドキュメントがまだ必要です。人気のあるサービスメッシュプラットフォームであるIstioも、ネイティブサイドカーを有効にするための適切なドキュメントが不足しているため、開発者がこの新機能を使い始めるのが難しくなっています。しかし、ネイティブサイドカーのサポートが成熟し、ドキュメントが改善されるにつれて、本番環境でのこの技術のより広範な採用が期待できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 提案では、サイドカー機能を実現するために初期化したコンテナに&lt;code&gt;restartPolicy&lt;/code&gt;フィールドを導入することが示されています。この方法で、先ほど挙げられた課題をどのように解決できるのか、詳しく教えていただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 初期化したコンテナに&lt;code&gt;restartPolicy&lt;/code&gt;フィールドを導入する提案は、既存のインフラストラクチャを活用し、サイドカーの管理を簡素化することで、概説された課題に対処します。このアプローチは、Podの仕様に新しいフィールドを追加することを避け、管理しやすさを保ちつつ、さらなる複雑さを回避します。既存の初期化したコンテナのメカニズムを利用することで、サイドカーはPodの起動時に通常の初期化コンテナと並行して実行でき、一貫した初期化の順序を確保します。ささらに、サイドカー用の初期化コンテナの再起動ポリシーを&lt;code&gt;Always&lt;/code&gt;に設定することで、メインアプリケーションコンテナが終了した後も、ロギングやモニタリングなどの継続的なサービスをワークロードの終了まで維持できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 初期化したコンテナに&lt;code&gt;restartPolicy&lt;/code&gt;フィールドを導入することは、既存のKubernetes設定との後方互換性にどのような影響を与えますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 初期化したコンテナに&lt;code&gt;restartPolicy&lt;/code&gt;フィールドを導入しても、既存のKubernetes設定との後方互換性は維持されます。既存の初期化したコンテナは従来通りに機能し続け、新しい&lt;code&gt;restartPolicy&lt;/code&gt;フィールドは、明示的にサイドカーとして指定された初期化したコンテナにのみ適用されます。このアプローチにより、既存のアプリケーションやデプロイメントが新機能によって中断されることはなく、同時にサイドカーをより効果的に定義および管理する方法が提供されます。&lt;/p&gt;
&lt;h2 id=&#34;sig-nodeへの貢献&#34;&gt;SIG Nodeへの貢献&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Arpit:&lt;/strong&gt; 新しいメンバー、特に初心者が貢献するのに最適な方法は何でしょうか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M/G/S:&lt;/strong&gt; 新しいメンバーや初心者は、サイドカーに関するKEP(Kubernetes Enhancement Proposal)に対して、以下の方法で貢献できます:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;認知度の向上:&lt;/strong&gt; サイドカーの利点と使用例を紹介するコンテンツを作成します。これにより、他の人々にこの機能の理解を深めてもらい、採用を促すことができます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;フィードバックの提供:&lt;/strong&gt; サイドカーの使用経験(良い点も悪い点も)を共有してください。このフィードバックは、機能の改善や使いやすさの向上に役立ちます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ユースケースの共有:&lt;/strong&gt; 本番環境でサイドカーを使用している場合は、その経験を他の人と共有してください。実際の使用例を示すことで、この機能の価値を実証し、他の人々の採用を促進できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ドキュメントの改善:&lt;/strong&gt; この機能のドキュメントの明確化や拡充にご協力ください。より分かりやすいドキュメントは、他の人々がサイドカーを理解し、活用する助けになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;サイドカーに関するKEP以外にも、SIG Nodeではより多くの貢献者を必要としている分野があります:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;テストカバレッジの向上:&lt;/strong&gt; SIG Nodeでは、Kubernetesコンポーネントのテストカバレッジを継続的に改善する方法を模索しています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CI(継続的インテグレーション)の維持:&lt;/strong&gt; SIG Nodeは、Kubernetesコンポーネントが様々な状況下で期待通りに動作することを確認するため、一連のエンドツーエンド(e2e)テストを管理しています。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;結論&#34;&gt;結論&lt;/h1&gt;
&lt;p&gt;SIG Nodeは、Kubernetesの発展において重要な役割を果たしています。
クラウドネイティブ・コンピューティングの絶えず変化する環境の中で、Kubernetesの信頼性と適応性を確保し続けています。
Matthias、Gunju、Sergeyといった献身的なメンバーが先頭に立ち、SIG Nodeは革新の最前線に立ち続けています。
彼らの努力により、Kubernetesは新たな地平を目指して前進し続けているのです。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetesの10年間の歴史</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/06/10-years-of-kubernetes/</link>
      <pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/06/10-years-of-kubernetes/</guid>
      <description>
        
        
        &lt;p&gt;&lt;img src=&#34;kcseu2024.jpg&#34; alt=&#34;KCSEU 2024 group photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;10年前の2014年6月6日、Kubernetesの&lt;a href=&#34;https://github.com/kubernetes/kubernetes/commit/2c4b3a562ce34cddc3f8218a2c4d11c7310e6d56&#34;&gt;最初のコミット&lt;/a&gt;がGitHubにプッシュされました。
Go、Bash、Markdownで書かれた250のファイルと47,501行のコードを含むその最初のコミットが、今日のKubernetesプロジェクトの始まりでした。
それから10年後の今日、Kubernetesが44か国から&lt;a href=&#34;https://www.cncf.io/reports/kubernetes-project-journey-report/&#34;&gt;8,000社以上の企業&lt;/a&gt;、&lt;a href=&#34;https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1&#34;&gt;88,000人以上のコントリビューター&lt;/a&gt;を有する、これまでで最大のオープンソースプロジェクトの一つに成長するとは誰が予想したでしょうか。&lt;/p&gt;
&lt;img src=&#34;kcscn2019.jpg&#34; alt=&#34;KCSCN 2019&#34; class=&#34;left&#34; style=&#34;max-width: 20em; margin: 1em&#34; &gt;
&lt;p&gt;このマイルストーンはKubernetesだけでなく、そこから生まれたクラウドネイティブエコシステムにとっても重要なものです。
CNCFには&lt;a href=&#34;https://all.devstats.cncf.io/d/18/overall-project-statistics-table?orgId=1&#34;&gt;約200のプロジェクト&lt;/a&gt;があり、&lt;a href=&#34;https://all.devstats.cncf.io/d/18/overall-project-statistics-table?orgId=1&#34;&gt;240,000人以上のコントリビューター&lt;/a&gt;からのコントリビューションがあります。
また、より広いエコシステムの中でも数千人のコントリビューターがいます。
Kubernetesが今日の姿になれたのは、彼らや&lt;a href=&#34;https://www.cncf.io/blog/2022/05/18/slashdata-cloud-native-continues-to-grow-with-more-than-7-million-developers-worldwide/&#34;&gt;700万人以上の開発者&lt;/a&gt;、さらに多くのユーザーコミュニティがエコシステムを形作る手助けをしてくれたおかげです。&lt;/p&gt;
&lt;h2 id=&#34;kubernetesの始まり-技術の収束&#34;&gt;Kubernetesの始まり - 技術の収束&lt;/h2&gt;
&lt;p&gt;Kubernetesの元となるアイディアは、(&lt;a href=&#34;https://blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/&#34;&gt;2013年に登場した&lt;/a&gt;)最初のコミットや最初のプロトタイプの前から存在していました。
2000年代初頭、ムーアの法則が有効に機能していました。
コンピューティングハードウェアは非常に速い速度でますます強力になり、それに対応してアプリケーションもますます複雑化していきました。
このハードウェアのコモディティ化とアプリケーションの複雑化の組み合わせにより、ソフトウェアをハードウェアからさらに抽象化する必要が生じ、解決策が現れ始めました。&lt;/p&gt;
&lt;p&gt;当時の多くの企業と同様にGoogleも急速に拡大しており、同社のエンジニアたちはLinuxカーネル内での隔離の形態を作り出すというアイデアに興味を持っていました。
Googleのエンジニア、Rohit Sethはそのコンセプトを&lt;a href=&#34;https://lwn.net/Articles/199643/&#34;&gt;2006年のメール&lt;/a&gt;で説明しました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ワークロードのメモリやタスクなどのシステムリソースの使用を追跡し、課金する構造を示すためにコンテナという用語を使用します。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;img src=&#34;future.png&#34; alt=&#34;The future of Linux containers&#34; class=&#34;right&#34; style=&#34;max-width: 20em; margin: 1em&#34;&gt;
&lt;p&gt;2013年3月、PyConでSolomon Hykesが行った5分間のライトニングトーク&lt;a href=&#34;https://youtu.be/wW9CAH9nSLs?si=VtK_VFQHymOT7BIB&#34;&gt;The future of Linux Containers&lt;/a&gt;では、Linuxコンテナを作成および使用するためのオープンソースツールである「Docker」が紹介されました。
DockerはLinuxコンテナに使いやすさをもたらし、これまで以上に多くのユーザーが利用できるようになりました。
Dockerの人気が急上昇し、Linuxコンテナの抽象化を誰もが利用できるようにしたことで、アプリケーションをより移植性が高く、再現性のある方法で実行できるようになりました。
しかし、依然としてスケールの問題は残っていました。&lt;/p&gt;
&lt;p&gt;Googleのアプリケーションオーケストレーションをスケールで管理するBorgシステムは、2000年代半ばにLinuxコンテナを採用しました。
その後、GoogleはOmegaと呼ばれるシステムの新バージョンの開発も開始しました。
BorgとOmegaシステムに精通していたGoogleのエンジニアたちは、Dockerによって駆動するコンテナ化の人気を目の当たりにしました。
そしてBrendan Burnsの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/&#34;&gt;ブログ&lt;/a&gt;で説明されているように、オープンソースのコンテナオーケストレーションシステムの必要性だけでなく、その「必然性」を認識しました。
この認識は2013年秋にJoe Beda、Brendan Burns、Craig McLuckie、Ville Aikas、Tim Hockin、Dawn Chen、Brian Grant、Daniel Smithを含む小さなチームにKubernetesのプロジェクトを始めるインスピレーションを与えました。&lt;/p&gt;
&lt;h2 id=&#34;kubernetesの10年間&#34;&gt;Kubernetesの10年間&lt;/h2&gt;
&lt;img src=&#34;kubeconeu2017.jpg&#34; alt=&#34;KubeCon EU 2017&#34; class=&#34;left&#34; style=&#34;max-width: 20em; margin: 1em&#34;&gt;
&lt;p&gt;Kubernetesの歴史は2014年6月6日のその歴史的なコミットと、2014年6月10日の&lt;a href=&#34;https://youtu.be/YrxnVKZeqK8?si=Q_wYBFn7dsS9H3k3&#34;&gt;DockerCon 2014でのGoogleエンジニアEric Brewerによる基調講演&lt;/a&gt;(およびそれに対応する&lt;a href=&#34;https://cloudplatform.googleblog.com/2014/06/an-update-on-container-support-on-google-cloud-platform.html&#34;&gt;Googleブログ&lt;/a&gt;)でのプロジェクト発表から始まります。&lt;/p&gt;
&lt;p&gt;その後の1年間で、主に&lt;a href=&#34;https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&amp;amp;var-period_name=Before%20joining%20CNCF&amp;amp;var-metric=contributors&#34;&gt;GoogleとRed Hatからのコントリビューター&lt;/a&gt;による小さなコミュニティがプロジェクトに取り組み、&lt;a href=&#34;https://cloudplatform.googleblog.com/2015/07/Kubernetes-V1-Released.html&#34;&gt;2015年7月21日にバージョン1.0のリリース&lt;/a&gt;に至りました。
1.0と同時に、GoogleはKubernetesをLinux Foundationの新たに設立された部門である&lt;a href=&#34;https://www.cncf.io/announcements/2015/06/21/new-cloud-native-computing-foundation-to-drive-alignment-among-container-technologies/&#34;&gt;Cloud Native Computing Foundation (CNCF)&lt;/a&gt;に寄贈することを発表しました。&lt;/p&gt;
&lt;p&gt;1.0に到達したものの、Kubernetesプロジェクトは依然として使いにくく理解しにくいものでした。
KubernetesのコントリビューターであるKelsey Hightowerはプロジェクトの使いやすさの欠点に特に注目し、2016年7月7日に彼の有名な&lt;a href=&#34;https://github.com/kelseyhightower/kubernetes-the-hard-way/commit/9d7ace8b186f6ebd2e93e08265f3530ec2fba81c&#34;&gt;&amp;quot;Kubernetes the Hard Way&amp;quot;ガイドの最初のコミット&lt;/a&gt;をプッシュしました。&lt;/p&gt;
&lt;p&gt;プロジェクトは最初の1.0リリース以来大きく変わり、いくつかの大きな成果を経験しました。
たとえば、&lt;a href=&#34;https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/&#34;&gt;1.16でのCustom Resource Definition (CRD)のGA&lt;/a&gt;や、&lt;a href=&#34;https://kubernetes.io/blog/2021/12/08/dual-stack-networking-ga/&#34;&gt;1.23での完全なデュアルスタックサポートの開始&lt;/a&gt;などです。
また、&lt;a href=&#34;https://kubernetes.io/blog/2021/07/14/upcoming-changes-in-kubernetes-1-22/&#34;&gt;1.22での広く使用されているベータ版APIの削除&lt;/a&gt;や、&lt;a href=&#34;https://kubernetes.io/blog/2020/12/02/dockershim-faq/&#34;&gt;Dockershimの廃止&lt;/a&gt;から学んだコミュニティの「教訓」もあります。&lt;/p&gt;
&lt;p&gt;1.0以降の注目すべきアップデート、マイルストーン、およびイベントには以下のものがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2016年12月 - &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2016/12/kubernetes-1-5-supporting-production-workloads/&#34;&gt;Kubernetes 1.5&lt;/a&gt;でCRIの最初のサポートとアルファ版Windowsノードサポートによるランタイムプラグイン機能が導入されました。また、OpenAPIが初めて登場し、クライアントが拡張されたAPIを認識できるようになりました。
&lt;ul&gt;
&lt;li&gt;このリリースでは、StatefulSetとPodDisruptionBudgetがベータ版で導入されました。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2017年4月 - &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2017/04/rbac-support-in-kubernetes/&#34;&gt;ロールベースアクセス制御(RBAC)&lt;/a&gt;の導入。&lt;/li&gt;
&lt;li&gt;2017年6月 - &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2017/06/kubernetes-1-7-security-hardening-stateful-application-extensibility-updates/&#34;&gt;Kubernetes 1.7&lt;/a&gt;でThirdPartyResource (TPR)がCustomResourceDefinition (CRD)に置き換えられました。&lt;/li&gt;
&lt;li&gt;2017年12月 - &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2017/12/kubernetes-19-workloads-expanded-ecosystem/&#34;&gt;Kubernetes 1.9&lt;/a&gt;ではWorkload APIがGA(一般提供)となりました。リリースブログには「Kubernetesで最もよく使用されるオブジェクトの一つであるDeploymentとReplicaSetは、1年以上の実際の使用とフィードバックを経て安定しました」と書かれています。&lt;/li&gt;
&lt;li&gt;2018年12月 - Kubernetes 1.13でContainer Storage Interface (CSI)がGAに達しました。また最小限のクラスターをブートストラップするためのkubeadmツールがGAに達し、CoreDNSがデフォルトのDNSサーバーとなりました。&lt;/li&gt;
&lt;li&gt;2019年9月 - Kubernetes 1.16で&lt;a href=&#34;https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/&#34;&gt;Custom Resource DefinitionがGAに達し&lt;/a&gt;ました。&lt;/li&gt;
&lt;li&gt;2020年8月 - &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2016/12/kubernetes-1-5-supporting-production-workloads/&#34;&gt;Kubernetes 1.19&lt;/a&gt;でリリースのサポート期間が1年に延長されました。&lt;/li&gt;
&lt;li&gt;2020年12月 - Kubernetes 1.20で&lt;a href=&#34;https://kubernetes.io/blog/2020/12/18/kubernetes-1.20-pod-impersonation-short-lived-volumes-in-csi/&#34;&gt;Dockershimが廃止&lt;/a&gt;されました。&lt;/li&gt;
&lt;li&gt;2021年4月 - &lt;a href=&#34;https://kubernetes.io/blog/2021/07/20/new-kubernetes-release-cadence/#:~:text=On%20April%2023%2C%202021%2C%20the,Kubernetes%20community&#39;s%20contributors%20and%20maintainers.&#34;&gt;Kubernetesのリリース頻度が変更&lt;/a&gt;され、年間4回から3回に減少されました。&lt;/li&gt;
&lt;li&gt;2021年7月 - 広く使用されているベータ版APIが&lt;a href=&#34;https://kubernetes.io/blog/2021/07/14/upcoming-changes-in-kubernetes-1-22/&#34;&gt;Kubernetes 1.22で削除&lt;/a&gt;されました。&lt;/li&gt;
&lt;li&gt;2022年5月 - Kubernetes 1.24で&lt;a href=&#34;https://kubernetes.io/blog/2022/05/03/kubernetes-1-24-release-announcement/&#34;&gt;ベータ版APIがデフォルトで無効&lt;/a&gt;にされ、アップグレードの競合を減らすとともに&lt;a href=&#34;https://kubernetes.io/dockershim&#34;&gt;Dockershimが削除&lt;/a&gt;されました。その結果、&lt;a href=&#34;https://www.youtube.com/watch?v=a03Hh1kd6KE&#34;&gt;多くのユーザーの混乱&lt;/a&gt;を引き起こしました(その後、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/communication/contributor-comms&#34;&gt;コミュニケーションを改善しました&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;2022年12月 - Kubernetes 1.26ではAI/ML/バッチワークロードのサポートを強化するための大規模なバッチおよび&lt;a href=&#34;https://kubernetes.io/blog/2022/12/29/scalable-job-tracking-ga/&#34;&gt;Job APIのオーバーホール&lt;/a&gt;が行われました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; プロジェクトがどれだけ進化したか自分で見てみたいですか？
コミュニティメンバーのCarlos Santana、Amim Moises Salum Knabben、James Spurinが作成した&lt;a href=&#34;https://github.com/spurin/kubernetes-v1.0-lab&#34;&gt;Kubernetes 1.0クラスターを立ち上げるためのチュートリアル&lt;/a&gt;をチェックしてみてください。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Kubernetesには数え切れないほどの拡張するポイントがあります。
もともとはDocker専用に設計されていましたが、現在ではCRI標準に準拠する任意のコンテナランタイムをプラグインできます。
他にもストレージ用のCSIやネットワーキング用のCNIなどのインターフェースがあります。
そしてこれはできることのほんの一部に過ぎません。
過去10年間で新しいパターンがいくつも登場しました。
例えば、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;Custom Resource Definition&lt;/a&gt; (CRD)を使用してサードパーティのコントローラーをサポートすることができます。
これは現在Kubernetesエコシステムの大きな一部となっています。&lt;/p&gt;
&lt;p&gt;このプロジェクトを構築するコミュニティも、この10年間で非常に大きくなりました。
&lt;a href=&#34;https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1&#34;&gt;DevStats&lt;/a&gt;を使用すると、この10年間でKubernetesを&lt;a href=&#34;https://www.cncf.io/reports/kubernetes-project-journey-report/&#34;&gt;世界で2番目に大きなオープンソースプロジェクト&lt;/a&gt;にした驚異的なコントリビューションの量を確認できます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;88,474&lt;/strong&gt;人のコントリビューター&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;15,121&lt;/strong&gt;人のコードコミッター&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4,228,347&lt;/strong&gt;件のコントリビューション&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;158,530&lt;/strong&gt;件のIssue&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;311,787&lt;/strong&gt;件のPull Request&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;今日のkubernetes&#34;&gt;今日のKubernetes&lt;/h2&gt;
&lt;img src=&#34;welcome.jpg&#34; alt=&#34;KubeCon NA 2023&#34; class=&#34;left&#34; style=&#34;max-width: 20em; margin: 1em&#34;&gt;
&lt;p&gt;初期の頃からこのプロジェクトは技術的能力、利用状況、およびコントリビューションの面で驚異的な成長を遂げてきました。
プロジェクトは今もなおユーザーにより良いサービスを提供するために積極的に改善に取り組んでいます。&lt;/p&gt;
&lt;p&gt;次回の1.31リリースでは、長期にわたる重要なプロジェクトの完成を祝います。
それはインツリークラウドプロバイダーのコードの削除です。
この&lt;a href=&#34;https://kubernetes.io/blog/2024/05/20/completing-cloud-provider-migration/&#34;&gt;Kubernetesの歴史上最大のマイグレーション&lt;/a&gt;では、約150万行のコードが削除され、コアコンポーネントのバイナリサイズが約40%削減されました。
プロジェクトの初期には、拡張性が成功の鍵であることは明らかでした。
しかし、その拡張性をどのように実現するかは常に明確ではありませんでした。
このマイグレーションにより、Kubernetesの核となるコードベースからさまざまなベンダー固有の機能が削除されました。
ベンダー固有の機能は、今後は&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;Custom Resource Definition (CRD)&lt;/a&gt;や&lt;a href=&#34;https://gateway-api.sigs.k8s.io/&#34;&gt;Gateway API&lt;/a&gt;などの他のプラグイン拡張機能やパターンによってよりよく提供されるようになります。&lt;/p&gt;
&lt;p&gt;Kubernetesは、膨大なユーザーベースにサービスを提供する上で新たな課題にも直面しており、コミュニティはそれに適応しています。
その一例が、新しいコミュニティ所有のregistry.k8s.ioへのイメージホスティングの移行です。
ユーザーに事前コンパイル済みのバイナリイメージを提供するためのエグレスの帯域幅とコストは非常に大きなものとなっています。
この新しいレジストリの変更により、コミュニティはこれらの便利なイメージをよりコスト効率およびパフォーマンス効率の高い方法で提供し続けることができます。
必ず&lt;a href=&#34;https://kubernetes.io/blog/2022/11/28/registry-k8s-io-faster-cheaper-ga/&#34;&gt;ブログ記事&lt;/a&gt;をチェックし、registry.k8s.ioを使用するように更新してください！&lt;/p&gt;
&lt;h2 id=&#34;kubernetesの未来&#34;&gt;Kubernetesの未来&lt;/h2&gt;
&lt;img src=&#34;lts.jpg&#34; alt=&#34;&#34; class=&#34;right&#34; width=&#34;300px&#34; style=&#34;max-width: 20em; margin: 1em&#34;&gt;
&lt;p&gt;10年が経ち、Kubernetesの未来は依然として明るく見えます。
コミュニティはユーザー体験の改善とプロジェクトの持続可能性を向上させる変更を優先しています。
アプリケーション開発の世界は進化し続けており、Kubernetesもそれに合わせて変化していく準備ができています。&lt;/p&gt;
&lt;p&gt;2024年にはAIの登場がかつてニッチなワークロードタイプを重要なものへと変えました。
分散コンピューティングとワークロードスケジューリングは常に人工知能(AI)、機械学習(ML)、および高性能コンピューティング(HPC)ワークロードのリソース集約的なニーズと密接に関連してきました。
コントリビューターは、新しく開発されたワークロードのニーズとそれらにKubernetesがどのように最適に対応できるかに注目しています。
新しい&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/wg-serving&#34;&gt;Serving Working Group&lt;/a&gt;は、コミュニティがこれらのワークロードのニーズに対処するためにどのように組織化されているかの一例です。
今後数年でKubernetesがさまざまな種類のハードウェアを管理する能力や、ハードウェア全体でチャンクごとに実行される大規模なバッチスタイルのワークロードのスケジューリング能力に関して改善が見られるでしょう。&lt;/p&gt;
&lt;p&gt;Kubernetesを取り巻くエコシステムは成長し続け、進化していきます。
将来的にはインツリーベンダーコードのマイグレーションやレジストリの変更など、プロジェクトの持続可能性を維持するための取り組みがますます重要になるでしょう。&lt;/p&gt;
&lt;p&gt;Kubernetesの次の10年は、ユーザーとエコシステム、そして何よりもそれに貢献する人々によって導かれるでしょう。
コミュニティは新しいコントリビューターを歓迎しています。
コントリビューションに関する詳細は、&lt;a href=&#34;https://k8s.dev/contributors&#34;&gt;新しいコントリビューター向けのガイド&lt;/a&gt;で確認できます。&lt;/p&gt;
&lt;p&gt;Kubernetesの未来を一緒に築いていくことを楽しみにしています！&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/06/06/10-years-of-kubernetes/kcsna2023.jpg&#34;
         alt=&#34;KCSNA 2023&#34;/&gt; 
&lt;/figure&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetes史上最大の移行作業を完了</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/05/20/completing-cloud-provider-migration/</link>
      <pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/05/20/completing-cloud-provider-migration/</guid>
      <description>
        
        
        &lt;p&gt;Kubernetes v1.7以降、Kubernetesプロジェクトは、クラウドプロバイダーとの統合機能をKubernetesのコアコンポーネントから分離するという野心的な目標を追求してきました(&lt;a href=&#34;https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md&#34;&gt;KEP-2395&lt;/a&gt;)。
この統合機能はKubernetesの初期の開発と成長に重要な役割を果たしつつも、２つの重要な要因によってその分離が推進されました。
1つは、何百万行ものGoコードにわたってすべてのクラウドプロバイダーのネイティブサポートを維持することの複雑さが増大していたこと、もう1つは、Kubernetesを真にベンダーニュートラルなプラットフォームとして確立したいという願望です。&lt;/p&gt;
&lt;p&gt;多くのリリースを経て、すべてのクラウドプロバイダー統合が、Kubernetesのコアリポジトリから外部プラグインに正常に移行されたことを喜ばしく思います。
当初の目的を達成したことに加えて、約150万行のコードを削除し、コアコンポーネントのバイナリサイズを約40%削減することで、Kubernetesを大幅に合理化しました。&lt;/p&gt;
&lt;p&gt;この移行は、影響を受けるコンポーネントが多数あり、Google Cloud、AWS、Azure、OpenStack、vSphereの5つの初期クラウドプロバイダーの組み込み統合に依存していた重要なコードパスがあったため、複雑で長期にわたる作業となりました。
この移行を成功させるために、私たちは4つの新しいサブシステムを一から構築する必要がありました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;クラウドコントローラーマネージャー&lt;/strong&gt; (&lt;a href=&#34;https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md&#34;&gt;KEP-2392&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APIサーバーネットワークプロキシ&lt;/strong&gt; (&lt;a href=&#34;https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy&#34;&gt;KEP-1281&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kubeletクレデンシャルプロバイダープラグイン&lt;/strong&gt; (&lt;a href=&#34;https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers&#34;&gt;KEP-2133&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-&#34;&gt;CSI&lt;/a&gt;を使用するストレージの移行&lt;/strong&gt; (&lt;a href=&#34;https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md&#34;&gt;KEP-625&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;各サブシステムは、組み込み機能と同等の機能を実現するために不可欠であり、安全で信頼できる移行パスを使用して各サブシステムをGAレベルの成熟度にするために、いくつかのリリースが必要でした。
以下に、各サブシステムの詳細を説明します。&lt;/p&gt;
&lt;h3 id=&#34;クラウドコントローラーマネージャー&#34;&gt;クラウドコントローラーマネージャー&lt;/h3&gt;
&lt;p&gt;クラウドコントローラーマネージャーは、この取り組みで導入された最初の外部コンポーネントであり、&lt;code&gt;kube-controller-manager&lt;/code&gt;と&lt;code&gt;kubelet&lt;/code&gt;のうち、クラウドAPIと直接やり取りする機能を置き換えるものです。
この重要なコンポーネントは、ノードが実行されているクラウドのリージョンとゾーンを示すメタデータラベルや、クラウドプロバイダーのみが知っているIPアドレスを適用することにより、ノードを初期化する役割を担っています。
さらに、LoadBalancerタイプのServiceに対してクラウドロードバランサーをプロビジョニングするサービスコントローラーも実行します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/images/docs/components-of-kubernetes.svg&#34; alt=&#34;Kubernetesのコンポーネント&#34;&gt;&lt;/p&gt;
&lt;p&gt;詳細については、Kubernetesドキュメントの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/architecture/cloud-controller/&#34;&gt;クラウドコントローラーマネージャー&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&#34;apiサーバーネットワークプロキシ&#34;&gt;APIサーバーネットワークプロキシ&lt;/h3&gt;
&lt;p&gt;2018年にSIG API Machineryと共同で開始されたAPIサーバーネットワークプロキシプロジェクトは、&lt;code&gt;kube-apiserver&lt;/code&gt;内のSSHトンネラー機能を置き換えることを目的としていました。
このトンネラーは、Kubernetesのコントロールプレーンとノードとのトラフィックを安全にプロキシするために使用されていましたが、これらのSSHトンネルを確立するために、&lt;code&gt;kube-apiserver&lt;/code&gt;内に組み込まれたプロバイダー固有の実装の詳細に大きく依存していました。&lt;/p&gt;
&lt;p&gt;現在、APIサーバーネットワークプロキシは、&lt;code&gt;kube-apiserver&lt;/code&gt;内のGAレベルの拡張ポイントとなっています。
これは、APIサーバーからノードへのトラフィックを安全なプロキシを介してルーティングできる汎用的なプロキシメカニズムを提供し、APIサーバーが実行されているクラウドプロバイダーを認識する必要がなくなりました。
このプロジェクトでは、本番環境での採用が進んでいるKonnectivityプロジェクトも導入されました。&lt;/p&gt;
&lt;p&gt;APIサーバーネットワークプロキシの詳細については、&lt;a href=&#34;https://github.com/kubernetes-sigs/apiserver-network-proxy#readme&#34;&gt;README&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&#34;kubeletのクレデンシャルプロバイダープラグイン&#34;&gt;kubeletのクレデンシャルプロバイダープラグイン&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;kubelet&lt;/code&gt;のクレデンシャルプロバイダープラグインは、Google Cloud、AWS、またはAzureでホストされているイメージレジストリのクレデンシャルを動的に取得する&lt;code&gt;kubelet&lt;/code&gt;の組み込み機能を置き換えるために開発されました。
従来の機能は便利で、&lt;code&gt;kubelet&lt;/code&gt;がGCR、ECR、またはACRからイメージを取得するための短期間のトークンをシームレスに取得できるようにしていました。
しかし、Kubernetesの他の領域と同様に、これをサポートするには、&lt;code&gt;kubelet&lt;/code&gt;が異なるクラウド環境とAPIについて特定の知識を持つ必要がありました。&lt;/p&gt;
&lt;p&gt;2019年に導入されたクレデンシャルプロバイダープラグインメカニズムは、&lt;code&gt;kubelet&lt;/code&gt;が様々なクラウドでホストされているイメージのクレデンシャルを動的に提供するプラグインバイナリを実行するための汎用的な拡張ポイントを提供します。
この拡張性により、&lt;code&gt;kubelet&lt;/code&gt;の短期間のトークンを取得する機能が、最初の3つのクラウドプロバイダーを超えて拡張されました。&lt;/p&gt;
&lt;p&gt;詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/containers/images/#kubelet-credential-provider&#34;&gt;認証されたイメージプルのためのkubeletクレデンシャルプロバイダー&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h3 id=&#34;ストレージプラグインのkubernetesコアからcsiへの移行&#34;&gt;ストレージプラグインのKubernetesコアからCSIへの移行&lt;/h3&gt;
&lt;p&gt;Container Storage Interface(CSI)は、Kubernetesやそのほかのコンテナオーケストレーターにおいてブロックおよびファイルストレージシステムを管理するためのコントロールプレーン標準であり、1.13でGAになりました。
これは、Kubernetesに直接組み込まれていたボリュームプラグインを、Kubernetesクラスター内のPodとして実行できるドライバーに置き換えるために設計されました。
これらのドライバーは、Kubernetes APIを介して&lt;code&gt;kube-controller-manager&lt;/code&gt;ストレージコントローラーと通信し、ローカルのgRPCエンドポイントを介して&lt;code&gt;kubelet&lt;/code&gt;と通信します。
現在、すべての主要なクラウドとストレージベンダーにわたって100以上のCSIドライバーが利用可能であり、Kubernetesでステートフルなワークロードが現実のものとなっています。&lt;/p&gt;
&lt;p&gt;ただし、KubernetesコアのボリュームAPIの既存のすべてのユーザーをどのように扱うかという大きな課題が残っていました。
APIの後方互換性を維持するために、Kubernetesコアのボリューム APIを同等のCSI APIに変換するAPIトランスレーション層をコントローラーに組み込みました。
これにより、すべてのストレージ操作をCSIドライバーにリダイレクトすることができ、APIを削除せずにKubernetesコアのボリュームプラグインのコードを削除する道が開けました。&lt;/p&gt;
&lt;p&gt;Kubernetesコアのストレージの移行の詳細については、&lt;a href=&#34;https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/&#34;&gt;Kubernetes In-Tree to CSI Volume Migration Moves to Beta&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h2 id=&#34;今後の展望&#34;&gt;今後の展望&lt;/h2&gt;
&lt;p&gt;この移行は、ここ数年のSIG Cloud Providerがもっとも注力してきたことでした。
この重要なマイルストーンを達成したことで、これまでに構築してきた外部サブシステムを活用して、Kubernetesとクラウドプロバイダーをより良く統合するための新しい革新的な方法を模索する取り組みにシフトしていきます。
これには、クラスター内のノードがパブリッククラウドとプライベートクラウドの両方で実行できるハイブリッド環境でKubernetesをより賢くすることや、外部プロバイダーの開発者が統合の取り組みを簡素化・合理化するためのより良いツールとフレームワークを提供することが含まれます。&lt;/p&gt;
&lt;p&gt;新機能やツール、フレームワークの開発が進む一方で、SIG Cloud Providerはテストの重要性も忘れてはいません。
SIGの将来の活動のもう1つの重点分野は、より多くのプロバイダーを含めるためのクラウドコントローラーテストの改善です。
この取り組みの最終目標は、できるだけ多くのプロバイダーを含むテストフレームワークを作成し、Kubernetesコミュニティに対して、Kubernetes環境に関する最高レベルの信頼性を提供することです。&lt;/p&gt;
&lt;p&gt;v1.29より前のバージョンのKubernetesを使用していて、まだ外部クラウドプロバイダーに移行していない場合は、以前のブログ記事&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/12/14/cloud-provider-integration-changes/&#34;&gt;Kubernetes 1.29: Cloud Provider Integrations Are Now Separate Components&lt;/a&gt;を確認することをおすすめします。
この記事では、私たちが行った変更について詳細な情報を提供し、外部プロバイダーへの移行方法についてガイダンスを提供しています。
v1.31以降、Kubernetesコアのクラウドプロバイダーは永続的に無効化され、Kubernetesのコアコンポーネントから削除されます。&lt;/p&gt;
&lt;p&gt;貢献に興味がある方は、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-cloud-provider#meetings&#34;&gt;隔週のSIGミーティング&lt;/a&gt;にぜひご参加ください！&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Gateway API v1.1: サービスメッシュ、GRPCRoute、そして更なる進化</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/05/09/gateway-api-v1-1/</link>
      <pubDate>Thu, 09 May 2024 09:00:00 -0800</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/05/09/gateway-api-v1-1/</guid>
      <description>
        
        
        &lt;p&gt;&lt;img src=&#34;gateway-api-logo.svg&#34; alt=&#34;Gateway API logo&#34;&gt;&lt;/p&gt;
&lt;p&gt;昨年10月のGateway APIの正式リリース後、Kubernetes SIG Networkは&lt;a href=&#34;https://gateway-api.sigs.k8s.io/&#34;&gt;Gateway API&lt;/a&gt;のv1.1リリースを発表しました。
このリリースでは、いくつかの機能が &lt;em&gt;標準機能&lt;/em&gt; (GA)に昇格しています。
特にサービスメッシュとGRPCRouteのサポートが含まれます。
また、セッション維持とクライアント証明書の検証を含む新しい実験的機能も導入しています。&lt;/p&gt;
&lt;h2 id=&#34;新機能&#34;&gt;新機能&lt;/h2&gt;
&lt;h3 id=&#34;gaへの昇格&#34;&gt;GAへの昇格&lt;/h3&gt;
&lt;p&gt;このリリースでは、4つの待望の機能が標準機能に昇格しました。
これにより、これらの機能は実験的な段階を卒業したことになります。
GAへの昇格が行われたということは、APIの設計に対する高い信頼性を示すとともに、後方互換性を保証するものです。
他のKubernetes APIと同様に、GAへ昇格した機能も時間とともに後方互換性を保ちながら進化していきます。
今後もこれらの新機能のさらなる改良と改善が行われることを期待しています。
これらの仕組みについて詳しくは、Gateway APIの&lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/versioning/&#34;&gt;バージョニングポリシー&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h4 id=&#34;サービスメッシュのサポート-https-gateway-api-sigs-k8s-io-mesh&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/mesh/&#34;&gt;サービスメッシュのサポート&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Gateway APIのサービスメッシュサポートにより、サービスメッシュユーザーは同じAPIを使用してIngressトラフィックとメッシュトラフィックを管理することが可能になります。
これにより同じポリシーとルーティングインターフェースを再利用することができます。
また、Gateway API v1.1では、HTTPRouteなどのルートがServiceを&lt;code&gt;parentRef&lt;/code&gt;として持つことができるようになり、特定のサービスへのトラフィックの動作を制御できます。
詳細については、&lt;a href=&#34;https://gateway-api.sigs.k8s.io/mesh/&#34;&gt;Gateway APIのサービスメッシュドキュメント&lt;/a&gt;をお読みいただくか、&lt;a href=&#34;https://gateway-api.sigs.k8s.io/implementations/#service-mesh-implementation-status&#34;&gt;Gateway APIの実装リスト&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;例えば、アプリケーションのコールグラフの深部にあるワークロードに対して、HTTPRouteを使用してカナリアデプロイメントを行うことができます。
以下はその例です：&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;gateway.networking.k8s.io/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;HTTPRoute&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;color-canary&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;namespace&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;faces&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;parentRefs&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;color&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;Service&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;group&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&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;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;80&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;rules&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;backendRefs&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;color&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;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;80&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;weight&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;50&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;color2&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;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;80&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;weight&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;50&lt;/span&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;これにより、名前空間&lt;code&gt;faces&lt;/code&gt;内の&lt;code&gt;color&lt;/code&gt;サービスに送信されるトラフィックが、元の&lt;code&gt;color&lt;/code&gt;サービスと&lt;code&gt;color2&lt;/code&gt;サービスの間で50対50に分割されます。
この設定は移植性が高く、あるメッシュから別のメッシュへ簡単に移行できます。&lt;/p&gt;
&lt;h4 id=&#34;grpcroute-https-gateway-api-sigs-k8s-io-guides-grpc-routing&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/guides/grpc-routing/&#34;&gt;GRPCRoute&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;すでにGRPCRouteの実験的機能バージョンを使用している場合、使用しているコントローラーがGRPCRoute v1をサポートするようアップデートされるまで、標準バージョンのGRPCRouteへのアップグレードは控えることをお勧めします。
それまでは、&lt;code&gt;v1alpha2&lt;/code&gt;と&lt;code&gt;v1&lt;/code&gt;の両方のAPIバージョンを含むv1.1の実験的チャンネルバージョンのGRPCRouteにアップグレードしても問題ありません。&lt;/p&gt;
&lt;h4 id=&#34;parentreference-port-https-gateway-api-sigs-k8s-io-reference-spec-gateway-networking-k8s-io-2fv1-parentreference&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.ParentReference&#34;&gt;ParentReference Port&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;ParentReferenceにportフィールドが追加されました。
これにより、リソースをGatewayのリスナー、Service、あるいは他の親リソース(実装によって異なります)に関連付けることができるようになりました。
ポートにバインドすることで、複数のリスナーに一度に関連付けることも可能です。&lt;/p&gt;
&lt;p&gt;例えば、HTTPRouteをGatewayの特定のリスナーに関連付ける際、リスナー名ではなくリスナーのポートを指定できるようになりました。
これにより、一つまたは複数の特定のリスナーに関連付けることができます。&lt;/p&gt;
&lt;p&gt;詳細については、&lt;a href=&#34;https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways&#34;&gt;Gatewayへの関連付け&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h4 id=&#34;適合性プロファイルとレポート-https-gateway-api-sigs-k8s-io-concepts-conformance-conformance-profiles&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/concepts/conformance/#conformance-profiles&#34;&gt;適合性プロファイルとレポート&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;適合性レポートのAPIが拡張され、実装の動作モードを指定する&lt;code&gt;mode&lt;/code&gt;フィールドと、Gateway APIのチャネル(標準版または実験的機能版)をしめす&lt;code&gt;gatewayAPIChannel&lt;/code&gt;が追加されました。
&lt;code&gt;gatewayAPIVersion&lt;/code&gt;と&lt;code&gt;gatewayAPIChannel&lt;/code&gt;は、テスト結果の簡単な説明とともに、テストスイートの仕組みによって自動的に入力されるようになりました。
レポートの構成がより体系的に整理され、実装者はテストの実行方法に関する情報を追加し、再現手順を提供できるようになりました。&lt;/p&gt;
&lt;h3 id=&#34;実験的機能版チャンネルへの新機能追加&#34;&gt;実験的機能版チャンネルへの新機能追加&lt;/h3&gt;
&lt;h4 id=&#34;gatewayのクライアント証明書の検証-https-gateway-api-sigs-k8s-io-geps-gep-91&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-91/&#34;&gt;Gatewayのクライアント証明書の検証&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Gatewayの各リスナーでクライアント証明書の検証が設定できるようになりました。
これは、&lt;code&gt;tls&lt;/code&gt;内に新しく追加された&lt;code&gt;frontendValidation&lt;/code&gt;フィールドによって実現されています。
このフィールドでは、クライアントが提示する証明書を検証するための信頼アンカーとして使用できるCA証明書のリストを設定できます。&lt;/p&gt;
&lt;p&gt;以下の例は、ConfigMapの&lt;code&gt;foo-example-com-ca-cert&lt;/code&gt;に保存されているCA証明書を使用して、Gatewayリスナーの&lt;code&gt;foo-https&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-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;gateway.networking.k8s.io/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;Gateway&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;client-validation-basic&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;gatewayClassName&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;acme-lb&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;listeners&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;foo-https&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;protocol&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;HTTPS&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;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;443&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;hostname&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;foo.example.com&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;tls&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;certificateRefs&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;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Secret&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;group&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&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;foo-example-com-cert&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;frontendValidation&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;caCertificateRefs&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;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ConfigMap&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;group&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;&amp;#34;&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;foo-example-com-ca-cert&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;h4 id=&#34;セッション維持とbackendlbpolicy-https-gateway-api-sigs-k8s-io-geps-gep-1619&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-1619/&#34;&gt;セッション維持とBackendLBPolicy&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Gateway APIに&lt;a href=&#34;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.SessionPersistence&#34;&gt;セッション維持機能&lt;/a&gt;が導入されました。
これは新しいポリシー(&lt;a href=&#34;https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1alpha2.BackendLBPolicy&#34;&gt;BackendLBPolicy&lt;/a&gt;)によってサービスレベルで設定でき、さらにHTTPRouteとGRPCRoute内のフィールドを使用してルートレベルでも設定可能です。
BackendLBPolicyとルートレベルのAPIは、セッションのタイムアウト、セッション名、セッションタイプ、クッキーの有効期間タイプなど、同じセッション維持の設定を提供します。&lt;/p&gt;
&lt;p&gt;以下は、&lt;code&gt;foo&lt;/code&gt;サービスにクッキーベースのセッション維持を有効にする&lt;code&gt;BackendLBPolicy&lt;/code&gt;の設定例です。
セッション名を&lt;code&gt;foo-session&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-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;gateway.networking.k8s.io/v1alpha2&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;BackendLBPolicy&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;lb-policy&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;namespace&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;foo-ns&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;targetRefs&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;group&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;core&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;service&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;foo&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;sessionPersistence&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;sessionName&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;foo-session&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;absoluteTimeout&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;1h&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;idleTimeout&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;30m&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;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Cookie&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;cookieConfig&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;lifetimeType&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Session&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;h3 id=&#34;その他の変更点&#34;&gt;その他の変更点&lt;/h3&gt;
&lt;h4 id=&#34;tls関連用語の明確化-https-gateway-api-sigs-k8s-io-geps-gep-2907&#34;&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/geps/gep-2907/&#34;&gt;TLS関連用語の明確化&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;API全体でTLS関連の用語を統一する取り組みの一環として、BackendTLSPolicyに互換性のない変更を加えました。
これにより、新しいAPIバージョン(v1alpha3)が導入されました。
既存のv1alpha2を使用している場合は、データのバックアップや古いバージョンのアンインストールなど、適切な対応が必要です。&lt;/p&gt;
&lt;p&gt;v1alpha2のBackendTLSPolicyフィールドへの参照は、v1alpha3に更新する必要があります。
主な変更点は以下の通りです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;targetRef&lt;/code&gt;が&lt;code&gt;targetRefs&lt;/code&gt;に変更(複数のターゲットへの適用が可能に)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tls&lt;/code&gt;が&lt;code&gt;validation&lt;/code&gt;に変更&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tls.caCertRefs&lt;/code&gt;が&lt;code&gt;validation.caCertificateRefs&lt;/code&gt;に変更&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tls.wellKnownCACerts&lt;/code&gt;が&lt;code&gt;validation.wellKnownCACertificates&lt;/code&gt;に変更&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このリリースに含まれるすべての変更点については、&lt;a href=&#34;https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.1.0&#34;&gt;v1.1.0リリースノート&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&#34;gateway-apiの背景&#34;&gt;Gateway APIの背景&lt;/h2&gt;
&lt;p&gt;Gateway APIのアイデアは、2019年のKubeCon San Diegoで次世代のIngress APIとして&lt;a href=&#34;https://youtu.be/Ne9UJL6irXY?si=wgtC9w8PMB5ZHil2&#34;&gt;最初に提案&lt;/a&gt;されました。
それ以来、すばらしいコミュニティが形成され、おそらく&lt;a href=&#34;https://www.youtube.com/watch?v=V3Vu_FWb4l4&#34;&gt;Kubernetes史上最も協力的なAPI&lt;/a&gt;を開発してきました。
これまでに200人以上がこのAPIに貢献しており、その数は今も増え続けています。&lt;/p&gt;
&lt;p&gt;メンテナーは、リポジトリへのコミット、議論、アイデア、あるいは一般的なサポートなど、あらゆる形でGateway APIに貢献してくださった &lt;em&gt;全ての方々&lt;/em&gt; に感謝の意を表します。
このように献身的で活発なコミュニティのサポートなしでは、ここまで到達することはできませんでした。&lt;/p&gt;
&lt;h2 id=&#34;実際に使ってみましょう&#34;&gt;実際に使ってみましょう&lt;/h2&gt;
&lt;p&gt;Gateway APIの特徴として、最新版を使用するためにKubernetesそのものを最新にする必要がありません。
Kubernetes 1.26以降であれば、このバージョンのGateway APIをすぐに利用開始できます。&lt;/p&gt;
&lt;p&gt;APIを試すには、&lt;a href=&#34;https://gateway-api.sigs.k8s.io/guides/&#34;&gt;スタートガイド&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&#34;開発に参加しませんか&#34;&gt;開発に参加しませんか&lt;/h2&gt;
&lt;p&gt;Ingressやサービスメッシュ向けのKubernetesルーティングAPIの未来を形作るチャンスがたくさんあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/guides&#34;&gt;ユーザーガイド&lt;/a&gt;で、対応可能なユースケースをチェックしてみてください。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gateway-api.sigs.k8s.io/implementations/&#34;&gt;既存のGatewayコントローラー&lt;/a&gt;を実際に試してみるのもおすすめです。&lt;/li&gt;
&lt;li&gt;さらに、&lt;a href=&#34;https://gateway-api.sigs.k8s.io/contributing/&#34;&gt;コミュニティへの参加&lt;/a&gt;もお待ちしています。一緒にGateway APIの未来を築いていきましょう！&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;関連するkubernetesブログ記事&#34;&gt;関連するKubernetesブログ記事&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/11/28/gateway-api-ga/&#34;&gt;New Experimental Features in Gateway API v1.0&lt;/a&gt;
11/2023&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/10/31/gateway-api-ga/&#34;&gt;Gateway API v1.0: GA Release&lt;/a&gt;
10/2023&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/10/25/introducing-ingress2gateway/&#34;&gt;Introducing ingress2gateway; Simplifying Upgrades to Gateway API&lt;/a&gt;
10/2023&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/08/29/gateway-api-v0-8/&#34;&gt;Gateway API v0.8.0: Introducing Service Mesh Support&lt;/a&gt;
08/2023&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>DIY: Kubernetesで自分だけのクラウドを構築しよう(パート3)</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/</link>
      <pubDate>Fri, 05 Apr 2024 07:40:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/</guid>
      <description>
        
        
        &lt;p&gt;Kubernetesの中でKubernetesを実行するという最も興味深いフェーズに近づいています。
この記事では、KamajiやCluster APIなどのテクノロジーとそれらのKubeVirtとの統合について説明します。&lt;/p&gt;
&lt;p&gt;以前の議論では、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/&#34;&gt;ベアメタル上でのKubernetesの準備&lt;/a&gt;と、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2&#34;&gt;Kubernetesを仮想マシン管理システムに変える方法&lt;/a&gt;について説明しました。
この記事では、上記のすべてを使用して、本格的な管理対象のKubernetesを構築し、ワンクリックで仮想Kubernetesクラスターを実行する方法を説明して、シリーズを締めくくります。&lt;/p&gt;
&lt;p&gt;まず、Cluster APIについて詳しく見ていきましょう。&lt;/p&gt;
&lt;h2 id=&#34;cluster-api&#34;&gt;Cluster API&lt;/h2&gt;
&lt;p&gt;Cluster APIは、Kubernetesの拡張機能で、別のKubernetesクラスター内でカスタムリソースとしてKubernetesクラスターを管理できるようにするものです。&lt;/p&gt;
&lt;p&gt;Cluster APIの主な目的は、Kubernetesクラスターの基本的なエンティティを記述し、そのライフサイクルを管理するための統一されたインターフェースを提供することです。
これにより、クラスターの作成、更新、削除のプロセスを自動化し、スケーリングとインフラストラクチャの管理を簡素化できます。&lt;/p&gt;
&lt;p&gt;Cluster APIのコンテキストでは、&lt;strong&gt;管理クラスター&lt;/strong&gt;と&lt;strong&gt;テナントクラスター&lt;/strong&gt;の2つの用語があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;管理クラスター&lt;/strong&gt;は、他のクラスターのデプロイと管理に使用されるKubernetesクラスターです。
このクラスターには、必要なすべてのCluster APIコンポーネントが含まれており、テナントクラスターの記述、作成、更新を担当します。多くの場合、この目的でのみ使用されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;テナントクラスター&lt;/strong&gt;は、ユーザークラスターまたはCluster APIを使用してデプロイされたクラスターです。
これらは、管理クラスターで関連するリソースを記述することで作成されます。その後、エンドユーザーがアプリケーションとサービスをデプロイするために使用されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;テナントクラスターは、物理的に管理クラスターと同じインフラストラクチャ上で実行する必要は必ずしもないことを理解することが重要です。
むしろ多くの場合、それらは別の場所で実行されています。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi1.svg&#34;
         alt=&#34;Cluster APIを使用した管理KubernetesクラスターとテナントKubernetesクラスターの相互作用を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Cluster APIを使用した管理KubernetesクラスターとテナントKubernetesクラスターの相互作用を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Cluster APIは、その動作のために &lt;em&gt;プロバイダー&lt;/em&gt; の概念を利用します。
プロバイダーは、作成されるクラスターの特定のコンポーネントを担当する個別のコントローラーです。
Cluster API内にはいくつかの種類のプロバイダーがあります。
主なものは次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;インフラストラクチャプロバイダー&lt;/strong&gt;: 仮想マシンや物理サーバーなどのコンピューティングインフラストラクチャを提供する役割を担います。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コントロールプレーンプロバイダー&lt;/strong&gt;: kube-apiserver、kube-scheduler、kube-controller-managerなどのKubernetesコントロールプレーンを提供します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ブートストラッププロバイダー&lt;/strong&gt;: 作成される仮想マシンやサーバー用のcloud-init設定の生成に使用されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;始めるには、Cluster API自体と各種プロバイダーを1つずつインストールする必要があります。
サポートされているプロバイダーの完全なリストはプロジェクトの&lt;a href=&#34;https://cluster-api.sigs.k8s.io/reference/providers.html&#34;&gt;ドキュメント&lt;/a&gt;で確認できます。&lt;/p&gt;
&lt;p&gt;インストールには&lt;code&gt;clusterctl&lt;/code&gt;ユーティリティや、より宣言的な方法として&lt;a href=&#34;https://github.com/kubernetes-sigs/cluster-api-operator&#34;&gt;Cluster API Operator&lt;/a&gt;を使用できます。&lt;/p&gt;
&lt;h2 id=&#34;プロバイダーの選択&#34;&gt;プロバイダーの選択&lt;/h2&gt;
&lt;h3 id=&#34;インフラストラクチャプロバイダー&#34;&gt;インフラストラクチャプロバイダー&lt;/h3&gt;
&lt;p&gt;KubeVirtを使用してKubernetesクラスターを実行するには&lt;a href=&#34;https://github.com/kubernetes-sigs/cluster-api-provider-kubevirt&#34;&gt;KubeVirt Infrastructure Provider&lt;/a&gt;をインストールする必要があります。
これにより、Cluster APIが動作する管理クラスターと同じ場所で、ワーカーノード用の仮想マシンをデプロイできるようになります。&lt;/p&gt;
&lt;h3 id=&#34;コントロールプレーンプロバイダー&#34;&gt;コントロールプレーンプロバイダー&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/clastix/kamaji&#34;&gt;Kamaji&lt;/a&gt;プロジェクトは、管理クラスター内のコンテナとしてテナントクラスターのKubernetesコントロールプレーンを実行するためのソリューションを提供しています。
このアプローチには、いくつかの重要な利点があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;費用対効果&lt;/strong&gt;: コントロールプレーンをコンテナで実行することで、クラスターごとに個別のコントロールプレーンノードを使用する必要がなくなり、インフラストラクチャのコストを大幅に削減できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安定性&lt;/strong&gt;: 複雑な多層デプロイメント方式を排除することでアーキテクチャを簡素化できます。
仮想マシンを順次起動してからその中にetcdとKubernetesコンポーネントをインストールするのではなく、Kubernetes内で通常のアプリケーションとしてデプロイおよび実行され、オペレーターによって管理されるシンプルなコントロールプレーンがあります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;セキュリティ&lt;/strong&gt;: クラスターのコントロールプレーンはエンドユーザーから隠されており、そのコンポーネントが侵害される可能性を減らし、クラスターの証明書ストアへのユーザーアクセスを排除します。ユーザーに見えないコントロールプレーンを構成するこのアプローチは、クラウドプロバイダーによって頻繁に使用されています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ブートストラッププロバイダー&#34;&gt;ブートストラッププロバイダー&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubernetes-sigs/cluster-api/tree/main/bootstrap&#34;&gt;Kubeadm&lt;/a&gt;をブートストラッププロバイダーとして使用します。
これは、Cluster APIでクラスターを準備するための標準的な方法です。
このプロバイダーは、Cluster API自体の一部として開発されています。kubeletとkubeadmがインストールされた準備済みのシステムイメージのみが必要で、cloud-initとignitionの形式でコンフィグを生成できます。&lt;/p&gt;
&lt;p&gt;Talos LinuxもCluster API経由でのプロビジョニングをサポートしており、そのための&lt;a href=&#34;https://github.com/siderolabs/cluster-api-bootstrap-provider-talos&#34;&gt;プロバイダー&lt;/a&gt;が&lt;a href=&#34;https://github.com/siderolabs/cluster-api-bootstrap-provider-talos&#34;&gt;用意されている&lt;/a&gt;ことは注目に値します。
&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/&#34;&gt;前回の記事&lt;/a&gt;では、ベアメタルノードで管理クラスターをセットアップするためにTalos Linuxを使用する方法について説明しましたが、テナントクラスターをプロビジョニングするには、Kamaji+Kubeadmのアプローチの方が優れています。
コンテナへのKubernetesコントロールプレーンのデプロイを容易にするため、コントロールプレーンインスタンス用に個別の仮想マシンを用意する必要無くなります。
これにより、管理が簡素化され、コストが削減されます。&lt;/p&gt;
&lt;h2 id=&#34;動作の仕組み&#34;&gt;動作の仕組み&lt;/h2&gt;
&lt;p&gt;Cluster APIの主要なオブジェクトはClusterリソースで、他のすべてのリソースの親となります。
通常、このリソースは他の2つのリソースを参照します。
&lt;strong&gt;コントロールプレーン&lt;/strong&gt;を記述するリソースと&lt;strong&gt;インフラストラクチャ&lt;/strong&gt;を記述するリソースです。
それぞれが個別のプロバイダーによって管理されます。&lt;/p&gt;
&lt;p&gt;Clusterとは異なり、これら2つのリソースは標準化されておらず、そのリソースの種類は使用している特定のプロバイダーに依存します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi2.svg&#34;
         alt=&#34;Cluster APIにおけるClusterリソースとそれがリンクするリソースの関係を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Cluster APIにおけるClusterリソースとそれがリンクするリソースの関係を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Cluster APIには、MachineDeploymentという名前のリソースもあります。
これは物理サーバーか仮想マシンかにかかわらずノードのグループを記述するものです。
このリソースは、Deployment、ReplicaSet、Podなどの標準のKubernetesリソースと同様に機能し、ノードのグループを宣言的に記述し、自動的にスケーリングするためのメカニズムを提供します。&lt;/p&gt;
&lt;p&gt;つまり、MachineDeploymentリソースを使用すると、クラスターのノードを宣言的に記述でき、指定されたパラメーターと要求されたレプリカ数に応じて、ノードの作成、削除、更新を自動化できます。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/machinedeploymentres.svg&#34;
         alt=&#34;Cluster APIにおけるClusterリソースとその子リソースの関係を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Cluster APIにおけるMachineDeploymentリソースとその子リソースの関係を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;マシンを作成するために、MachineDeploymentは、マシン自体を生成するためのテンプレートと、そのcloud-init設定を生成するためのテンプレートを参照します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi3.svg&#34;
         alt=&#34;Cluster APIにおけるClusterリソースとそれがリンクするリソースの関係を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Cluster APIにおけるMachineDeploymentリソースとそれがリンクするリソースの関係を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Cluster APIを使用して新しいKubernetesクラスターをデプロイするには、以下のリソースのセットを準備する必要があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一般的なClusterリソース&lt;/li&gt;
&lt;li&gt;Kamajiが運用するコントロールプレーンを担当するKamajiControlPlaneリソース&lt;/li&gt;
&lt;li&gt;KubeVirt内のクラスター設定を記述するKubevirtClusterリソース&lt;/li&gt;
&lt;li&gt;仮想マシンテンプレートを担当するKubevirtMachineTemplateリソース&lt;/li&gt;
&lt;li&gt;トークンとcloud-initの生成を担当するKubeadmConfigTemplateリソース&lt;/li&gt;
&lt;li&gt;いくつかのワーカーを作成するための少なくとも1つのMachineDeployment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;クラスターの仕上げ&#34;&gt;クラスターの仕上げ&lt;/h2&gt;
&lt;p&gt;ほとんどの場合これで十分ですが、使用するプロバイダーによっては、他のリソースも必要になる場合があります。
プロバイダーの種類ごとに作成されるリソースの例は、&lt;a href=&#34;https://github.com/clastix/cluster-api-control-plane-provider-kamaji?tab=readme-ov-file#-supported-capi-infrastructure-providers&#34;&gt;Kamajiプロジェクトのドキュメント&lt;/a&gt;で確認できます。&lt;/p&gt;
&lt;p&gt;この段階ですでに使用可能なテナントKubernetesクラスターができていますが、これまでのところ、APIワーカーとあらゆるKubernetesクラスターのインストールに標準で含まれるいくつかのコアプラグイン(&lt;strong&gt;kube-proxy&lt;/strong&gt;と&lt;strong&gt;CoreDNS&lt;/strong&gt;)しか含まれていません。
完全に統合するには、さらにいくつかのコンポーネントをインストールする必要があります。&lt;/p&gt;
&lt;p&gt;追加のコンポーネントをインストールするには、個別の&lt;a href=&#34;https://github.com/kubernetes-sigs/cluster-api-addon-provider-helm&#34;&gt;Cluster API Add-on Provider for Helm&lt;/a&gt;や、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/&#34;&gt;前の記事&lt;/a&gt;で説明した&lt;a href=&#34;https://fluxcd.io/&#34;&gt;FluxCD&lt;/a&gt;を使用できます。&lt;/p&gt;
&lt;p&gt;FluxCDでリソースを作成する際、Cluster APIによって生成されたkubeconfigを参照することでターゲットクラスターを指定できます。
そうするとインストールは直接そのクラスターに対して実行されます。
このように、FluxCDは管理クラスターとユーザーテナントクラスターの両方でリソースを管理するための汎用ツールになります。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/fluxcd.svg&#34;
         alt=&#34;管理クラスターとテナントKubernetesクラスターの両方にコンポーネントをインストールできるfluxcdの相互作用スキームを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;管理クラスターとテナントKubernetesクラスターの両方にコンポーネントをインストールできるfluxcdの相互作用スキームを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ここで議論されているコンポーネントとは何でしょうか？一般的に、そのセットには以下が含まれます。&lt;/p&gt;
&lt;h3 id=&#34;cniプラグイン&#34;&gt;CNIプラグイン&lt;/h3&gt;
&lt;p&gt;テナントKubernetesクラスター内のPod間の通信を確保するには、CNIプラグインをデプロイする必要があります。
このプラグインは、Pod同士が相互に通信できるようにする仮想ネットワークを作成し、従来はクラスターのワーカーノード上にDaemonsetとしてデプロイされます。
適切だと思うCNIプラグインを選んでインストールできます。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components1.svg&#34;
         alt=&#34;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスター内にインストールされたCNIプラグインを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスター内にインストールされたCNIプラグインを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;クラウドコントローラーマネージャー&#34;&gt;クラウドコントローラーマネージャー&lt;/h3&gt;
&lt;p&gt;この一部レスポンスについては、以下のようにMarkdown記法を修正するのが良いと思います。&lt;/p&gt;
&lt;p&gt;クラウドコントローラーマネージャー(CCM)の主な役割は、Kubernetes をクラウドインフラストラクチャプロバイダーの環境(この場合は、テナントKubernetesのすべてのワーカーがプロビジョニングされている管理Kubernetesクラスター)と統合することです。
CCMが実行するタスクは次のとおりです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LoadBalancer タイプのサービスが作成されると、CCM はクラウドロードバランサーの作成プロセスを開始します。これにより、トラフィックが Kubernetes クラスターに誘導されます。&lt;/li&gt;
&lt;li&gt;クラウドインフラストラクチャからノードが削除された場合、CCM はクラスターからもそのノードを確実に削除し、クラスターの現在の状態を維持します。&lt;/li&gt;
&lt;li&gt;CCM を使用する場合、ノードは特別な taint (&lt;code&gt;node.cloudprovider.kubernetes.io/uninitialized&lt;/code&gt;) を付けてクラスターに追加されます。これにより、必要に応じて追加のビジネスロジックを処理できます。初期化が正常に完了すると、この taint がノードから削除されます。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;クラウドプロバイダーによっては、CCM がテナントクラスターの内部と外部の両方で動作する場合があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubevirt/cloud-provider-kubevirt&#34;&gt;KubeVirt Cloud Provider&lt;/a&gt;は、外部の親管理クラスターにインストールするように設計されています。
したがって、テナントクラスターでLoadBalancerタイプのサービスを作成すると親クラスターでLoadBalancerサービスの作成が開始され、トラフィックがテナントクラスターに誘導されます。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components2.svg&#34;
         alt=&#34;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの外部にインストールされたCloud Controller Managerと、それが管理する親から子へのKubernetesクラスター間のサービスのマッピングを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの外部にインストールされたCloud Controller Managerと、それが管理する親から子へのKubernetesクラスター間のサービスのマッピングを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;csiドライバー&#34;&gt;CSIドライバー&lt;/h3&gt;
&lt;p&gt;Container Storage Interface(CSI)は、Kubernetesでストレージを操作するために、2つの主要な部分に分かれています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;csi-controller&lt;/strong&gt;: このコンポーネントは、クラウドプロバイダーのAPIと対話して、ボリュームの作成、削除、アタッチ、デタッチ、およびサイズ変更を行う責任があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;csi-node&lt;/strong&gt;: このコンポーネントは各ノードで実行され、kubeletから要求されたPodへのボリュームのマウントを容易にします。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubevirt/csi-driver&#34;&gt;KubeVirt CSI Driver&lt;/a&gt;を使用するコンテキストでは、ユニークな機会が生まれます。
KubeVirtの仮想マシンは管理KubernetesクラスターでKubernetesのフル機能のAPIが利用できる環境で実行されるため、ユーザーのテナントクラスターの外部でcsi-controllerを実行する道が開かれます。
このアプローチはKubeVirtコミュニティで人気があり、いくつかの重要な利点があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;セキュリティ&lt;/strong&gt;: この方法では、エンドユーザーからクラウドの内部APIを隠し、Kubernetesインターフェースを介してのみリソースへのアクセスを提供します。これにより、ユーザークラスターから管理クラスターへの直接アクセスのリスクが軽減されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;シンプルさと利便性&lt;/strong&gt;: ユーザーは自分のクラスターで追加のコントローラーを管理する必要がないため、アーキテクチャが簡素化され、管理の負担が軽減されます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ただし、csi-nodeは、各ノードのkubeletと直接やり取りするため、必然的にテナントクラスター内で実行する必要があります。
このコンポーネントは、Podへのボリュームのマウントとマウント解除を担当し、クラスターノードで直接発生するプロセスとの緊密な統合が必要です。&lt;/p&gt;
&lt;p&gt;KubeVirt CSIドライバーは、ボリュームの要求のためのプロキシとして機能します。
テナントクラスター内でPVCが作成されると、管理クラスターにPVCが作成され、作成されたPVが仮想マシンに接続されます。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components3.svg&#34;
         alt=&#34;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの内部と外部の両方にインストールされたCSIプラグインのコンポーネントと、それが管理する親から子へのKubernetesクラスター間の永続ボリュームのマッピングを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの内部と外部の両方にインストールされたCSIプラグインのコンポーネントと、それが管理する親から子へのKubernetesクラスター間の永続ボリュームのマッピングを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;クラスターオートスケーラー&#34;&gt;クラスターオートスケーラー&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubernetes/autoscaler&#34;&gt;クラスターオートスケーラー&lt;/a&gt;は、さまざまなクラウドAPIと連携できる汎用的なコンポーネントであり、Cluster APIとの統合は利用可能な機能の1つに過ぎません。
適切に設定するには、2つのクラスターへのアクセスが必要です。
テナントクラスターではPodを追跡し、新しいノードを追加する必要性を判断し、管理するKubernetesクラスター(管理Kubernetesクラスター)ではMachineDeploymentリソースと対話し、レプリカ数を調整します。&lt;/p&gt;
&lt;p&gt;Cluster Autoscalerは通常テナントKubernetesクラスター内で実行されますが、今回のケースでは、前述と同じ理由からクラスター外にインストールすることをお勧めします。
このアプローチは、テナントクラスターのユーザーが管理クラスターの管理APIにアクセスできないようにするため、メンテナンスがより簡単で、より安全です。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components4.svg&#34;
         alt=&#34;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの外部にインストールされたCloud Controller Managerを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;ネストされたKubernetesクラスターのスキームにおいて、テナントKubernetesクラスターの外部にインストールされたCluster Autoscalerを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;konnectivity&#34;&gt;Konnectivity&lt;/h3&gt;
&lt;p&gt;もう1つ追加のコンポーネントについて言及したいと思います。
&lt;a href=&#34;https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/&#34;&gt;Konnectivity&lt;/a&gt;です。
後でテナントKubernetesクラスターでwebhookとAPIアグリゲーションレイヤーを動作させるために、おそらくこれが必要になるでしょう。
このトピックについては、私の&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2021/12/22/kubernetes-in-kubernetes-and-pxe-bootable-server-farm/#webhooks-and-api-aggregation-layer&#34;&gt;以前の記事&lt;/a&gt;で詳しく説明しています。&lt;/p&gt;
&lt;p&gt;上記のコンポーネントとは異なり、Kamajiでは、Konnectivityを簡単に有効にし、kube-proxyやCoreDNSと並んで、テナントクラスターのコアコンポーネントの1つとして管理できます。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これで、動的スケーリング、ボリュームの自動プロビジョニング、ロードバランサーの機能を備えた、完全に機能するKubernetesクラスターができました。&lt;/p&gt;
&lt;p&gt;今後は、テナントクラスターからのメトリクスやログの収集を検討するとよいでしょうが、それはこの記事の範囲を超えています。&lt;/p&gt;
&lt;p&gt;もちろん、Kubernetesクラスターをデプロイするために必要なコンポーネントはすべて、1つのHelmチャートにパッケージ化し、統一されたアプリケーションとしてデプロイできます。
これは、オープンなPaaSプラットフォームである&lt;a href=&#34;https://cozystack.io/&#34;&gt;Cozystack&lt;/a&gt;で、ボタンをクリックするだけで管理対象のKubernetesクラスターのデプロイを整理する方法そのものです。
Cozystackでは、記事で説明したすべてのテクノロジーを無料で試すことができます。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>DIY: Kubernetesで自分だけのクラウドを構築しよう(パート2)</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/</link>
      <pubDate>Fri, 05 Apr 2024 07:35:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/</guid>
      <description>
        
        
        &lt;p&gt;Kubernetesエコシステムだけを使って自分だけのクラウドを構築する方法について、一連の記事を続けています。
&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/&#34;&gt;前回の記事&lt;/a&gt;では、Talos LinuxとFlux CDをベースにした基本的なKubernetes ディストリビューションの準備方法を説明しました。
この記事では、Kubernetesにおけるさまざまな仮想化テクノロジーをいくつか紹介し、主にストレージとネットワークを中心に、Kubernetes内で仮想マシンを実行するために必要な環境を整えます。&lt;/p&gt;
&lt;p&gt;KubeVirt、LINSTOR、Kube-OVNなどのテクノロジーについて取り上げる予定です。&lt;/p&gt;
&lt;p&gt;しかし最初に、仮想マシンが必要な理由と、クラウドの構築にDockerコンテナを使用するだけでは不十分である理由を説明しましょう。
その理由は、コンテナが十分なレベルの分離を提供していないことにあります。
状況は年々改善されていますが、コンテナのサンドボックスから脱出してシステムの特権を昇格させる脆弱性が見つかることがよくあります。&lt;/p&gt;
&lt;p&gt;一方、Kubernetesはもともとマルチテナントシステムとして設計されていなかったため、基本的な使用パターンでは、独立したプロジェクトや開発チームごとに別々のKubernetesクラスターを作成することが一般的です。&lt;/p&gt;
&lt;p&gt;仮想マシンは、クラウド環境でテナント同士を分離するための主要な手段です。
仮想マシン内では、ユーザーは管理者権限でコードやプログラムを実行できますが、これは他のテナントや環境自体に影響を与えません。
つまり、仮想マシンは&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/security/multi-tenancy/#isolation&#34;&gt;ハードマルチテナンシー分離&lt;/a&gt;を実現し、テナント間で信頼関係がない環境でも安全に実行できます。&lt;/p&gt;
&lt;h2 id=&#34;kubernetes-における仮想化テクノロジー&#34;&gt;Kubernetes における仮想化テクノロジー&lt;/h2&gt;
&lt;p&gt;Kubernetesの世界に仮想化をもたらすテクノロジーはいくつかありますが、&lt;a href=&#34;https://kubevirt.io/&#34;&gt;KubeVirt&lt;/a&gt;と&lt;a href=&#34;https://katacontainers.io/&#34;&gt;Kata Containers&lt;/a&gt;が最も一般的です。
ただし、これらの動作方式は異なることを理解しておく必要があります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kata Containers&lt;/strong&gt;は、CRI(Container Runtime Interface)を実装しており、標準のコンテナを仮想マシン内で実行することで、追加の分離レベルを提供します。
ただし、これらは同一のKubernetesクラスター内で動作します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/kata-containers.svg&#34;
         alt=&#34;コンテナを仮想マシン内で実行することにより、Kata Containersがコンテナの分離を確保する方法を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;コンテナを仮想マシン内で実行することにより、Kata Containersがコンテナの分離を確保する方法を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;KubeVirtは、Kubernetes APIを使用して従来の仮想マシンを実行できます。
KubeVirtの仮想マシンは、コンテナ内の通常のLinuxプロセスとして実行されます。
つまり、KubeVirtでは、コンテナが仮想マシン(QEMU)プロセスを実行するためのサンドボックスとして使用されます。
これは、以下の図で、KubeVirtにおける仮想マシンのライブマイグレーションの実装方法を見ると明らかです。
マイグレーションが必要な場合、仮想マシンはあるコンテナから別のコンテナに移動します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/kubevirt-migration.svg&#34;
         alt=&#34;KubeVirtにおいて、仮想マシンがあるコンテナから別のコンテナへライブマイグレーションする様子を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;KubeVirtにおいて、仮想マシンがあるコンテナから別のコンテナへライブマイグレーションする様子を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/cloud-hypervisor/cloud-hypervisor&#34;&gt;Cloud-Hypervisor&lt;/a&gt;を使用した軽量な仮想化を実装し、初期からCluster APIを使用した仮想Kubernetesクラスターの実行に重点を置いている代替プロジェクト&lt;a href=&#34;https://github.com/smartxworks/virtink&#34;&gt;Virtink&lt;/a&gt;もあります。&lt;/p&gt;
&lt;p&gt;私たちの目標を考慮して、この分野で最も一般的なプロジェクトであるKubeVirtを使用することに決めました。
さらに、私たちはKubeVirtに関する豊富な専門知識を持ち、すでに多くの貢献をしています。&lt;/p&gt;
&lt;p&gt;KubeVirtは&lt;a href=&#34;https://kubevirt.io/user-guide/operations/installation/&#34;&gt;インストールが簡単&lt;/a&gt;で、&lt;a href=&#34;https://kubevirt.io/user-guide/virtual_machines/disks_and_volumes/#containerdisk&#34;&gt;containerDisk&lt;/a&gt;機能を使用してすぐに仮想マシンを実行できます。
この機能により、VMイメージをコンテナイメージレジストリから直接OCIイメージとして保存および配布できます。
containerDiskを使用した仮想マシンは、Kubernetesワーカーノードやその他の状態の永続化を必要としない仮想マシンの作成に適しています。&lt;/p&gt;
&lt;p&gt;永続データを管理するために、KubeVirtは別のツールであるContainerized Data Importer(CDI)を提供しています。
CDIを使用すると、PVCのクローンを作成し、ベースイメージからデータを取り込むことができます。
CDIは、仮想マシンの永続ボリュームを自動的にプロビジョニングする場合や、テナントKubernetesクラスターからの永続ボリューム要求を処理するために使用されるKubeVirt CSIドライバーにも必要となります。&lt;/p&gt;
&lt;p&gt;しかし最初に、これらのデータをどこにどのように保存するかを決める必要があります。&lt;/p&gt;
&lt;h2 id=&#34;kubernetes上の仮想マシン用ストレージ&#34;&gt;Kubernetes上の仮想マシン用ストレージ&lt;/h2&gt;
&lt;p&gt;CSI(Container Storage Interface)の導入により、Kubernetesと統合できる幅広いテクノロジーが利用可能になりました。
実際、KubeVirtはCSIインターフェースを完全に活用しており、仮想化のためのストレージの選択肢はKubernetes自体のストレージの選択肢と密接に連携しています。
しかし、考慮すべき細かな差異があります。
通常、標準のファイルシステムを使用するコンテナとは異なり、仮想マシンにはブロックデバイスの方が効率的です。&lt;/p&gt;
&lt;p&gt;KubernetesのCSIインターフェースでは、ファイルシステムとブロックデバイスの両方のタイプのボリュームを要求できますが、使用しているストレージバックエンドがこれをサポートしていることを確認することが重要です。&lt;/p&gt;
&lt;p&gt;仮想マシンにブロックデバイスを使用すると、ファイルシステムなどの追加の抽象化レイヤーが不要になるため、パフォーマンスが向上し、ほとんどの場合で &lt;em&gt;ReadWriteMany&lt;/em&gt; モードの使用が可能になります。
このモードでは、複数のノードから同時にボリュームにアクセスできるため、KubeVirtにおける仮想マシンのライブマイグレーションを有効にするための重要な機能です。&lt;/p&gt;
&lt;p&gt;ストレージシステムは、外部または内部(ハイパーコンバージドインフラストラクチャの場合)にすることができます。
多くの場合、外部ストレージを使用するとデータが計算ノードから分離して保存されるため、システム全体の安定性が向上します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-external.svg&#34;
         alt=&#34;計算ノードと通信する外部データストレージを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;計算ノードと通信する外部データストレージを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;外部ストレージソリューションは、エンタープライズシステムでよく使用されています。
このようなストレージは、多くの場合運用を担当する外部ベンダーによって提供されるためです。
Kubernetesとの統合には、クラスターにインストールされる小さなコンポーネントであるCSIドライバーのみが関与します。
このドライバーは、このストレージにボリュームをプロビジョニングし、Kubernetesによって実行されるPodにそれらをアタッチする役割を担います。
ただし、このようなストレージソリューションは、純粋にオープンソースのテクノロジーを使用して実装することもできます。
人気のあるソリューションの1つは、&lt;a href=&#34;https://github.com/democratic-csi/democratic-csi&#34;&gt;democratic-csi&lt;/a&gt;ドライバーを使用した&lt;a href=&#34;https://www.truenas.com/&#34;&gt;TrueNAS&lt;/a&gt;です。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-local.svg&#34;
         alt=&#34;コンピュートノード上で実行されるローカルデータストレージを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;コンピュートノード上で実行されるローカルデータストレージを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;一方、ハイパーコンバージドシステムは、多くの場合、ローカルストレージ(レプリケーションが不要な場合)と、&lt;a href=&#34;https://rook.io/&#34;&gt;Rook/Ceph&lt;/a&gt;、&lt;a href=&#34;https://openebs.io/&#34;&gt;OpenEBS&lt;/a&gt;、&lt;a href=&#34;https://longhorn.io/&#34;&gt;Longhorn&lt;/a&gt;、&lt;a href=&#34;https://linbit.com/linstor/&#34;&gt;LINSTOR&lt;/a&gt;などのソフトウェアデファインドストレージを使用して実装されます。
これらは、多くの場合、Kubernetesに直接インストールされます。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-clustered.svg&#34;
         alt=&#34;コンピュートノード上で実行されるクラスター化データストレージを示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;コンピュートノード上で実行されるクラスター化データストレージを示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ハイパーコンバージドシステムには利点があります。
たとえば、データの局所性です。
データがローカルに保存されている場合、そのデータへのアクセスは高速になります。
しかし、このようなシステムは通常、管理と保守がより難しいという欠点があります。&lt;/p&gt;
&lt;p&gt;Ænixでは、追加の外部ストレージを購入してセットアップする必要なく使用でき、速度とリソースの利用の点で最適な、すぐに使える解決策を提供したいと考えていました。
LINSTORがその解決策となりました。
バックエンドとして業界で人気のある実績あるテクノロジーであるLVMやZFSを使用していることで、データが安全に保存されていることに自信が持てます。
DRDBベースのレプリケーションは信じられないほど高速で、少ない計算リソースしか消費しません。&lt;/p&gt;
&lt;p&gt;Kubernetes上でLINSTORをインストールするには、PiraeusプロジェクトがKubeVirtで使用できる既製のブロックストレージをすでに提供しています。&lt;/p&gt;

&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;&lt;h4 class=&#34;alert-heading&#34;&gt;備考:&lt;/h4&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/&#34;&gt;前回の記事&lt;/a&gt;で説明したように、Talos Linuxを使用している場合は、必要なカーネルモジュールを事前に有効にし、&lt;a href=&#34;https://github.com/piraeusdatastore/piraeus-operator/blob/v2/docs/how-to/talos.md&#34;&gt;手順&lt;/a&gt;に従ってPiraeusを設定する必要があります。&lt;/div&gt;

&lt;h2 id=&#34;kubernetes上の仮想マシン用ネットワーク&#34;&gt;Kubernetes上の仮想マシン用ネットワーク&lt;/h2&gt;
&lt;p&gt;Kubernetesのネットワークアーキテクチャは同じようなインターフェースであるCNIを持っているにもかかわらず、実際にはより複雑で、通常、互いに直接接続されていない多くの独立したコンポーネントで構成されています。
実際、Kubernetesのネットワークは以下に説明する4つのレイヤーに分割できます。&lt;/p&gt;
&lt;h3 id=&#34;ノードネットワーク-データセンターネットワーク&#34;&gt;ノードネットワーク (データセンターネットワーク)&lt;/h3&gt;
&lt;p&gt;ノードが相互に接続されるネットワークです。
このネットワークは通常、Kubernetesによって管理されませんが、これがないと何も機能しないため、重要なネットワークです。
実際には、ベアメタルインフラストラクチャには通常、複数のこのようなネットワークがあります。
例えば、ノード間通信用の1つ、ストレージレプリケーション用の2つ目、外部アクセス用の3つ目などです。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-nodes.svg&#34;
         alt=&#34;Kubernetesのネットワーク構成におけるノードネットワーク(データセンターネットワーク)の役割を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Kubernetesのネットワーク構成におけるノードネットワーク(データセンターネットワーク)の役割を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ノード間の物理ネットワークの相互作用の設定は、ほとんどの状況でKubernetesが既存のネットワークインフラストラクチャを利用するため、この記事の範囲を超えています。&lt;/p&gt;
&lt;h3 id=&#34;podネットワーク&#34;&gt;Podネットワーク&lt;/h3&gt;
&lt;p&gt;これは、CNIプラグインによって提供されるネットワークです。
CNIプラグインの役割は、クラスター内のすべてのコンテナとノード間の透過的な接続を確保することです。
ほとんどのCNIプラグインは、各ノードで使用するためにIPアドレスの個別のブロックが割り当てられるフラットネットワークを実装しています。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-pods.svg&#34;
         alt=&#34;Kubernetesのネットワーク構成におけるPodネットワーク(CNIプラグイン)の役割を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Kubernetesのネットワーク構成におけるPodネットワーク(CNIプラグイン)の役割を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;実際には、クラスターには&lt;a href=&#34;https://github.com/k8snetworkplumbingwg/multus-cni&#34;&gt;Multus&lt;/a&gt;によって管理される複数のCNIプラグインを持つことができます。
このアプローチは、&lt;a href=&#34;https://www.rancher.com/&#34;&gt;Rancher&lt;/a&gt;や&lt;a href=&#34;https://www.redhat.com/en/technologies/cloud-computing/openshift/virtualization&#34;&gt;OpenShift&lt;/a&gt;などのKubeVirtベースの仮想化ソリューションでよく使用されます。
プライマリCNIプラグインはKubernetesサービスとの統合に使用され、追加のCNIプラグインはプライベートネットワーク(VPC)の実装やデータセンターの物理ネットワークとの統合に使用されます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/containernetworking/plugins/tree/main/plugins&#34;&gt;デフォルトのCNIプラグイン&lt;/a&gt;は、ブリッジまたは物理インターフェースの接続に使用できます。
さらに、パフォーマンスを向上させるために設計された&lt;a href=&#34;https://github.com/kubevirt/macvtap-cni&#34;&gt;macvtap-cni&lt;/a&gt;などの専用プラグインもあります。&lt;/p&gt;
&lt;p&gt;Kubernetes内で仮想マシンを実行する際に注意すべきもう1つの側面は、特にMultusによって提供されるセカンダリインターフェースに対するIPAM(IPアドレス管理)の必要性です。
これは通常、インフラストラクチャ内で動作するDHCPサーバーによって管理されます。
さらに、仮想マシンのMACアドレスの割り当ては、&lt;a href=&#34;https://github.com/k8snetworkplumbingwg/kubemacpool&#34;&gt;Kubemacpool&lt;/a&gt;によって管理できます。&lt;/p&gt;
&lt;p&gt;私たちのプラットフォームでは、別の方法を選択し、&lt;a href=&#34;https://www.kube-ovn.io/&#34;&gt;Kube-OVN&lt;/a&gt;に完全に頼ることにしました。
このCNIプラグインは、もともとOpenStack用に開発されたOVN(Open Virtual Network)をベースにしています。
Kube-OVNはKubernetes内の仮想マシン用の完全なネットワークソリューションを提供します。
IPとMACアドレスを管理するためのカスタムリソースを備え、ノード間でIPアドレスを保持したままライブマイグレーションをサポートし、テナント間の物理ネットワーク分離用のVPCの作成を可能にします。&lt;/p&gt;
&lt;p&gt;Kube-OVNでは、名前空間全体に個別のサブネットを割り当てたり、Multusを使用して追加のネットワークインターフェースとして接続したりできます。&lt;/p&gt;
&lt;h3 id=&#34;サービスネットワーク&#34;&gt;サービスネットワーク&lt;/h3&gt;
&lt;p&gt;CNIプラグインに加えて、Kubernetesにはサービスネットワークもあります。これは主にサービスディスカバリーに必要です。
従来の仮想マシンとは異なり、KubernetesはもともとランダムなアドレスでPodを実行するように設計されています。
そして、サービスネットワークは、トラフィックを常に正しいPodに誘導する便利な抽象化(安定したIPアドレスとDNS名)を提供します。
仮想マシンのIPは通常静的であるにもかかわらず、このアプローチはクラウド内の仮想マシンでも一般的に使用されています。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-services.svg&#34;
         alt=&#34;Kubernetesのネットワーク構成におけるサービスネットワーク(サービスネットワークプラグイン)の役割を示す図&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Kubernetesのネットワーク構成におけるサービスネットワーク(サービスネットワークプラグイン)の役割を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Kubernetesでのサービスネットワークの実装は、サービスネットワークプラグインによって処理されます。
標準の実装は&lt;strong&gt;kube-proxy&lt;/strong&gt;と呼ばれ、ほとんどのクラスターで使用されています。
しかし最近では、この機能はCNIプラグインの一部として提供されることがあります。
最も先進的な実装は、&lt;a href=&#34;https://cilium.io/&#34;&gt;Cilium&lt;/a&gt;プロジェクトによって提供されており、kube-proxyの代替モードで実行できます。&lt;/p&gt;
&lt;p&gt;CiliumはeBPFテクノロジーに基づいており、Linuxネットワークスタックを効率的にオフロードできるため、iptablesベースの従来の方法と比較してパフォーマンスとセキュリティが向上します。&lt;/p&gt;
&lt;p&gt;実際には、CiliumとKube-OVNを簡単に&lt;a href=&#34;https://kube-ovn.readthedocs.io/zh-cn/stable/en/advance/with-cilium/&#34;&gt;統合&lt;/a&gt;することが可能です。
これにより、仮想マシン向けにシームレスでマルチテナントのネットワーキングを提供する統合ソリューションを実現することができます。
また、高度なネットワークポリシーと統合されたサービスネットワーク機能も提供されます。&lt;/p&gt;
&lt;h3 id=&#34;外部トラフィックのロードバランサー&#34;&gt;外部トラフィックのロードバランサー&lt;/h3&gt;
&lt;p&gt;この段階で、Kubernetes内で仮想マシンを実行するために必要なものはすべて揃っています。
しかし、実際にはもう1つ必要なものがあります。
クラスターの外部からサービスにアクセスする必要がまだあり、外部ロードバランサーがこれを整理するのに役立ちます。&lt;/p&gt;
&lt;p&gt;ベアメタルのKubernetesクラスターには、いくつかの利用可能なロードバランサーがあります。
&lt;a href=&#34;https://metallb.universe.tf/&#34;&gt;MetalLB&lt;/a&gt;、&lt;a href=&#34;https://kube-vip.io/&#34;&gt;kube-vip&lt;/a&gt;、&lt;a href=&#34;https://www.loxilb.io/&#34;&gt;LoxiLB&lt;/a&gt;があり、また&lt;a href=&#34;https://docs.cilium.io/en/latest/network/lb-ipam/&#34;&gt;Cilium&lt;/a&gt;と&lt;a href=&#34;https://kube-ovn.readthedocs.io/zh-cn/latest/en/guide/loadbalancer-service/&#34;&gt;Kube-OVN&lt;/a&gt;にはビルトインの実装が提供されています。&lt;/p&gt;
&lt;p&gt;外部ロードバランサーの役割は、外部から利用可能な安定したアドレスを提供し、外部トラフィックをサービスネットワークに誘導することです。
サービスネットワークプラグインは、通常どおりそれをPodと仮想マシンに誘導します。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-loadbalancer.svg&#34;
         alt=&#34;Kubernetesのネットワーク構成における外部ロードバランサーの役割&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;Kubernetesのネットワーク構成における外部ロードバランサーの役割を示す図&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ほとんどの場合、ベアメタル上でのロードバランサーの設定は、クラスター内のノードにフローティングIPアドレスを作成し、ARP/NDPまたはBGPプロトコルを使用してそれを外部にアナウンスすることによって実現されます。&lt;/p&gt;
&lt;p&gt;さまざまなオプションを検討した結果、MetalLBが最もシンプルで信頼性の高いソリューションであると判断しましたが、MetalLBの使用のみを厳密に強制しているわけではありません。&lt;/p&gt;
&lt;p&gt;もう1つの利点は、L2モードでは、MetalLBスピーカーがメンバーリストプロトコルを使用してライブネスチェックを実行することにより、ネイバーの状態を継続的にチェックすることです。
これにより、Kubernetesコントロールプレーンとは独立して機能するフェイルオーバーが可能になります。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;ここまでが、Kubernetesにおける仮想化、ストレージ、ネットワークの概要になります。
ここで取り上げたテクノロジーは、&lt;a href=&#34;https://github.com/aenix-io/cozystack&#34;&gt;Cozystack&lt;/a&gt;プラットフォームで利用可能であり、制限なくお試しいただけるよう事前に設定されています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/&#34;&gt;次の記事&lt;/a&gt;では、この上にボタンをクリックするだけで、完全に機能するKubernetesクラスターのプロビジョニングをどのように実装できるかを詳しく説明します。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>DIY: Kubernetesで自分だけのクラウドを構築しよう(パート1)</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/</link>
      <pubDate>Fri, 05 Apr 2024 07:30:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/</guid>
      <description>
        
        
        &lt;p&gt;Ænixでは、Kubernetesに対する深い愛着があり、近いうちにすべての最新テクノロジーがKubernetesの驚くべきパターンを活用し始めることを夢見ています。
自分だけのクラウドを構築することを考えたことはありませんか？きっと考えたことがあるでしょう。
しかし、快適なKubernetesエコシステムを離れることなく、最新のテクノロジーとアプローチのみを使ってそれを実現することは可能でしょうか？
Cozystackの開発における私たちの経験は、その点を深く掘り下げる必要がありました。
自分だけのクラウドを構築することを考えたことはありませんか？&lt;/p&gt;
&lt;p&gt;Kubernetesはこの目的のために設計されたものではなく、ベアメタルサーバー用にOpenStackを使用し、意図したとおりにその内部でKubernetesを実行すればよいのではないかと主張する人もいるかもしれません。
しかし、そうすることで、単に責任があなたの手からOpenStack管理者の手に移っただけです。
これにより、少なくとも1つの巨大で複雑なシステムがエコシステムに追加されることになります。&lt;/p&gt;
&lt;p&gt;なぜ物事を複雑にするのでしょうか？
結局のところ、Kubernetesにはテナント用のKubernetesクラスターを実行するために必要なものがすべて揃っています。&lt;/p&gt;
&lt;p&gt;Kubernetesをベースにしたクラウドプラットフォームの開発における私たちの経験を共有したいと思います。
私たち自身が使用しており、あなたの注目に値すると信じているオープンソースプロジェクトを紹介します。&lt;/p&gt;
&lt;p&gt;この一連の記事では、オープンソースのテクノロジーのみを使用して、ベアメタルから管理されたKubernetesを準備する方法についての私たちの物語をお伝えします。
データセンターの準備、仮想マシンの実行、ネットワークの分離、フォールトトレラントなストレージのセットアップといった基本的なレベルから、動的なボリュームのプロビジョニング、ロードバランサー、オートスケーリングを備えた本格的なKubernetesクラスターのプロビジョニングまでを扱います。&lt;/p&gt;
&lt;p&gt;この記事から、いくつかのパートで構成されるシリーズを開始します:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;パート1&lt;/strong&gt;: 自分のクラウドの基礎を準備する。ベアメタル上でのKubernetesの準備と運用における課題、およびインフラストラクチャをプロビジョニングするための既成のレシピ。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パート2&lt;/strong&gt;: ネットワーク、ストレージ、仮想化。Kubernetesを仮想マシン起動のためのツールにする方法とそのために必要なもの。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パート3&lt;/strong&gt;: Cluster APIと、ボタンを押すだけでKubernetesクラスターのプロビジョニングを開始する方法。オートスケーリング、ボリュームの動的プロビジョニング、ロードバランサーの仕組み。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;さまざまなテクノロジーをできるだけ独立して説明しようと思いますが、同時に、私たちの経験と、なぜある解決策に至ったのかを共有します。&lt;/p&gt;
&lt;p&gt;まず、Kubernetesの主な利点と、それがクラウドリソースの使用へのアプローチをどのように変えたかを理解しましょう。&lt;/p&gt;
&lt;p&gt;クラウドとベアメタルでは、Kubernetesの使い方が異なることを理解することが重要です。&lt;/p&gt;
&lt;h2 id=&#34;クラウド上のkubernetes&#34;&gt;クラウド上のKubernetes&lt;/h2&gt;
&lt;p&gt;クラウド上でKubernetesを運用する場合、永続ボリューム、クラウドロードバランサー、ノードのプロビジョニングプロセスを気にする必要はありません。
これらはすべて、Kubernetesオブジェクトの形式であなたのリクエストを受け入れるクラウドプロバイダーによって処理されます。
つまり、サーバー側は完全にあなたから隠されており、クラウドプロバイダーがどのように正確に実装しているかを知る必要はありません。
それはあなたの責任範囲ではないからです。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/cloud.svg&#34;
         alt=&#34;クラウド上のKubernetesを示す図。ロードバランシングとストレージはクラスターの外部で行われています&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;クラウド上のKubernetesを示す図。ロードバランシングとストレージはクラスターの外部で行われています&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Kubernetesは、どこでも同じように機能する便利な抽象化を提供しているため、あらゆるクラウドのKubernetes上にアプリケーションをデプロイできます。&lt;/p&gt;
&lt;p&gt;クラウドでは、Kubernetesコントロールプレーン、仮想マシン、永続ボリューム、ロードバランサーなど、いくつかの個別のエンティティを持つことが非常に一般的です。
これらのエンティティを使用することで、高度に動的な環境を作成できます。&lt;/p&gt;
&lt;p&gt;Kubernetesのおかげで、仮想マシンは今やクラウドリソースを利用するための単なるユーティリティエンティティとしてのみ見られるようになりました。
もはや仮想マシンの中にデータを保存することはありません。
仮想マシンをすべて削除して、アプリケーションを壊すことなく再作成できます。
Kubernetesコントロールプレーンは、クラスター内で何が実行されるべきかについての情報を保持し続けます。
ロードバランサーは、新しいノードにトラフィックを送信するためにエンドポイントを変更するだけで、ワークロードにトラフィックを送信し続けます。
そして、データはクラウドが提供する外部の永続ボリュームに安全に保存されます。&lt;/p&gt;
&lt;p&gt;このアプローチは、クラウドでKubernetesを使用する際の基本です。
その理由はかなり明白です。
システムが単純であるほど安定性が高くなり、このシンプルさのためにクラウドでKubernetesを選択するのです。&lt;/p&gt;
&lt;h2 id=&#34;ベアメタル上のkubernetes&#34;&gt;ベアメタル上のKubernetes&lt;/h2&gt;
&lt;p&gt;クラウドでKubernetesを使用することは本当に簡単で便利ですが、ベアメタルへのインストールについては同じことが言えません。
ベアメタルの世界では、Kubernetesは逆に非常に複雑になります。
まず、ネットワーク全体、バックエンドストレージ、クラウドバランサーなどは、通常、クラスターの外部ではなく内部で実行されるためです。
その結果、このようなシステムは更新と保守がはるかに難しくなります。&lt;/p&gt;


&lt;figure&gt;
    &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/baremetal.svg&#34;
         alt=&#34;ベアメタル上のKubernetesを示す図。ロードバランシングとストレージはクラスターの内部で行われています&#34;/&gt; &lt;figcaption&gt;
            &lt;p&gt;ベアメタル上のKubernetesを示す図。ロードバランシングとストレージはクラスターの内部で行われています&lt;/p&gt;
        &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ご自身で判断してみてください。
クラウドでは、通常、ノードを更新するために仮想マシンを削除する(または&lt;code&gt;kubectl delete node&lt;/code&gt;を使用する)だけで、イミュータブルなイメージに基づいて新しいノードを作成することをノード管理ツールに任せることができます。
新しいノードはクラスターに参加し、Kubernetesの世界で非常にシンプルでよく使われるパターンに従って、ノードとして「そのまま動作」します。
多くのクラスターでは、安価なスポットインスタンスを利用できるため、数分ごとに新しい仮想マシンをオーダーしています。
しかし、物理サーバーを使用している場合は、簡単に削除して再作成することはできません。
まず、物理サーバーはクラスターサービスを実行していたり、データを保存していたりすることが多いため、その更新プロセスははるかに複雑になるからです。&lt;/p&gt;
&lt;p&gt;この問題を解決するアプローチはさまざまです。
kubeadm、kubespray、k3sが行うようなインプレースアップデートから、Cluster APIとMetal3を通じた物理ノードのプロビジョニングの完全な自動化まで幅広くあります。&lt;/p&gt;
&lt;p&gt;私は、Talos Linuxが提供するハイブリッドアプローチが気に入っています。
このアプローチでは、システム全体が単一の設定ファイルで記述されます。
このファイルのほとんどのパラメーターは、Kubernetesコントロールプレーンコンポーネントのバージョンを含め、ノードを再起動または再作成することなく適用できます。
それでも、Kubernetesの宣言的な性質を最大限に保持しています。
このアプローチは、ベアメタルノードを更新する際のクラスターサービスへの不要な影響を最小限に抑えます。
ほとんどの場合、マイナーアップデートの際に仮想マシンを移行したり、クラスターファイルシステムを再構築したりする必要はありません。&lt;/p&gt;
&lt;h2 id=&#34;将来のクラウドの基盤を準備する&#34;&gt;将来のクラウドの基盤を準備する&lt;/h2&gt;
&lt;p&gt;さて、自分だけのクラウドを構築することに決めたとしましょう。
まずは基盤となるレイヤーが必要です。
サーバーにKubernetesをインストールする方法だけでなく、それをどのように更新し、維持していくかについても考える必要があります。
カーネルの更新、必要なモジュールのインストール、パッケージやセキュリティパッチなどについても考えなければならないことを考慮してください。
クラウド上の既製のKubernetesを使用する際に気にする必要のないことをはるかに多く考えなければなりません。&lt;/p&gt;
&lt;p&gt;もちろん、UbuntuやDebianのような標準的なディストリビューションを使用できますし、Flatcar Container Linux、Fedora Core、Talos Linuxのような特殊なディストリビューションを検討することもできます。
それぞれに長所と短所があります。&lt;/p&gt;
&lt;p&gt;私たちのことですか？
Ænixでは、ZFS、DRBD、OpenvSwitchなどのかなり特殊なカーネルモジュールを使用しているので、必要なモジュールをすべて事前に含んだシステムイメージを形成する方法を選びました。
この場合、Talos Linuxが私たちにとって最も便利であることがわかりました。
たとえば、次のような設定で、必要なカーネルモジュールをすべて含むシステムイメージを構築するのに十分です:&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;arch&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;amd64&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;platform&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;metal&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;secureboot&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&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;version&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;v1.6.4&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;input&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;kernel&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;path&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;/usr/install/amd64/vmlinuz&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;initramfs&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;path&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;/usr/install/amd64/initramfs.xz&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;baseInstaller&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/installer:v1.6.4&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;systemExtensions&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/amd-ucode:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/amdgpu-firmware:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/bnx2-bnx2x:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/i915-ucode:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/intel-ice-firmware:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/intel-ucode:20231114&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/qlogic-firmware:20240115&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/drbd:9.2.6-v1.6.4&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;imageRef&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ghcr.io/siderolabs/zfs:2.1.14-v1.6.4&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;output&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;kind&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;installer&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;outFormat&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;raw&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;docker&lt;/code&gt;コマンドラインツールを使用して、OSイメージをビルドします:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat config.yaml | docker run --rm -i -v /dev:/dev --privileged &amp;#34;ghcr.io/siderolabs/imager:v1.6.4&amp;#34; -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;その結果、必要なものがすべて含まれたDockerコンテナイメージが得られます。
このイメージを使用して、サーバーにTalos Linuxをインストールできます。
同じことができます。このイメージには、必要なすべてのファームウェアとカーネルモジュールが含まれます。&lt;/p&gt;
&lt;p&gt;しかし、新しく形成されたイメージをノードにどのように配信するかという問題が発生します。&lt;/p&gt;
&lt;p&gt;しばらくの間、PXEブートのアイデアについて考えていました。
たとえば、2年前に&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2021/12/22/kubernetes-in-kubernetes-and-pxe-bootable-server-farm/&#34;&gt;記事&lt;/a&gt;を書いた&lt;strong&gt;Kubefarm&lt;/strong&gt;プロジェクトは、完全にこのアプローチを使用して構築されました。
しかし残念ながら、他のクラスターを保持する最初の親クラスターをデプロイするのに役立つわけではありません。
そこで今回、PXEアプローチを使用して同じことを行うのに役立つソリューションを用意しました。&lt;/p&gt;
&lt;p&gt;基本的に必要なのは、コンテナ内で一時的な&lt;strong&gt;DHCP&lt;/strong&gt;と&lt;strong&gt;PXE&lt;/strong&gt;サーバーを&lt;a href=&#34;https://cozystack.io/docs/get-started/&#34;&gt;実行する&lt;/a&gt;ことだけです。
そうすれば、ノードはあなたのイメージから起動し、Debianベースの簡単なスクリプトを使用して、ノードのブートストラップに役立てることができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://asciinema.org/a/627123&#34;&gt;&lt;img src=&#34;asciicast.svg&#34; alt=&#34;asciicast&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;talos-bootstrap&lt;/code&gt;スクリプトの&lt;a href=&#34;https://github.com/aenix-io/talos-bootstrap/&#34;&gt;ソースコード&lt;/a&gt;はGitHubで入手できます。&lt;/p&gt;
&lt;p&gt;このスクリプトを使用すると、ベアメタル上に5分でKubernetesをデプロイし、それにアクセスするためのkubeconfigを取得できます。
しかし、まだ多くの未解決の問題が残っています。&lt;/p&gt;
&lt;h2 id=&#34;システムコンポーネントの配信&#34;&gt;システムコンポーネントの配信&lt;/h2&gt;
&lt;p&gt;この段階では、さまざまなワークロードを実行できるKubernetesクラスターがすでに手に入っています。
しかし、まだ完全に機能しているわけではありません。
つまり、ネットワークとストレージを設定する必要があるだけでなく、仮想マシンを実行するためのKubeVirtや、監視スタックやその他のシステム全体のコンポーネントなど、必要なクラスター拡張機能をインストールする必要があります。&lt;/p&gt;
&lt;p&gt;従来、これは&lt;strong&gt;Helmチャート&lt;/strong&gt;をクラスターにインストールすることで解決されています。
ローカルで&lt;code&gt;helm install&lt;/code&gt;コマンドを実行することで実現できますが、アップデートを追跡したい場合や、複数のクラスターを持っていてそれらを均一に保ちたい場合、このアプローチは不便になります。
実際には、これを宣言的に行う方法はたくさんあります。
これを解決するには、最高のGitOpsプラクティスを使用することをお勧めします。
つまり、ArgoCDやFluxCDのようなツールを指します。&lt;/p&gt;
&lt;p&gt;ArgoCDはグラフィカルインターフェースと中央コントロールプレーンを備えているため開発目的には便利ですが、一方でFluxCDはKubernetesディストリビューションの作成により適しています。
FluxCDを使用すると、どのチャートをどのパラメーターで起動すべきかを指定し、依存関係を記述できます。
そうすれば、FluxCDがすべてを処理してくれます。&lt;/p&gt;
&lt;p&gt;新しく作成したクラスターにFluxCDを1回インストールし、適切に設定することをお勧めします。
これにより、FluxCDは必要不可欠なコンポーネントをすべて自動的にデプロイできるようになり、クラスターを目的の状態にアップグレードできます。
たとえば、私たちのプラットフォームをインストールすると、システムコンポーネントとともに次の事前設定されたHelmチャートが表示されます:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;NAMESPACE                        NAME                        AGE    READY   STATUS
cozy-cert-manager                cert-manager                4m1s   True    Release reconciliation succeeded
cozy-cert-manager                cert-manager-issuers        4m1s   True    Release reconciliation succeeded
cozy-cilium                      cilium                      4m1s   True    Release reconciliation succeeded
cozy-cluster-api                 capi-operator               4m1s   True    Release reconciliation succeeded
cozy-cluster-api                 capi-providers              4m1s   True    Release reconciliation succeeded
cozy-dashboard                   dashboard                   4m1s   True    Release reconciliation succeeded
cozy-fluxcd                      cozy-fluxcd                 4m1s   True    Release reconciliation succeeded
cozy-grafana-operator            grafana-operator            4m1s   True    Release reconciliation succeeded
cozy-kamaji                      kamaji                      4m1s   True    Release reconciliation succeeded
cozy-kubeovn                     kubeovn                     4m1s   True    Release reconciliation succeeded
cozy-kubevirt-cdi                kubevirt-cdi                4m1s   True    Release reconciliation succeeded
cozy-kubevirt-cdi                kubevirt-cdi-operator       4m1s   True    Release reconciliation succeeded
cozy-kubevirt                    kubevirt                    4m1s   True    Release reconciliation succeeded
cozy-kubevirt                    kubevirt-operator           4m1s   True    Release reconciliation succeeded
cozy-linstor                     linstor                     4m1s   True    Release reconciliation succeeded
cozy-linstor                     piraeus-operator            4m1s   True    Release reconciliation succeeded
cozy-mariadb-operator            mariadb-operator            4m1s   True    Release reconciliation succeeded
cozy-metallb                     metallb                     4m1s   True    Release reconciliation succeeded
cozy-monitoring                  monitoring                  4m1s   True    Release reconciliation succeeded
cozy-postgres-operator           postgres-operator           4m1s   True    Release reconciliation succeeded
cozy-rabbitmq-operator           rabbitmq-operator           4m1s   True    Release reconciliation succeeded
cozy-redis-operator              redis-operator              4m1s   True    Release reconciliation succeeded
cozy-telepresence                telepresence                4m1s   True    Release reconciliation succeeded
cozy-victoria-metrics-operator   victoria-metrics-operator   4m1s   True    Release reconciliation succeeded
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;結果として、誰にでも提供できる高い再現性を持つ環境を実現でき、意図したとおりに動作することがわかります。
これは、実際に&lt;a href=&#34;https://github.com/aenix-io/cozystack&#34;&gt;Cozystack&lt;/a&gt;プロジェクトが行っていることであり、あなた自身が無料で試すことができます。&lt;/p&gt;
&lt;p&gt;次の記事では、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/&#34;&gt;仮想マシンを実行するためのKubernetesの準備方法&lt;/a&gt;と&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/&#34;&gt;ボタンをクリックするだけでKubernetesクラスターを実行する方法&lt;/a&gt;について説明します。
ご期待ください。きっと面白いはずです！&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetes v1.30をそっと覗く</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/03/12/kubernetes-v1.30%E3%82%92%E3%81%9D%E3%81%A3%E3%81%A8%E8%A6%97%E3%81%8F/</link>
      <pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/03/12/kubernetes-v1.30%E3%82%92%E3%81%9D%E3%81%A3%E3%81%A8%E8%A6%97%E3%81%8F/</guid>
      <description>
        
        
        &lt;h2 id=&#34;kubernetes-v1-30のおもしろい変更点をざっと見る&#34;&gt;Kubernetes v1.30のおもしろい変更点をざっと見る&lt;/h2&gt;
&lt;p&gt;新しい年であり、新しいKubernetesのリリースです。
リリースサイクルの半分が終了し、v1.30ではかなりの数の興味深くおもしろい機能強化が行われます。
アルファ版の真新しい機能から、安定版へと進む既存の機能、そして待望の改良まで、このリリースには誰もが注目するものがあります！&lt;/p&gt;
&lt;p&gt;正式リリースまでのつなぎとして、このリリースで我々がもっとも期待している機能強化をそっと覗いてみましょう！&lt;/p&gt;
&lt;h2 id=&#34;kubernetes-v1-30の主な変更点&#34;&gt;Kubernetes v1.30の主な変更点&lt;/h2&gt;
&lt;h3 id=&#34;動的なリソース割り当てのための構造化パラメーター-kep-4381-https-kep-k8s-io-4381&#34;&gt;動的なリソース割り当てのための構造化パラメーター (&lt;a href=&#34;https://kep.k8s.io/4381&#34;&gt;KEP-4381&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/scheduling-eviction/dynamic-resource-allocation/&#34;&gt;動的なリソース割り当て(DRA)&lt;/a&gt;はv1.26でアルファ機能としてKubernetesに追加されました。
これは、サードパーティリソースへのアクセスを要求するための従来のデバイスプラグインAPIに代わるものを定義しています。
設計上、動的なリソース割り当て(DRA)では、Kubernetesの中心部に完全に不透明なリソースのパラメーターが使用されます。
このアプローチは、クラスターオートスケーラーや、Podのグループ(Jobスケジューラーなど)に対して決定を下す必要がある上位コントローラーにとって問題となります。
時間経過に伴う要求(claim)の割り当てや割り当て解除の効果をシミュレートできないのです。
これを行うための情報は、サードパーティのDRAドライバーのみが保有しています。&lt;/p&gt;
&lt;p&gt;動的なリソース割り当て(DRA)の構造化パラメーターは、これらの要求(claim)パラメーターの不透明さがより少ないフレームワークを構築することによって、この問題に対処するための従来の実装の拡張になります。
すべての要求(claim)パラメーターのセマンティクスを自分で処理する代わりに、ドライバーはKubernetesによって事前定義された特定の&amp;quot;構造化モデル&amp;quot;を使用してリソースを記述し、管理できます。
これにより、この&amp;quot;構造化モデル&amp;quot;を認識しているコンポーネントは、サードパーティのコントローラーに委託することなく、これらのリソースに関する意思決定を行えます。
たとえば、スケジューラーは動的なリソース割り当て(DRA)ドライバーとやり取りを行うことなく、要求(claim)を迅速に割り当てることができます。
今回のリリースでは、さまざまな&amp;quot;構造化モデル&amp;quot;を実現するために必要なフレームワークの定義と&amp;quot;名前付きリソース&amp;quot;モデルの実装を中心に作業が行われました。
このモデルでは、個々のリソース・インスタンスをリストアップすることができ、従来のデバイスプラグインAPIと比較して、属性によってそれらのインスタンスを個別に選択する機能が追加されています。&lt;/p&gt;
&lt;h3 id=&#34;nodeのメモリスワップのサポート-kep-2400-https-kep-k8s-io-2400&#34;&gt;Nodeのメモリスワップのサポート (&lt;a href=&#34;https://kep.k8s.io/2400&#34;&gt;KEP-2400&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;Kubernetes v1.30では、Linux Nodeにおけるメモリスワップのサポートが、システムの安定性を向上させることに重点を置いて、その動作方法に大きな変更が加えられました。
以前のKubernetesバージョンでは、&lt;code&gt;NodeSwap&lt;/code&gt;フィーチャーゲートはデフォルトで無効化されており、有効化された場合、デフォルトの動作として&lt;code&gt;UnlimitedSwap&lt;/code&gt;動作が使用されていました。
より良い安定性を達成するために、(Nodeの安定性を損なう可能性のある)&lt;code&gt;UnlimitedSwap&lt;/code&gt;動作はv1.30で削除されます。&lt;/p&gt;
&lt;p&gt;更新された、まだベータ版のLinux Nodeでのスワップのサポートは、デフォルトで利用できるようになります。
ただし、デフォルトの動作は、&lt;code&gt;NoSwap&lt;/code&gt;(&lt;code&gt;UnlimitedSwap&lt;/code&gt;ではない)モードに設定されたNodeを実行することになります。
&lt;code&gt;NoSwap&lt;/code&gt;モードでは、kubeletはスワップ領域が有効化されたNodeでの実行をサポートしますが、Podはページファイルを一切使用しません。
そのNodeでkubeletを実行するには、&lt;code&gt;--fail-swap-on=false&lt;/code&gt;を設定する必要があります。
ただ、大きな変更とはこのことではなく、もう1つのモードである&lt;code&gt;LimitedSwap&lt;/code&gt;です。
このモードでは、kubeletは実際にそのNodeのページファイルを使用し、Podが仮想メモリの一部をページアウトできるようにします。
コンテナ(およびその親Pod)はメモリ制限を超えてスワップにアクセスすることはできませんが、利用可能な場合はスワップ領域を使用できます。&lt;/p&gt;
&lt;p&gt;KubernetesのNode Special Interest Group (SIG Node)は、エンドユーザー、貢献者、およびより広いKubernetesコミュニティからのフィードバックに基づいて、改訂された実装の使用方法を理解できるようにドキュメントも更新します。&lt;/p&gt;
&lt;p&gt;KubernetesにおけるLinux Nodeのスワップ・サポートの詳細については、前回の&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/08/24/swap-linux-beta/&#34;&gt;ブログ記事&lt;/a&gt;または&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/architecture/nodes/#swap-memory&#34;&gt;Nodeのスワップ・ドキュメント&lt;/a&gt;を読んでください。&lt;/p&gt;
&lt;h3 id=&#34;podでユーザー名前空間のサポート-kep-127-https-kep-k8s-io-127&#34;&gt;Podでユーザー名前空間のサポート (&lt;a href=&#34;https://kep.k8s.io/127&#34;&gt;KEP-127&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/workloads/pods/user-namespaces&#34;&gt;ユーザー名前空間&lt;/a&gt;は、2024年1月に公開された&lt;a href=&#34;https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv&#34;&gt;CVE-2024-21626&lt;/a&gt;を含むHigh/Criticalと評価された複数のCVEを防止、または緩和するために、Podをより適切に分離するLinux専用の機能です。
Kubernetes 1.30では、ユーザー名前空間のサポートがベータ版に移行し、ボリュームのあるPodとないPod、カスタムUID/GID範囲などがサポートされるようになりました！&lt;/p&gt;
&lt;h3 id=&#34;構造化された認可設定-kep-3221-https-kep-k8s-io-3221&#34;&gt;構造化された認可設定 (&lt;a href=&#34;https://kep.k8s.io/3221&#34;&gt;KEP-3221&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file&#34;&gt;構造化された認可設定&lt;/a&gt;のサポートはベータ版に移行し、デフォルトで有効になります。
この機能は、失敗時に明示的に拒否するなどのきめ細かな制御を可能にしたり、特定の順序でリクエストを検証する明確に定義されたパラメーターを持つ複数のWebhookによる認可チェーンの作成を可能にします。
設定ファイルのアプローチでは、リクエストがWebhookへ渡される前に&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/using-api/cel/&#34;&gt;CEL&lt;/a&gt;ルールを指定して事前にフィルタリングすることも可能で、不要なリクエストを防ぐのに役立ちます。
また、設定ファイルが変更されると、APIサーバーは自動的に認可チェーンを再読み込みします。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--authorization-config&lt;/code&gt;コマンドライン引数を使用して、その認可設定へのパスを指定する必要があります。
設定ファイルの代わりにコマンドラインフラグを使い続けたい場合、そのまま機能し続けます。
複数のWebhook、失敗ポリシー、事前フィルタールールなどの新しい認可Webhook機能にアクセスするには、&lt;code&gt;--authorization-config&lt;/code&gt;ファイルにオプションを記述するように切り替えます。
Kubernetes 1.30からは、設定ファイルのフォーマットがベータ段階であり、フィーチャーゲートがデフォルトで有効になっているため、&lt;code&gt;--authorization-config&lt;/code&gt;を指定する必要があるだけです。
すべての可能な値を含む設定例は、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file&#34;&gt;認可ドキュメント&lt;/a&gt;で提供されています。
詳細については、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file&#34;&gt;認可ドキュメント&lt;/a&gt;を読んでください。&lt;/p&gt;
&lt;h3 id=&#34;コンテナリソースをもとにしたpodの自動スケーリング-kep-1610-https-kep-k8s-io-1610&#34;&gt;コンテナリソースをもとにしたPodの自動スケーリング (&lt;a href=&#34;https://kep.k8s.io/1610&#34;&gt;KEP-1610&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ContainerResource&lt;/code&gt;メトリクスに基づく水平Pod自動スケーリングは、v1.30で安定版に移行します。
HorizontalPodAutoscalerのこの新しい動作により、Pod全体のリソース使用量ではなく、個々のコンテナのリソース使用量に基づいて自動スケーリングを設定できるようになります。
詳細については&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/blog/2023/05/02/hpa-container-resource-metric/&#34;&gt;以前の記事&lt;/a&gt;を参照するか、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/tasks/run-application/horizontal-pod-autoscale/#container-resource-metrics&#34;&gt;コンテナリソースメトリクス&lt;/a&gt;を読んでください。&lt;/p&gt;
&lt;h3 id=&#34;アドミッション-コントロールに対するcel-kep-3488-https-kep-k8s-io-3488&#34;&gt;アドミッション・コントロールに対するCEL (&lt;a href=&#34;https://kep.k8s.io/3488&#34;&gt;KEP-3488&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;Kubernetesのアドミッション・コントロールにCommon Expression Language (CEL)を統合することで、アドミッション・リクエストを評価するよりダイナミックで表現力豊かな方法が導入されます。
この機能により、複雑できめ細かなポリシーがKubernetes APIを通じて直接定義・適用できるようになり、パフォーマンスや柔軟性を損なうことなく、セキュリティとガバナンスの機能が強化されます。&lt;/p&gt;
&lt;p&gt;CELがKubernetesのアドミッション・コントロールに追加されたことで、クラスター管理者はWebhookベースのアクセス・コントローラーに頼ることなく、クラスターの望ましい状態やポリシーに対してAPIリクエストの内容を評価できる複雑なルールを作成できます。
このレベルの制御は、クラスター運用の効率性、セキュリティ、整合性を維持するために極めて重要であり、Kubernetes環境をより堅牢にし、さまざまなユースケースや要件へ適応できるようにします。
アドミッション・コントロールにCELを使用する詳細については、ValidatingAdmissionPolicyの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/reference/access-authn-authz/validating-admission-policy/&#34;&gt;APIドキュメント&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;p&gt;私たちと同じようにこのリリースを楽しみにしていただければ幸いです。数週間後の公式のリリース記事で、さらなるハイライトをお見逃しなく！&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>CRI-O: OCIレジストリからのseccompプロファイルの適用</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/03/07/cri-o-seccomp-oci-artifacts/</link>
      <pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/03/07/cri-o-seccomp-oci-artifacts/</guid>
      <description>
        
        
        &lt;p&gt;seccompはセキュアなコンピューティングモードを意味し、Linuxカーネルのバージョン2.6.12以降の機能として提供されました。
これは、プロセスの特権をサンドボックス化し、ユーザースペースからカーネルへの呼び出しを制限するために使用できます。
Kubernetesでは、ノードに読み込まれたseccompプロファイルをPodやコンテナに自動的に適用することができます。&lt;/p&gt;
&lt;p&gt;しかし、Kubernetesでseccompプロファイルを配布することは大きな課題です。
なぜなら、JSONファイルがワークロードが実行可能なすべてのノードで利用可能でなければならないからです。
&lt;a href=&#34;https://sigs.k8s.io/security-profiles-operator&#34;&gt;Security Profiles Operator&lt;/a&gt;などのプロジェクトは、クラスター内でデーモンとして実行することでこの問題を解決しています。
この設定から、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/setup/production-environment/container-runtimes&#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-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;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;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;container&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;nginx:1.25.3&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;securityContext&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;seccompProfile&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;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Localhost&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;localhostProfile&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;nginx-1.25.3.json&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;nginx-1.25.3.json&lt;/code&gt;はkubeletのルートディレクトリ内に&lt;code&gt;seccomp&lt;/code&gt;ディレクトリを追加して利用可能でなければなりません。
これは、ディスク上のプロファイルのデフォルトの場所が&lt;code&gt;/var/lib/kubelet/seccomp/nginx-1.25.3.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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;NAME   READY   STATUS                 RESTARTS   AGE
&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;pod    0/1     CreateContainerError   0          38s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;kubectl describe pod/pod | tail
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
&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;                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
&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;Events:
&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;  Type     Reason     Age                 From               Message
&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;  Normal   Scheduled  117s                default-scheduler  Successfully assigned default/pod to 127.0.0.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;  Normal   Pulling    117s                kubelet            Pulling image &amp;#34;nginx:1.25.3&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;  Normal   Pulled     111s                kubelet            Successfully pulled image &amp;#34;nginx:1.25.3&amp;#34; in 5.948s (5.948s including waiting)
&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;  Warning  Failed     7s (x10 over 111s)  kubelet            Error: setup seccomp: unable to load local profile &amp;#34;/var/lib/kubelet/seccomp/nginx-1.25.3.json&amp;#34;: open /var/lib/kubelet/seccomp/nginx-1.25.3.json: no such file or directory
&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;  Normal   Pulled     7s (x9 over 111s)   kubelet            Container image &amp;#34;nginx:1.25.3&amp;#34; already present on machine
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Localhost&lt;/code&gt;プロファイルを手動で配布する必要があるという大きな障害は、多くのエンドユーザーが&lt;code&gt;RuntimeDefault&lt;/code&gt;に戻るか、さらには&lt;code&gt;Unconfined&lt;/code&gt;(seccompが無効になっている)でワークロードを実行することになる可能性が高いということです。&lt;/p&gt;
&lt;h2 id=&#34;cri-oが救世主&#34;&gt;CRI-Oが救世主&lt;/h2&gt;
&lt;p&gt;Kubernetesのコンテナランタイム&lt;a href=&#34;https://github.com/cri-o/cri-o&#34;&gt;CRI-O&lt;/a&gt;は、カスタムアノテーションを使用してさまざまな機能を提供しています。
v1.30のリリースでは、アノテーションの新しい集合である&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/POD&lt;/code&gt;と&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/&amp;lt;CONTAINER&amp;gt;&lt;/code&gt;のサポートが&lt;a href=&#34;https://github.com/cri-o/cri-o/pull/7719&#34;&gt;追加&lt;/a&gt;されました。
これらのアノテーションを使用すると、以下を指定することができます：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;特定のコンテナ用のseccompプロファイルは、次のように使用されます:&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/&amp;lt;CONTAINER&amp;gt;&lt;/code&gt; (例:&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/webserver: &#39;registry.example/example/webserver:v1&#39;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Pod内のすべてのコンテナに対するseccompプロファイルは、コンテナ名の接尾辞を使用せず、予約された名前&lt;code&gt;POD&lt;/code&gt;を使用して次のように使用されます:&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/POD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;イメージ全体のseccompプロファイルは、イメージ自体がアノテーション&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/POD&lt;/code&gt;または&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/&amp;lt;CONTAINER&amp;gt;&lt;/code&gt;を含んでいる場合に使用されます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CRI-Oは、ランタイムがそれを許可するように構成されている場合、および&lt;code&gt;Unconfined&lt;/code&gt;として実行されるワークロードに対してのみ、そのアノテーションを尊重します。
それ以外のすべてのワークロードは、引き続き&lt;code&gt;securityContext&lt;/code&gt;からの値を優先して使用します。&lt;/p&gt;
&lt;p&gt;アノテーション単体では、プロファイルの配布にはあまり役立ちませんが、それらの参照方法が役立ちます！
たとえば、OCIアーティファクトを使用して、通常のコンテナイメージのようにseccompプロファイルを指定できるようになりました。&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;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;annotations&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;seccomp-profile.kubernetes.cri-o.io/POD&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;quay.io/crio/seccomp:v2&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 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;quay.io/crio/seccomp:v2&lt;/code&gt;には、実際のプロファイル内容を含む&lt;code&gt;seccomp.json&lt;/code&gt;ファイルが含まれています。
&lt;a href=&#34;https://oras.land&#34;&gt;ORAS&lt;/a&gt;や&lt;a href=&#34;https://github.com/containers/skopeo&#34;&gt;Skopeo&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;oras pull quay.io/crio/seccomp:v2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;Downloading 92d8ebfa89aa seccomp.json
&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;Downloaded  92d8ebfa89aa seccomp.json
&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;Pulled [registry] quay.io/crio/seccomp:v2
&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;Digest: sha256:f0205dac8a24394d9ddf4e48c7ac201ca7dcfea4c554f7ca27777a7f8c43ec1b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;jq . seccomp.json | head
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#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;&amp;#34;defaultAction&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SCMP_ACT_ERRNO&amp;#34;&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;&amp;#34;defaultErrnoRet&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;38&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;&amp;#34;defaultErrno&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;ENOSYS&amp;#34;&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;&amp;#34;archMap&amp;#34;: &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:#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;&amp;#34;architecture&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86_64&amp;#34;&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;&amp;#34;subArchitectures&amp;#34;: &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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86&amp;#34;&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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X32&amp;#34;&lt;/span&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;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;# イメージのプレーンマニフェストを調べる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;skopeo inspect --raw docker://quay.io/crio/seccomp:v2 | jq .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#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;&amp;#34;schemaVersion&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&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;&amp;#34;mediaType&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;application/vnd.oci.image.manifest.v1+json&amp;#34;&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:#b44&#34;&gt;&amp;#34;config&amp;#34;&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:#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;&amp;#34;mediaType&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;application/vnd.cncf.seccomp-profile.config.v1+json&amp;#34;&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;&amp;#34;digest&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sha256:ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356&amp;#34;&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;&amp;#34;size&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&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:#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:#b44&#34;&gt;&amp;#34;layers&amp;#34;&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:#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:#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;&amp;#34;mediaType&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;application/vnd.oci.image.layer.v1.tar&amp;#34;&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;&amp;#34;digest&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;sha256:92d8ebfa89aa6dd752c6443c27e412df1b568d62b4af129494d7364802b2d476&amp;#34;&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;&amp;#34;size&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;18853&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;&amp;#34;annotations&amp;#34;: { &amp;#34;org.opencontainers.image.title&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;seccomp.json&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &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:#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:#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;&amp;#34;annotations&amp;#34;: { &amp;#34;org.opencontainers.image.created&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2024-02-26T09:03:30Z&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &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:#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;application/vnd.cncf.seccomp-profile.config.v1+json&lt;/code&gt;)への参照と、&lt;code&gt;seccomp.json&lt;/code&gt;ファイルを指す単一のレイヤー(&lt;code&gt;application/vnd.oci.image.layer.v1.tar&lt;/code&gt;)が含まれています。
それでは、この新機能を試してみましょう！&lt;/p&gt;
&lt;h3 id=&#34;特定のコンテナやpod全体に対してアノテーションを使用する&#34;&gt;特定のコンテナやPod全体に対してアノテーションを使用する&lt;/h3&gt;
&lt;p&gt;CRI-Oは、アノテーションを利用する前に適切に構成する必要があります。
これを行うには、ランタイムの &lt;code&gt;allowed_annotations&lt;/code&gt;配列にアノテーションを追加します。
これは、次のようなドロップイン構成&lt;code&gt;/etc/crio/crio.conf.d/10-crun.conf&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-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[crio.runtime]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;default_runtime = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;crun&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;[crio.runtime.runtimes.crun]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;allowed_annotations = [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;seccomp-profile.kubernetes.cri-o.io&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;それでは、CRI-Oを最新の&lt;code&gt;main&lt;/code&gt;コミットから実行します。
これは、ソースからビルドするか、&lt;a href=&#34;https://github.com/cri-o/packaging?tab=readme-ov-file#using-the-static-binary-bundles-directly&#34;&gt;静的バイナリバンドル&lt;/a&gt;を使用するか、&lt;a href=&#34;https://github.com/cri-o/packaging?tab=readme-ov-file#usage&#34;&gt;プレリリースパッケージ&lt;/a&gt;を使用することで行うことができます。&lt;/p&gt;
&lt;p&gt;これを実証するために、&lt;a href=&#34;https://github.com/cri-o/cri-o?tab=readme-ov-file#running-kubernetes-with-cri-o&#34;&gt;&lt;code&gt;local-up-cluster.sh&lt;/code&gt;&lt;/a&gt;を使って単一ノードのKubernetesクラスターをセットアップし、コマンドラインから&lt;code&gt;crio&lt;/code&gt;バイナリを実行しました。
クラスターが起動して実行されているので、seccomp &lt;code&gt;Unconfined&lt;/code&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;cat pod.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;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;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;container&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;nginx:1.25.3&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;securityContext&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;seccompProfile&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;type&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Unconfined&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;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;kubectl apply -f pod.yaml
&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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;NAME   READY   STATUS    RESTARTS   AGE
&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;pod    1/1     Running   0          15s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://sigs.k8s.io/cri-tools&#34;&gt;&lt;code&gt;crictl&lt;/code&gt;&lt;/a&gt;を使用してコンテナを検査しても、seccompプロファイルが適用されていないことがわかります:&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:#a2f&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;CONTAINER_ID&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;sudo crictl ps --name container -q&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;sudo crictl inspect &lt;span style=&#34;color:#b8860b&#34;&gt;$CONTAINER_ID&lt;/span&gt; | jq .info.runtimeSpec.linux.seccomp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;では、Podを変更して、コンテナにプロファイル&lt;code&gt;quay.io/crio/seccomp:v2&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-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;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;annotations&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;seccomp-profile.kubernetes.cri-o.io/container&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;quay.io/crio/seccomp:v2&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;container&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;nginx:1.25.3&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;新しいseccompプロファイルを適用するには、Podを削除して再作成する必要があります。
再作成のみが新しいseccompプロファイルを適用するためです:&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;kubectl delete pod/pod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;pod &amp;#34;pod&amp;#34; deleted
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;kubectl apply -f pod.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;pod/pod created
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CRI-Oのログには、ランタイムがアーティファクトを取得したことが示されます:&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:#888&#34;&gt;WARN[…] Allowed annotations are specified for workload [seccomp-profile.kubernetes.cri-o.io]
&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;INFO[…] Found container specific seccomp profile annotation: seccomp-profile.kubernetes.cri-o.io/container=quay.io/crio/seccomp:v2  id=26ddcbe6-6efe-414a-88fd-b1ca91979e93 name=/runtime.v1.RuntimeService/CreateContainer
&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;INFO[…] Pulling OCI artifact from ref: quay.io/crio/seccomp:v2  id=26ddcbe6-6efe-414a-88fd-b1ca91979e93 name=/runtime.v1.RuntimeService/CreateContainer
&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;INFO[…] Retrieved OCI artifact seccomp profile of len: 18853  id=26ddcbe6-6efe-414a-88fd-b1ca91979e93 name=/runtime.v1.RuntimeService/CreateContainer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;And the container is finally using the profile:&lt;/p&gt;
&lt;/blockquote&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;&lt;span style=&#34;color:#a2f&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;CONTAINER_ID&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;sudo crictl ps --name container -q&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;sudo crictl inspect &lt;span style=&#34;color:#b8860b&#34;&gt;$CONTAINER_ID&lt;/span&gt; | jq .info.runtimeSpec.linux.seccomp | head
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#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;&amp;#34;defaultAction&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SCMP_ACT_ERRNO&amp;#34;&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;&amp;#34;defaultErrnoRet&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;38&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;&amp;#34;architectures&amp;#34;: &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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86_64&amp;#34;&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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86&amp;#34;&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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X32&amp;#34;&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:#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;&amp;#34;syscalls&amp;#34;: &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:#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;/container&lt;/code&gt;を予約名&lt;code&gt;/POD&lt;/code&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-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;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;annotations&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;seccomp-profile.kubernetes.cri-o.io/POD&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;quay.io/crio/seccomp:v2&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;container&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;nginx:1.25.3&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;h3 id=&#34;コンテナイメージにアノテーションを使用する&#34;&gt;コンテナイメージにアノテーションを使用する&lt;/h3&gt;
&lt;p&gt;特定のワークロードにOCIアーティファクトとしてseccompプロファイルを指定する機能は素晴らしいですが、ほとんどのユーザーはseccompプロファイルを公開されたコンテナイメージに関連付けたいと考えています。
これは、コンテナイメージ自体に適用されるメタデータであるコンテナイメージアノテーションを使用して行うことができます。
たとえば、&lt;a href=&#34;https://podman.io&#34;&gt;Podman&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;podman build &lt;span style=&#34;color:#b62;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;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;    --annotation seccomp-profile.kubernetes.cri-o.io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;quay.io/crio/seccomp:v2 &lt;span style=&#34;color:#b62;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;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;    -t quay.io/crio/nginx-seccomp:v2 .
&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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;skopeo inspect --raw docker://quay.io/crio/nginx-seccomp:v2 |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    jq &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;.annotations.&amp;#34;seccomp-profile.kubernetes.cri-o.io&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;&amp;#34;quay.io/crio/seccomp:v2&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そのイメージを使用して、CRI-Oのテスト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;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:#080;font-style:italic&#34;&gt;# Podのアノテーションが設定されていません&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;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;container&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/crio/nginx-seccomp:v2&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;その後、CRI-Oのログには、イメージのアノテーションが評価され、プロファイルが適用されたことが示されます:&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;kubectl delete pod/pod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;pod &amp;#34;pod&amp;#34; deleted
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;kubectl apply -f pod.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;pod/pod created
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;INFO[…] Found image specific seccomp profile annotation: seccomp-profile.kubernetes.cri-o.io=quay.io/crio/seccomp:v2  id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
&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;INFO[…] Pulling OCI artifact from ref: quay.io/crio/seccomp:v2  id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
&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;INFO[…] Retrieved OCI artifact seccomp profile of len: 18853  id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
&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;INFO[…] Created container 116a316cd9a11fe861dd04c43b94f45046d1ff37e2ed05a4e4194fcaab29ee63: default/pod/container  id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#a2f&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#b8860b&#34;&gt;CONTAINER_ID&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;sudo crictl ps --name container -q&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;sudo crictl inspect &lt;span style=&#34;color:#b8860b&#34;&gt;$CONTAINER_ID&lt;/span&gt; | jq .info.runtimeSpec.linux.seccomp | head
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#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;&amp;#34;defaultAction&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;SCMP_ACT_ERRNO&amp;#34;&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;&amp;#34;defaultErrnoRet&amp;#34;: &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;38&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;&amp;#34;architectures&amp;#34;: &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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86_64&amp;#34;&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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X86&amp;#34;&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:#b44&#34;&gt;&amp;#34;SCMP_ARCH_X32&amp;#34;&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:#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;&amp;#34;syscalls&amp;#34;: &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:#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;seccomp-profile.kubernetes.cri-o.io&lt;/code&gt;は&lt;code&gt;seccomp-profile.kubernetes.cri-o.io/POD&lt;/code&gt;と同様に扱われ、Pod全体に適用されます。
さらに、この機能は、イメージにコンテナ固有のアノテーションを使用する場合にも機能します。
たとえば、コンテナの名前が&lt;code&gt;container1&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;skopeo inspect --raw docker://quay.io/crio/nginx-seccomp:v2-container |
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    jq &lt;span style=&#34;color:#b44&#34;&gt;&amp;#39;.annotations.&amp;#34;seccomp-profile.kubernetes.cri-o.io/container1&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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:#888&#34;&gt;&amp;#34;quay.io/crio/seccomp:v2&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この機能の素晴らしい点は、ユーザーが特定のコンテナイメージ用のseccompプロファイルを作成し、同じレジストリ内に並べて保存できることです。
イメージをプロファイルにリンクすることで、アプリケーション全体のライフサイクルを通じてそれらを維持する柔軟性が提供されます。&lt;/p&gt;
&lt;h3 id=&#34;orasを使用してプロファイルをプッシュする&#34;&gt;ORASを使用してプロファイルをプッシュする&lt;/h3&gt;
&lt;p&gt;OCIオブジェクトを作成してseccompプロファイルを含めるには、ORASを使用する場合、もう少し作業が必要です。
将来的には、Podmanなどのツールが全体のプロセスをより簡略化することを期待しています。
現時点では、コンテナレジストリが&lt;a href=&#34;https://oras.land/docs/compatible_oci_registries/#registries-supporting-oci-artifacts&#34;&gt;OCI互換&lt;/a&gt;である必要があります。
これは&lt;a href=&#34;https://quay.io&#34;&gt;Quay.io&lt;/a&gt;の場合も同様です。
CRI-Oは、seccompプロファイルオブジェクトがコンテナイメージメディアタイプ(&lt;code&gt;application/vnd.cncf.seccomp-profile.config.v1+json&lt;/code&gt;)を持っていることを期待していますが、ORASはデフォルトで&lt;code&gt;application/vnd.oci.empty.v1+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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a2f&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;{}&amp;#34;&lt;/span&gt; &amp;gt; config.json
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oras push &lt;span style=&#34;color:#b62;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;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;    --config config.json:application/vnd.cncf.seccomp-profile.config.v1+json &lt;span style=&#34;color:#b62;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;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;&lt;/span&gt;     quay.io/crio/seccomp:v2 seccomp.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結果として得られるイメージには、CRI-Oが期待する&lt;code&gt;mediaType&lt;/code&gt;が含まれています。
ORASは単一のレイヤー&lt;code&gt;seccomp.json&lt;/code&gt; をレジストリにプッシュします。
プロファイルの名前はあまり重要ではありません。
CRI-Oは最初のレイヤーを選択し、それがseccompプロファイルとして機能するかどうかを確認します。&lt;/p&gt;
&lt;h2 id=&#34;将来の作業&#34;&gt;将来の作業&lt;/h2&gt;
&lt;p&gt;CRI-OはOCIアーティファクトを通常のファイルと同様に内部で管理しています。
これにより、それらを移動したり、使用されなくなった場合に削除したり、seccompプロファイル以外のデータを利用したりする利点が得られます。
これにより、OCIアーティファクトをベースにしたCRI-Oの将来の拡張が可能になります。
また、OCIアーティファクトの中に複数のレイヤーを持つことを考える上で、seccompプロファイルの積層も可能になります。
v1.30.xリリースでは&lt;code&gt;Unconfined&lt;/code&gt;ワークロードのみがサポートされているという制限は、将来CRI-Oが解決したい課題です。
セキュリティを損なうことなく、全体的なユーザーエクスペリエンスを簡素化することが、コンテナワークロードにおけるseccompの成功の鍵となるようです。&lt;/p&gt;
&lt;p&gt;CRI-Oのメンテナーは、新機能に関するフィードバックや提案を歓迎します！
このブログ投稿を読んでいただき、ぜひKubernetesの&lt;a href=&#34;https://kubernetes.slack.com/messages/CAZH62UR1&#34;&gt;Slackチャンネル#crio&lt;/a&gt;を通じてメンテナーに連絡したり、&lt;a href=&#34;https://github.com/cri-o/cri-o&#34;&gt;GitHubリポジトリ&lt;/a&gt;でIssueを作成したりしてください。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetesブッククラブを覗く</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/02/22/k8s-book-club/</link>
      <pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/02/22/k8s-book-club/</guid>
      <description>
        
        
        &lt;p&gt;Kubernetesとそれを取り巻く技術のエコシステム全体を学ぶことは、課題がないわけではありません。
このインタビューでは、&lt;a href=&#34;https://www.linkedin.com/in/csantanapr/&#34;&gt;AWSのCarlos Santana&lt;/a&gt;さんに、コミュニティベースの学習体験を利用するために、彼がどのようにして&lt;a href=&#34;https://community.cncf.io/kubernetes-virtual-book-club/&#34;&gt;Kubernetesブッククラブ&lt;/a&gt;を作ったのか、その会がどのような活動をするのか、そしてどのようにして参加するのかについて伺います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;csantana_k8s_book_club.jpg&#34; alt=&#34;KubeCon NA 2023で話すCarlos Santanaさん&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Frederico Muñoz (FSM)&lt;/strong&gt;: こんにちはCarlosさん、時間をとってくれてありがとう。
まずはじめに、ご自身のことを少し教えていただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Carlos Santana (CS)&lt;/strong&gt;: もちろんです。
6年前に本番環境でKubernetesをデプロイした経験が、&lt;a href=&#34;https://knative.dev/&#34;&gt;Knative&lt;/a&gt;に参加するきっかけとなり、その後リリースチームを通じてKubernetesに貢献しました。
アップストリームのKubernetesでの作業は、私がオープンソースで得た最高の経験のひとつです。
過去2年間、AWSのシニア・スペシャリスト・ソリューション・アーキテクトとしての役割で、私は大企業がKubernetes上に内部開発者プラットフォーム(IDP)を構築することを支援してきました。
今後、私のオープンソースへの貢献は、&lt;a href=&#34;https://github.com/argoproj&#34;&gt;Argo&lt;/a&gt;や&lt;a href=&#34;https://www.crossplane.io/&#34;&gt;Crossplane&lt;/a&gt;、&lt;a href=&#34;https://www.cncf.io/projects/backstage/&#34;&gt;Backstage&lt;/a&gt;のようなCNCFのプロジェクトや&lt;a href=&#34;https://cnoe.io/&#34;&gt;CNOE&lt;/a&gt;を対象にしています。&lt;/p&gt;
&lt;h2 id=&#34;ブッククラブの創設&#34;&gt;ブッククラブの創設&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: それであなたがKubernetesに辿り着いたわけですが、その時点でブッククラブを始めた動機は何だったのでしょうか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: Kubernetesブッククラブのアイデアは、&lt;a href=&#34;https://github.com/vmware-archive/tgik&#34;&gt;TGIK&lt;/a&gt;のライブ配信での何気ない提案から生まれました。
私にとって、それは単に本を読むということ以上に、学習コミュニティを作るということでした。
このプラットフォームは知識の源であるだけでなく、特にパンデミックの困難な時期にはサポートシステムでもありました。
この取り組みが、メンバーたちの対処と成長に役立っていることを目の当たりにして、喜ばしいと思っています。
最初の本&lt;a href=&#34;https://www.oreilly.com/library/view/production-kubernetes/9781492092292/&#34;&gt;Production Kubernetes&lt;/a&gt;は、2021年3月5日に始めて36週間かかりました。
現在は、1冊の本をカバーするのにそれほど時間はかからず、1週間に1章か2章です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: Kubernetesブッククラブの仕組みについて教えてください。どのように本を選び、どのように読み進めるのですか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: 私たちは、グループの関心とニーズに基づいて本を共同で選んでいます。
この実践的なアプローチは、メンバー、とくに初心者が複雑な概念をより簡単に理解するのに役立ちます。
毎週2つのシリーズがあり、EMEAのタイムゾーンのものと、私がUSで組織しているものです。
各オーガナイザーは共同ホストと協力してSlack上で本を選び、各章の議論するために、数週間に渡りホストのラインナップを整えます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: 私の記憶が間違っていなければ、Kubernetesブッククラブは17冊目に突入しています。
物事を活発に保つための秘密のレシピがあるのですか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: ブッククラブを活発で魅力的なものに保つ秘訣は、いくつかの重要な要素にあります。&lt;/p&gt;
&lt;p&gt;まず、一貫性が重要です。
休みの日やKubeConのような大きなイベントの時だけミーティングをキャンセルして、定期的なスケジュールを維持するよう努力しています。
この規則性は、メンバーの参加を維持し、信頼できるコミュニティを築くのに役立っています。&lt;/p&gt;
&lt;p&gt;次に、セッションを面白く、対話式のものにすることが重要です。
たとえば、ミートアップ中にポップアップ・クイズを頻繁に導入します。これはメンバーの理解度をテストするだけでなく、楽しみの要素も加えています。
このアプローチによって内容の関連性が維持され、理論的な概念が実社会のシナリオでどのように適用されるかをメンバーが理解するのに役立ちます。&lt;/p&gt;
&lt;h2 id=&#34;ブッククラブで扱うトピック&#34;&gt;ブッククラブで扱うトピック&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: 書籍の主なトピックは、Kubernetes、GitOps、セキュリティ、SRE、オブザーバビリティになっています。
これはとくに人気という観点で、Cloud Native Landscapeの反映でしょうか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: 私たちの旅は『Production Kubernetes』から始まり、実用的な本番環境向けのソリューションに焦点を当てる方向性を設定しました。
それ以来、私たちはCNCF Landscapeのさまざまな側面を掘り下げ、異なるテーマに沿って本を揃えています。
各テーマは、それがセキュリティであれ、オブザーバビリティであれ、サービスメッシュであれ、コミュニティ内の関連性と需要にもとづいて選択されています。
たとえば、Kubernetes認定に関する最近のテーマでは、書籍の著者を積極的なホストとして参加させ、彼らの専門知識で議論を充実させました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: プロジェクトに最近変化があったことは知っています。&lt;a href=&#34;https://community.cncf.io/&#34;&gt;Cloud Native Community Group&lt;/a&gt;としてCNCFに統合されたことです。
この変更について少しお話いただけますか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: CNCFはブッククラブをCloud Native Community Groupとして快く受け入れてくれました。
これは私たちの運営を合理化し、影響範囲を拡大する重要な進展です。
この連携はKubernetes Community Days (KCD)のミートアップで使用されているものと同様に、管理機能の強化に役立っています。
現在では、メンバーシップ、イベントのスケジューリング、メーリングリスト、Webカンファレンスの開催、セッションの記録など、より強固な体制が整っています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: CNCFとの関わりは、この半年間のKubernetesブッククラブの成長やエンゲージメントにどのような影響を与えましたか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: 半年前にCNCFコミュニティの一員になって以来、Kubernetesブッククラブでは大きな定量的な変化を目の当たりにしてきました。
会員数は600人以上に急増し、この間に40以上のイベントを企画・実施することに成功しました。
さらに期待されるのは、1回のイベントに平均30人が参加するという安定した動員数です。
この成長とエンゲージメントは、コミュニティにおける影響やKubernetesブッククラブの影響範囲に関して、私たちのCNCF加盟が肯定的な影響である明確な指標です。&lt;/p&gt;
&lt;h2 id=&#34;ブッククラブに参加する&#34;&gt;ブッククラブに参加する&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: 参加を希望する人は、どうすればいいのでしょうか？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: 参加するためには3つの段階があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;まず、&lt;a href=&#34;https://community.cncf.io/kubernetes-virtual-book-club/&#34;&gt;Kubernetesブッククラブコミュニティ&lt;/a&gt;に参加します&lt;/li&gt;
&lt;li&gt;次に、コミュニティページ上の&lt;a href=&#34;https://community.cncf.io/kubernetes-virtual-book-club/&#34;&gt;イベント&lt;/a&gt;に出欠連絡をします&lt;/li&gt;
&lt;li&gt;最後に、CNCFのSlackチャンネル&lt;a href=&#34;https://cloud-native.slack.com/archives/C05EYA14P37&#34;&gt;#kubernetes-book-club&lt;/a&gt;に参加します&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;FSM&lt;/strong&gt;: 素晴らしい、ありがとうございます！最後に何かコメントをお願いします。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CS&lt;/strong&gt;: Kubernetesブッククラブは、単に本について議論する専門家のグループというだけではなく、それ以上です。
それは、&lt;a href=&#34;https://www.linkedin.com/in/neependra/&#34;&gt;Neependra Khare&lt;/a&gt;さん、&lt;a href=&#34;https://www.linkedin.com/in/ericsmalling/&#34;&gt;Eric Smalling&lt;/a&gt;さん、&lt;a href=&#34;https://www.linkedin.com/in/sevikarakulak/&#34;&gt;Sevi Karakulak&lt;/a&gt;さん、&lt;a href=&#34;https://www.linkedin.com/in/chadmcrowell/&#34;&gt;Chad M. Crowell&lt;/a&gt;さん、そして&lt;a href=&#34;https://www.linkedin.com/in/walidshaari/&#34;&gt;Walid (CNJ) Shaari&lt;/a&gt;さんの主催と企画を手伝ってくれる素晴らしいボランティアであり、活気のあるコミュニティです。
KubeConで私たちを見て、Kubernetesブッククラブのステッカーをゲットしてください！&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetesでコンテナを別ファイルシステムに格納する設定方法</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/23/kubernetes-separate-image-filesystem/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/23/kubernetes-separate-image-filesystem/</guid>
      <description>
        
        
        &lt;p&gt;Kubernetesクラスターの稼働、運用する上でよくある問題は、ディスク容量が不足することです。
ノードがプロビジョニングされる際には、コンテナイメージと実行中のコンテナのために十分なストレージスペースを確保することが重要です。
通常、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/setup/production-environment/container-runtimes/&#34;&gt;コンテナランタイム&lt;/a&gt;は&lt;code&gt;/var&lt;/code&gt;に書き込みます。
これは別のパーティションとして、ルートファイルシステム上に配置できます。
CRI-Oはデフォルトで、コンテナとイメージを&lt;code&gt;/var/lib/containers&lt;/code&gt;に書き込みますが、containerdはコンテナとイメージを&lt;code&gt;/var/lib/containerd&lt;/code&gt;に書き込みます。&lt;/p&gt;
&lt;p&gt;このブログ記事では、コンテナランタイムがデフォルトのパーティションとは別にコンテンツを保存する方法に注目したいと思います。
これにより、Kubernetesの設定をより柔軟に行うことができ、デフォルトのファイルシステムはそのままに、コンテナストレージ用に大きなディスクを追加する方法が提供されます。&lt;/p&gt;
&lt;p&gt;もう少し説明が必要な領域は、Kubernetesがディスクに書き込む場所/内容です。&lt;/p&gt;
&lt;h2 id=&#34;kubernetesディスク使用状況を理解する&#34;&gt;Kubernetesディスク使用状況を理解する&lt;/h2&gt;
&lt;p&gt;Kubernetesには永続(persistent)データと一時(ephemeral)データがあります。
kubeletとローカルのKubernetes固有ストレージのベースパスは設定可能ですが、通常は&lt;code&gt;/var/lib/kubelet&lt;/code&gt;と想定されています。
Kubernetesのドキュメントでは、これは時々ルートファイルシステムまたはノードファイルシステムと呼ばれます。
このデータの大部分は、次のようにカテゴリー分けされます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;エフェメラルストレージ&lt;/li&gt;
&lt;li&gt;ログ&lt;/li&gt;
&lt;li&gt;コンテナランタイム&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ルート/ノード・ファイルシステムは&lt;code&gt;/&lt;/code&gt;ではなく、&lt;code&gt;/var/lib/kubelet&lt;/code&gt;があるディスクのため、ほとんどのPOSIXシステムとは異なります。&lt;/p&gt;
&lt;h3 id=&#34;エフェメラルストレージ&#34;&gt;エフェメラルストレージ&lt;/h3&gt;
&lt;p&gt;Podやコンテナは、動作に一時的または短期的なローカルストレージを必要とする場合があります。
エフェメラルストレージの寿命は個々のPodの寿命を超えず、エフェメラルストレージはPod間で共有することはできません。&lt;/p&gt;
&lt;h3 id=&#34;ログ&#34;&gt;ログ&lt;/h3&gt;
&lt;p&gt;デフォルトでは、Kubernetesは各実行中のコンテナのログを&lt;code&gt;/var/log&lt;/code&gt;内のファイルとして保存します。
これらのログは一時的であり、ポッドが実行されている間に大きくなりすぎないようにkubeletによって監視されます。&lt;/p&gt;
&lt;p&gt;各ノードの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/cluster-administration/logging/#log-rotation&#34;&gt;ログローテーション&lt;/a&gt;設定をカスタマイズしてこれらのログのサイズを管理し、ノードローカルストレージに依存しないためにログの配信を設定することができます(サードパーティーのソリューションを使用)。&lt;/p&gt;
&lt;h3 id=&#34;コンテナランタイム&#34;&gt;コンテナランタイム&lt;/h3&gt;
&lt;p&gt;コンテナランタイムには、コンテナとイメージのための2つの異なるストレージ領域があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;読み取り専用レイヤー:イメージは通常、コンテナが実行されている間に変更されないため、読み取り専用レイヤーとして表されます。読み取り専用レイヤーには、複数のレイヤーが組み合わされて単一の読み取り専用レイヤーになることがあります。コンテナがファイルシステムに書き込んでいる場合、コンテナの上にはエフェメラルストレージを提供する薄いレイヤーがあります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;書き込み可能レイヤー:コンテナランタイムによっては、ローカルの書き込みがレイヤー化された書き込みメカニズム(たとえば、Linux上の&lt;code&gt;overlayfs&lt;/code&gt;やWindows上のCimFS)として実装されることがあります。これは書き込み可能レイヤーと呼ばれます。ローカルの書き込みは、コンテナイメージの完全なクローンで初期化された書き込み可能なファイルシステムを使用する場合もあります。これは、ハイパーバイザ仮想化に基づく一部のランタイムで使用されます。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コンテナランタイムのファイルシステムには、読み取り専用レイヤーと書き込み可能レイヤーの両方が含まれます。これはKubernetesドキュメントでは&lt;code&gt;imagefs&lt;/code&gt;と見なされています。&lt;/p&gt;
&lt;h2 id=&#34;コンテナランタイムの構成&#34;&gt;コンテナランタイムの構成&lt;/h2&gt;
&lt;h3 id=&#34;cri-o&#34;&gt;CRI-O&lt;/h3&gt;
&lt;p&gt;CRI-Oは、コンテナランタイムが永続データと一時データをどのように保存するかを制御するためのTOML形式のストレージ構成ファイルを使用します。
CRI-Oは&lt;a href=&#34;https://github.com/containers/storage&#34;&gt;ストレージライブラリ&lt;/a&gt;を利用します。
一部のLinuxディストリビューションには、ストレージに関するマニュアルエントリ(&lt;code&gt;man 5 containers-storage.conf&lt;/code&gt;)があります。
ストレージの主な設定は、&lt;code&gt;/etc/containers/storage.conf&lt;/code&gt;にあり、一時データの場所やルートディレクトリを制御することができます。
ルートディレクトリは、CRI-Oが永続データを保存する場所です。&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-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[storage]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#080;font-style:italic&#34;&gt;# Default storage driver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;driver = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;overlay&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:#080;font-style:italic&#34;&gt;# Temporary storage location&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;runroot = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;/var/run/containers/storage&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:#080;font-style:italic&#34;&gt;# Primary read/write location of container storage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;graphroot = &lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;/var/lib/containers/storage&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;graphroot&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;コンテナランタイムから保存される永続データを指します&lt;/li&gt;
&lt;li&gt;SELinuxが有効になっている場合、これは&lt;code&gt;/var/lib/containers/storage&lt;/code&gt;と一致させる必要があります&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;runroot&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;コンテナに対する一時的な読み書きアクセスを提供します&lt;/li&gt;
&lt;li&gt;これは一時ファイルシステムに配置することを推奨します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここでは、&lt;code&gt;/var/lib/containers/storage&lt;/code&gt;に合うようにgraphrootディレクトリのラベルを変更する簡単な方法を紹介します:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;semanage fcontext -a -e /var/lib/containers/storage &amp;lt;YOUR-STORAGE-PATH&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;restorecon -R -v &amp;lt;YOUR-STORAGE-PATH&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;containerd&#34;&gt;containerd&lt;/h3&gt;
&lt;p&gt;コンテナランタイムであるcontainerdは、永続データと一時データの保存先を制御するためのTOML形式の構成ファイルを使用します。構成ファイルのデフォルトパスは、&lt;code&gt;/etc/containerd/config.toml&lt;/code&gt;にあります。&lt;/p&gt;
&lt;p&gt;containerdストレージの関連フィールドは、&lt;code&gt;root&lt;/code&gt;と&lt;code&gt;state&lt;/code&gt;です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;containerdのメタデータのルートディレクトリ&lt;/li&gt;
&lt;li&gt;デフォルトは&lt;code&gt;/var/lib/containerd&lt;/code&gt;です&lt;/li&gt;
&lt;li&gt;また、OSがそれを要求する場合は、ルートにSELinuxラベルも必要です&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;containerdの一時データ&lt;/li&gt;
&lt;li&gt;デフォルトは、&lt;code&gt;/run/containerd&lt;/code&gt;です&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubernetesノードの圧迫による退避&#34;&gt;Kubernetesノードの圧迫による退避&lt;/h2&gt;
&lt;p&gt;Kubernetesは、コンテナファイルシステムがノードファイルシステムと分離されているかどうかを自動的に検出します。
ファイルシステムを分離する場合、Kubernetesはノードファイルシステムとコンテナランタイムファイルシステムの両方を監視する責任があります。
Kubernetesドキュメントでは、ノードファイルシステムとコンテナランタイムファイルシステムをそれぞれnodefsとimagefsと呼んでいます。
nodefsまたはimagefsのいずれかがディスク容量不足になると、ノード全体がディスク圧迫があると見なされます。
Kubernetesは、まず未使用のコンテナやイメージを削除してスペースを回収し、その後にポッドを追い出すことでスペースを再利用します。
nodefsとimagefsの両方を持つノードでは、kubeletはimagefs上の未使用のコンテナイメージを&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/architecture/garbage-collection/#containers-images&#34;&gt;ガベージコレクト&lt;/a&gt;し、nodefsからは終了したポッドとそれらのコンテナを削除します。
nodefsのみが存在する場合、Kubernetesのガベージコレクションには、終了したコンテナ、ポッド、そして未使用のイメージが含まれます。&lt;/p&gt;
&lt;p&gt;Kubernetesでは、ディスクがいっぱいかどうかを判断するためのより多くの構成が可能です。
kubelet内の退避マネージャーには、関連する閾値を制御するいくつかの構成設定があります。
ファイルシステムの場合、関連する測定値は&lt;code&gt;nodefs.available&lt;/code&gt;、&lt;code&gt;nodefs.inodesfree&lt;/code&gt;、&lt;code&gt;imagefs.available&lt;/code&gt;、および&lt;code&gt;imagefs.inodesfree&lt;/code&gt;です。
コンテナランタイム用に専用のディスクがない場合、imagefsは無視されます。&lt;/p&gt;
&lt;p&gt;ユーザーは、既存のデフォルト値を使用できます:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;memory.available&lt;/code&gt; &amp;lt; 100MiB&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodefs.available&lt;/code&gt; &amp;lt; 10%&lt;/li&gt;
&lt;li&gt;&lt;code&gt;imagefs.available&lt;/code&gt; &amp;lt; 15%&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodefs.inodesFree&lt;/code&gt; &amp;lt; 5% (Linuxノード)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kubernetesでは、kubeletの構成ファイル内の&lt;code&gt;EvictionHard&lt;/code&gt;と&lt;code&gt;EvictionSoft&lt;/code&gt;にユーザー定義の値を設定することができます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;EvictionHard&lt;/code&gt;
限界値を定義します。これらの限界値を超えると、Grace Periodなしでポッドが追い出されます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;EvictionSoft&lt;/code&gt;
限界値を定義します。これらの限界値を超えると、Grace Periodが設定されたシグナルごとにポッドが追い出されます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;EvictionHard&lt;/code&gt;の値を指定すると、デフォルト値が置き換えられます。
したがって、すべてのシグナルを設定することが重要です。&lt;/p&gt;
&lt;p&gt;たとえば、次に示すkubeletの設定は、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals-and-thresholds&#34;&gt;退避シグナル&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-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;kubelet.config.k8s.io/v1beta1&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;KubeletConfiguration&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;address&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;192.168.0.8&amp;#34;&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;port&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;20250&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;serializeImagePulls&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;false&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;evictionHard&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;memory.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;100Mi&amp;#34;&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;nodefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;10%&amp;#34;&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;nodefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;5%&amp;#34;&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;imagefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;15%&amp;#34;&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;imagefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;5%&amp;#34;&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;evictionSoft&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;memory.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;100Mi&amp;#34;&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;nodefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;10%&amp;#34;&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;nodefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;5%&amp;#34;&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;imagefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;15%&amp;#34;&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;imagefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;5%&amp;#34;&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;evictionSoftGracePeriod&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;memory.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;1m30s&amp;#34;&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;nodefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2m&amp;#34;&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;nodefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2m&amp;#34;&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;imagefs.available&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2m&amp;#34;&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;imagefs.inodesFree&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b44&#34;&gt;&amp;#34;2m&amp;#34;&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;evictionMaxPodGracePeriod&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;60s&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;h2 id=&#34;問題点&#34;&gt;問題点&lt;/h2&gt;
&lt;p&gt;Kubernetesプロジェクトでは、退避のデフォルト設定を使用するか、退避に関連するすべてのフィールドを設定することをお勧めしています。
デフォルト設定を使用するか、独自の&lt;code&gt;evictionHard&lt;/code&gt;設定を指定できます。
シグナルの設定を忘れると、Kubernetesはそのリソースを監視しません。
管理者やユーザーが遭遇する可能性のある一般的な設定ミスの1つは、新しいファイルシステムを&lt;code&gt;/var/lib/containers/storage&lt;/code&gt;または&lt;code&gt;/var/lib/containerd&lt;/code&gt;にマウントすることです。
Kubernetesは別のファイルシステムを検出するため、これを行った場合は&lt;code&gt;imagefs.inodesfree&lt;/code&gt;と&lt;code&gt;imagefs.available&lt;/code&gt;が必要に応じて設定に一致していることを確認する必要があります。&lt;/p&gt;
&lt;p&gt;もう一つの混乱の領域は、イメージファイルシステムをノードに定義した場合でも、エフェメラルストレージの報告が変わらないことです。
イメージファイルシステム(&lt;code&gt;imagefs&lt;/code&gt;)は、コンテナイメージのレイヤーを保存するために使用されます。
コンテナが自分自身のルートファイルシステムに書き込む場合、そのローカルな書き込みはコンテナイメージのサイズには含まれません。
コンテナランタイムがこれらのローカルな変更を保存する場所は、ランタイムによって定義されますが、通常はイメージファイルシステムです。
Pod内のコンテナがファイルシステムをバックエンドとする&lt;code&gt;emptyDir&lt;/code&gt;ボリュームに書き込んでいる場合、これはノードファイルシステムからスペースを使用します。
kubeletは常に、&lt;code&gt;nodefs&lt;/code&gt;で表されるファイルシステムに基づいてエフェメラルストレージの容量と割り当てを報告します。
これは、実際には一時的な書き込みがイメージファイルシステムに行われている場合に混乱の原因となる可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;今後の課題&#34;&gt;今後の課題&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/kubernetes/enhancements/issues/4191&#34;&gt;KEP-4191&lt;/a&gt;に取り組むことで、エフェメラルの報告の制限を解消し、コンテナランタイムにより多くの構成オプションを提供することが期待されています。
この提案では、Kubernetesは書き込み可能なレイヤーが読み取り専用のレイヤー(イメージ)と分離されているかどうかを検出します。
これにより、書き込み可能なレイヤーを含むすべてのエフェメラルストレージを同じディスクに配置することが可能になります。
また、イメージ用に別のディスクを使用することも可能になります。&lt;/p&gt;
&lt;h2 id=&#34;参加するためにはどうすればよいですか&#34;&gt;参加するためにはどうすればよいですか？&lt;/h2&gt;
&lt;p&gt;参加したい場合は、Kubernetesの&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-node&#34;&gt;SIG Node&lt;/a&gt;に参加することができます。&lt;/p&gt;
&lt;p&gt;フィードバックを共有したい場合は、Slackチャンネルの&lt;a href=&#34;https://kubernetes.slack.com/archives/C0BP8PW9G&#34;&gt;#sig-node&lt;/a&gt;で行うことができます。
まだそのSlackワークスペースに参加していない場合は、&lt;a href=&#34;https://slack.k8s.io/&#34;&gt;https://slack.k8s.io/&lt;/a&gt;から招待状を取得できます。&lt;/p&gt;
&lt;p&gt;素晴らしいレビューを提供し、貴重な洞察を共有し、トピックのアイデアを提案してくれたすべてのコントリビューターに特別な感謝を捧げます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Peter Hunt&lt;/li&gt;
&lt;li&gt;Mrunal Patel&lt;/li&gt;
&lt;li&gt;Ryan Phillips&lt;/li&gt;
&lt;li&gt;Gaurav Singh&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>SIG Releaseスポットライト(リリース・チーム・サブプロジェクト)</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/15/sig-release-spotlight-2023/</link>
      <pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/15/sig-release-spotlight-2023/</guid>
      <description>
        
        
        &lt;p&gt;リリース・スペシャル・インタレスト・グループ(SIG Release)は、Kubernetesが4ヶ月ごとに最先端の機能とバグ修正でその刃を研ぐ場所です。Kubernetesのような大きなプロジェクトが、新バージョンをリリースするまでのタイムラインをどのように効率的に管理しているのか、またリリースチームの内部はどのようになっているのか、考えたことはありますか？このような疑問に興味がある方、もっと知りたい方、SIG Releaseの仕事に関わりたい方は、ぜひ読んでみてください！&lt;/p&gt;
&lt;p&gt;SIG ReleaseはKubernetesの開発と進化において重要な役割を担っています。その主な責任は、Kubernetesの新バージョンのリリースプロセスを管理することです。&lt;a href=&#34;https://www.kubernetes.dev/resources/release/&#34;&gt;通常3〜4ヶ月ごと&lt;/a&gt;の定期的なリリースサイクルで運営されています。このサイクルの間、Kubernetesリリースチームは他のSIGやコントリビューターと密接に連携し、円滑でうまく調整されたリリースを保証します。これには、リリーススケジュールの計画、コードフリーズとテストフェーズの期限の設定、バイナリ、ドキュメント、リリースノートなどのリリース成果物の作成が含まれます。&lt;/p&gt;
&lt;p&gt;さらに読み進める前に、SIG Releaseにはリリース・エンジニアリングとリリース・チームという2つのサブプロジェクトがあることに注意してください。&lt;/p&gt;
&lt;p&gt;このブログ記事では、&lt;a href=&#34;https://twitter.com/nitishfy&#34;&gt;Nitish Kumar&lt;/a&gt;がSIG Releaseのテクニカル・リーダーであるVerónica López (PlanetScale)にインタビューし、Release Teamサブプロジェクトにスポットライトを当て、リリース・プロセスがどのように見えるか、そして参加する方法について説明します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;最初の計画から最終的なリリースまで、Kubernetesの新バージョンの典型的なリリースプロセスはどのようなものですか？スムーズなリリースを保証するために使用している特定の方法論やツールはありますか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kubernetesの新バージョンのリリースプロセスは、十分に構造化されたコミュニティ主導の取り組みです。私たちが従う特定の方法論やツールはありませんが、物事を整理しておくための一連の手順を記載したカレンダーはあります。完全なリリースプロセスは次のようになります：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リリースチームの立ち上げ&lt;/strong&gt;： 新しいリリースのさまざまなコンポーネントの管理を担当するKubernetesコミュニティのボランティアを含むリリースチームの結成から始めます。これは通常、前のリリースが終了する前に行われます。チームが結成されると、リリースチームリーダーとブランチマネージャーが通常の成果物のカレンダーを提案する間に、新しいメンバーがオンボードされます。例として、SIG Releaseのリポジトリに作成された&lt;a href=&#34;https://github.com/kubernetes/sig-release/issues/2307&#34;&gt;v1.29チーム結成のissue&lt;/a&gt;を見てください。コントリビューターがリリースチームの一員になるには、通常リリースシャドウプログラムを通りますが、それがSIG Releaseに参加する唯一の方法というわけではありません。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;初期段階&lt;/strong&gt;： 各リリースサイクルの最初の数週間で、SIG ReleaseはKubernetes機能強化提案(KEPs)で概説された新機能や機能強化の進捗を熱心に追跡します。これらの機能のすべてがまったく新しいものではありませんが、多くの場合、アルファ段階から始まり、その後ベータ段階に進み、最終的には安定したステータスに到達します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;機能の成熟段階&lt;/strong&gt;： 通常、コミュニティからのフィードバックを集めるため、実験的な新機能を含むアルファ・リリースを2、3回行い、その後、機能がより安定し、バグの修正が中心となるベータ・リリースを2、3回行います。この段階でのユーザーからのフィードバックは非常に重要で、この段階で発生する可能性のあるバグやその他の懸念に対処するために、追加のベータ・リリースを作成しなければならないこともあります。これがクリアされると、実際のリリースの前にリリース候補(RC)を作成します。このサイクルを通じて、リリースノートやユーザーガイドなどのドキュメントの更新や改善に努めます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安定化段階&lt;/strong&gt;： 新リリースの数週間前にコードフリーズを実施し、この時点以降は新機能の追加を禁止します。メインリリースと並行して、私たちはKubernetesの古い公式サポートバージョンのパッチを毎月作成し続けているので、Kubernetesバージョンのライフサイクルはその後数ヶ月に及ぶと言えます。完全なリリースサイクル全体を通して、リリースノートやユーザーガイドを含むドキュメントの更新と改善に努めます。&lt;/p&gt;

    
    &lt;figure&gt;
        &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-overview.png&#34;
             alt=&#34;リリースチームのオンボーディング; 初期段階; 機能の成熟段階; 安定化段階&#34;/&gt; 
    &lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;各リリースで安定性と新機能の導入のバランスをどのように扱っていますか？どのような基準で、どの機能をリリースに含めるかを決定するのですか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;終わりのないミッションですが、重要なのは私たちのプロセスとガイドラインを尊重することだと考えています。私たちのガイドラインは、このプロジェクトに豊富な知識と経験をもたらしてくれるコミュニティの何十人ものメンバーから、何時間にもわたって議論とフィードバックを重ねた結果です。もし厳格なガイドラインがなかったら、私たちの注意を必要とするもっと生産的な議題に時間を使う代わりに、同じ議論を何度も繰り返してしまうでしょう。すべての重要な例外は、チームメンバーの大半の合意を必要とするため、品質を確保することができます。&lt;/p&gt;
&lt;p&gt;何がリリースになるかを決定するプロセスは、リリースチームがワークフローを引き継ぐずっと前から始まっています。各SIGと経験豊富なコントリビューターが、機能や変更を含めるかどうかを決定します。その後、リリースチームが、それらの貢献がドキュメント、テスト、後方互換性などの要件を満たしていることを確認し、正式に許可します。同様のプロセスは月例パッチリリースのチェリーピックでも行われ、完全なKEPを必要とするPRや、影響を受けるすべてのブランチを含まない修正は受け入れないという厳しいポリシーがあります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kubernetesの開発とリリース中に遭遇した最も大きな課題は何ですか？これらの課題をどのように克服しましたか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;リリースのサイクルごとに、さまざまな課題が発生します。新たに発見されたCVE(Common Vulnerabilities and Exposures)のような土壇場の問題に取り組んだり、内部ツール内のバグを解決したり、以前のリリースの機能によって引き起こされた予期せぬリグレッションに対処したりすることもあります。私たちがしばしば直面するもう1つの障害は、私たちのチームは大規模ですが、私たちのほとんどがボランティアベースで貢献していることです。時には人手が足りないと感じることもありますが、私たちは常に組織化し、うまくやりくりしています。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;新しい貢献者として、SIG Releaseに参加するための理想的な道はどのようなものでしょうか？誰もが自分のタスクに忙殺されているコミュニティで、効果的に貢献するために適切なタスクを見つけるにはどうすればいいのでしょうか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;オープンソースコミュニティへの関わり方は人それぞれです。SIG Releaseは、リリースを出荷できるように自分たちでツールを書くという、自分勝手なチームです。&lt;a href=&#34;https://github.com/kubernetes/community/blob/master/sig-k8s-infra/README.md&#34;&gt;SIG K8s Infra&lt;/a&gt;のような他のSIGとのコラボレーションも多いのですが、私たちが使用するツールはすべて、コストを削減しつつ、私たちの大規模な技術的ニーズに合わせて作られたものでなければなりません。このため、「単に」リリースを作成するだけでなく、さまざまなタイプのプロジェクトを手伝ってくれるボランティアを常に探しています。&lt;/p&gt;
&lt;p&gt;私たちの現在のプロジェクトでは、&lt;a href=&#34;https://go.dev/&#34;&gt;Go&lt;/a&gt;プログラミング、Kubernetes内部の理解、Linuxパッケージング、サプライチェーンセキュリティ、テクニカルライティング、一般的なオープンソースプロジェクトのメンテナンスなどのスキルが必要です。このスキルセットは、プロジェクトの成長とともに常に進化しています。&lt;/p&gt;
&lt;p&gt;理想的な道筋として、私たちはこう提案します:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;どのように機能が管理されているか、リリースカレンダー、リリースチームの全体的な構造など、コードに慣れる。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://communityinviter.com/apps/kubernetes/community&#34;&gt;Slack&lt;/a&gt;(#sig-release)などのKubernetesコミュニティのコミュニケーションチャンネルに参加する。&lt;/li&gt;
&lt;li&gt;コミュニティ全員が参加できる&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-release#meetings&#34;&gt;SIG Releaseウィークリーミーティング&lt;/a&gt;に参加する。これらのミーティングに参加することは、あなたのスキルセットや興味に関連すると思われる進行中のプロジェクトや将来のプロジェクトについて学ぶ素晴らしい方法です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;経験豊富な貢献者は皆、かつてあなたのような立場にあったことを忘れないでください。遠慮せずに質問し、議論に参加し、貢献するための小さな一歩を踏み出しましょう。&lt;/p&gt;

   
   &lt;figure&gt;
       &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-meetings.png&#34;
            alt=&#34;SIG Releaseに関する質問&#34;/&gt; 
   &lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リリースシャドウプログラムとは何ですか？また、他の様々なSIGに含まれるシャドウプログラムとの違いは何ですか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;リリースシャドウプログラムは、Kubernetesのリリースサイクルを通して、リリースチームの経験豊富なメンバーをシャドウイングする機会を提供します。これは、Kubernetesのリリースに必要な、サブチームにまたがるすべての困難な仕事を見るまたとないチャンスです。多くの人は、私たちの仕事は3ヶ月ごとにリリースを切ることだけだと思っていますが、それは氷山の一角にすぎません。&lt;/p&gt;
&lt;p&gt;私たちのプログラムは通常、特定のKubernetesリリースサイクルに沿っており、それは約3ヶ月の予測可能なタイムラインを持っています。このプログラムではKubernetesの新機能を書くことはありませんが、リリースチームは新リリースと何千人ものコントリビューターとの最後のステップであるため、高い責任感が求められます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;一般的に、次のKubernetesリリースのリリースシャドウ/リリースリードとしてボランティアに参加する人に求める資格は何ですか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;どの役割もある程度の技術的能力を必要としますが、Goの実践的な経験やKubernetes APIに精通していることを必要とするものもあれば、技術的な内容を明確かつ簡潔に伝えるのが得意な人を必要とするものもあります。技術的な専門知識よりも、熱意とコミットメントを重視しています。もしあなたが正しい姿勢を持っていて、Kubernetesやリリース・エンジニアリングの仕事を楽しんでいることが伝われば、たとえそれがあなたが余暇を利用して立ち上げた個人的なプロジェクトであったとしても、チームは必ずあなたを指導します。セルフスターターであること、そして質問をすることを恐れないことは、私たちのチームであなたを大きく前進させます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リリースシャドープログラムに何度も不合格になった人に何を勧めますか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;応募し続けることです。&lt;/p&gt;
&lt;p&gt;リリースサイクルごとに応募者数が飛躍的に増えているため、選ばれるのが難しくなり、落胆することもありますが、不採用になったからといって、あなたに才能がないというわけではないことを知っておいてください。すべての応募者を受け入れることは現実的に不可能です、しかし、ここに私たちが提案する代替案があります。:&lt;/p&gt;
&lt;p&gt;毎週開催されるKubernetes SIGのリリースミーティングに参加して、自己紹介をし、チームや私たちが取り組んでいるプロジェクトに慣れてください。&lt;/p&gt;
&lt;p&gt;リリースチームはSIG Releaseに参加する方法の1つですが、私たちは常に手伝ってくれる人を探しています。繰り返しになりますが、一定の技術的な能力に加えて、私たちが最も求めている特性は、信頼できる人であり、それには時間が必要です。&lt;/p&gt;

    
    &lt;figure&gt;
        &lt;img src=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-motivation.png&#34;
             alt=&#34;SIG Releaseのモチベーション&#34;/&gt; 
    &lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;リリースチームがKubernetes v1.28に特に期待している進行中の取り組みや今後の機能について教えてください。これらの進歩は、Kubernetesの長期的なビジョンとどのように整合しているのでしょうか？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kubernetesのパッケージをコミュニティインフラ上でついに公開できることに興奮しています。数年前からやりたいと思っていたことですが、移行する前に整えなければならない技術的な意味合いが多いプロジェクトです。それが終われば、生産性を向上させ、ワークフロー全体をコントロールできるようになります。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;最後に&#34;&gt;最後に&lt;/h2&gt;
&lt;p&gt;さて、この対談はここで終わりですが、学習はこれで終わりではありません。このインタビューが、SIG Releaseが何をしているのか、そしてどのように手助けを始めたらいいのか、ある程度わかっていただけたと思います。重要なこととして、この記事はSIG Releaseの最初のサブプロジェクトであるリリース・チームを取り上げています。次回のSIG Releaseのスポットライトブログでは、Release Engineeringサブプロジェクトにスポットライトを当て、その活動内容や参加方法について紹介します。最後に、SIG Releaseの運営方法についてより深く理解するために、&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/sig-release&#34;&gt;SIG Release憲章&lt;/a&gt;をご覧ください。&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>フォレンジックコンテナ分析</title>
      <link>https://deploy-preview-55342--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-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2023/03/10/forensic-container-analysis/</guid>
      <description>
        
        
        &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 1.26: PodDisruptionBudgetによって保護された不健全なPodに対する退避ポリシー</title>
      <link>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2023/01/06/unhealthy-pod-eviction-policy-for-pdbs/</link>
      <pubDate>Fri, 06 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2023/01/06/unhealthy-pod-eviction-policy-for-pdbs/</guid>
      <description>
        
        
        &lt;p&gt;アプリケーションの中断がその可用性に影響を与えないようにすることは、簡単な作業ではありません。
先月リリースされたKubernetes v1.26では、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/workloads/pods/disruptions/#pod-disruption-budgets&#34;&gt;PodDisruptionBudget&lt;/a&gt; (PDB) に
&lt;em&gt;不健全なPodの退避ポリシー&lt;/em&gt; を指定して、ノード管理操作中に可用性を維持できるようになりました。
この記事では、アプリケーション所有者が中断をより柔軟に管理できるようにするために、PDBにどのような変更が導入されたのかを詳しく説明します。&lt;/p&gt;
&lt;h2 id=&#34;what-problem-does-this-solve&#34;&gt;これはどのような問題を解決しますか？&lt;/h2&gt;
&lt;p&gt;APIによって開始されるPodの退避では、PodDisruptionBudget(PDB)が考慮されます。
これは、退避によるPodへの&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/scheduling-eviction/#pod-disruption&#34;&gt;自発的な中断&lt;/a&gt;の要求は保護されたアプリケーションを中断してはならず、
PDBの&lt;code&gt;.status.currentHealthy&lt;/code&gt;が&lt;code&gt;.status.desiredHealthy&lt;/code&gt;を下回ってはいけないことを意味します。
&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/tasks/run-application/configure-pdb/#healthiness-of-a-pod&#34;&gt;Unhealthy&lt;/a&gt;な実行中のPodはPDBステータスにはカウントされませんが、
これらの退避はアプリケーションが中断されない場合にのみ可能です。
これにより、中断されたアプリケーションやまだ開始されていないアプリケーションが、退避によって追加のダウンタイムが発生することなく、できるだけ早く可用性を達成できるようになります。&lt;/p&gt;
&lt;p&gt;残念ながら、これは手動の介入なしでノードをドレインしたいクラスター管理者にとって問題を引き起こします。
(バグまたは構成ミスにより)Podが&lt;code&gt;CrashLoopBackOff&lt;/code&gt;状態になっているアプリケーション、または単に準備ができていないPodがあるアプリケーションが誤動作している場合、このタスクはさらに困難になります。
アプリケーションのすべてのPodが正常でない場合、PDBの違反により退避リクエストは失敗します。その場合、ノードのドレインは進行できません。&lt;/p&gt;
&lt;p&gt;一方で、次の目的で従来の動作に依存するユーザーもいます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基盤となるリソースまたはストレージを保護しているPodの削除によって引き起こされるデータ損失を防止する&lt;/li&gt;
&lt;li&gt;アプリケーションに対して可能な限り最高の可用性を実現する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kubernetes 1.26では、PodDisruptionBudget APIに新しい実験的フィールド&lt;code&gt;.spec.unhealthyPodEvictionPolicy&lt;/code&gt;が導入されました。
このフィールドを有効にすると、これらの要件の両方をサポートできるようになります。&lt;/p&gt;
&lt;h2 id=&#34;how-does-it-work&#34;&gt;どのように機能しますか？&lt;/h2&gt;
&lt;p&gt;APIによって開始される退避は、Podの安全な終了をトリガーするプロセスです。
このプロセスは、APIを直接呼び出すか、&lt;code&gt;kubectl drain&lt;/code&gt;コマンドを使用するか、クラスター内の他のアクターを使用して開始できます。
このプロセス中に、十分な数のPodが常にクラスター内で実行されていることを確認するために、すべてのPodの削除が適切なPDBと照合されます。&lt;/p&gt;
&lt;p&gt;次のポリシーにより、PDBの作成者は、プロセスが不健全なPodを処理する方法をより詳細に制御できるようになります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IfHealthyBudget&lt;/code&gt;と&lt;code&gt;AlwaysAllow&lt;/code&gt;の2つのポリシーから選択できます。&lt;/p&gt;
&lt;p&gt;前者の&lt;code&gt;IfHealthyBudget&lt;/code&gt;は、従来の動作に従って、デフォルトで得られる最高の可用性を実現します。
不健全なPodは、アプリケーションが利用可能な最小数の&lt;code&gt;.status.desiredHealthy&lt;/code&gt;だけPodがある場合にのみ中断できます。&lt;/p&gt;
&lt;p&gt;PDBの&lt;code&gt;spec.unhealthyPodEvictionPolicy&lt;/code&gt;フィールドを&lt;code&gt;AlwaysAllow&lt;/code&gt;に設定することにより、アプリケーションにとってベストエフォートの可用性を選択することになります。
このポリシーを使用すると、不健全なPodをいつでも削除できます。これにより、クラスターの保守とアップグレードが容易になります。&lt;/p&gt;
&lt;p&gt;多くの場合、&lt;code&gt;AlwaysAllow&lt;/code&gt;がより良い選択であると考えられますが、一部の重要なワークロードでは、
不健全なPodであってもノードドレインやAPIによって開始される他の形式の退避から保護する方が望ましい場合もあります。&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-use-it&#34;&gt;どのように利用できますか？&lt;/h2&gt;
&lt;p&gt;これはアルファ機能であるため、kube-apiserverに対してコマンドライン引数&lt;code&gt;--feature-gates=PDBUnhealthyPodEvictionPolicy=true&lt;/code&gt;を指定して
&lt;code&gt;PDBUnhealthyPodEvictionPolicy&lt;/code&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/reference/command-line-tools-reference/feature-gates/&#34;&gt;フィーチャーゲート&lt;/a&gt;を有効にする必要があります。&lt;/p&gt;
&lt;p&gt;ここに例を示します。クラスターでフィーチャーゲートを有効にし、プレーンなWebサーバーを実行するDeploymentをすでに定義していると仮定します。
そのDeploymentのPodに&lt;code&gt;app: nginx&lt;/code&gt;というラベルを付けました。
回避可能な中断を制限したいと考えており、このアプリにはベストエフォートの可用性で十分であることがわかっています。
WebサーバーのPodが不健全な場合でも、退避を許可することにしました。
不健全なPodを排除するための&lt;code&gt;AlwaysAllow&lt;/code&gt;ポリシーを使用して、このアプリケーションを保護するPDBを作成します。&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;policy/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;PodDisruptionBudget&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;nginx-pdb&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;selector&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;matchLabels&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;app&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;nginx&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;maxUnavailable&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&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;unhealthyPodEvictionPolicy&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;AlwaysAllow&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;h2 id=&#34;how-can-i-learn-more&#34;&gt;もっと学ぶには？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;KEPを読んでください: &lt;a href=&#34;https://github.com/kubernetes/enhancements/tree/master/keps/sig-apps/3017-pod-healthy-policy-for-pdb&#34;&gt;Unhealthy Pod Eviction Policy for PDBs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PodDisruptionBudgetについてのドキュメントを読んでください: &lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/tasks/run-application/configure-pdb/#unhealthy-pod-eviction-policy&#34;&gt;Unhealthy Pod Eviction Policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/concepts/workloads/pods/disruptions/#pod-disruption-budgets&#34;&gt;PodDisruptionBudget&lt;/a&gt;、&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/docs/tasks/administer-cluster/safely-drain-node/&#34;&gt;draining of Nodes&lt;/a&gt;および&lt;a href=&#34;https://deploy-preview-55342--kubernetes-io-main-staging.netlify.app/ja/docs/concepts/scheduling-eviction/api-eviction/&#34;&gt;evictions&lt;/a&gt;についてKubernetesドキュメントを確認してください&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-do-i-get-involved&#34;&gt;どうすれば参加できますか？&lt;/h2&gt;
&lt;p&gt;フィードバックがある場合は、Slackの&lt;a href=&#34;https://kubernetes.slack.com/archives/C18NZM5K9&#34;&gt;#sig-apps&lt;/a&gt; チャンネル(必要な場合は &lt;a href=&#34;https://slack.k8s.io/&#34;&gt;https://slack.k8s.io/&lt;/a&gt; にアクセスして招待を受けてください)、またはSIG Appsメーリングリストにご連絡ください。kubernetes-sig-apps@googlegroups.com&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Kubernetesにおけるフォレンジックコンテナチェックポイント処理</title>
      <link>https://deploy-preview-55342--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-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/</guid>
      <description>
        
        
        &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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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-55342--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/?group=projects-and-products&amp;amp;view-mode=card#runtime--container-runtime&#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-55342--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-55342--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-55342--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-55342--kubernetes-io-main-staging.netlify.app/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/</guid>
      <description>
        
        
        &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-55342--kubernetes-io-main-staging.netlify.app/ja/dockershim&#34;&gt;dockershimの削除に関するFAQ&lt;/a&gt;を参照してください。&lt;/p&gt;

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