Kubernetes Bloghttps://kubernetes.io/ja/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.Hugo -- gohugo.iojahttps://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.pngThe Kubernetes project logohttps://kubernetes.io/ja/- Kubernetes v1.34: Of Wind & Will (O' WaW)https://kubernetes.io/ja/blog/2025/08/27/kubernetes-v1-34-release/Wed, 27 Aug 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/08/27/kubernetes-v1-34-release/
<p><strong>ç·¨éè
:</strong> Agustina Barbetta, Alejandro Josue Leon Bellido, Graziano Casto, Melony Qin, Dipesh Rawat</p>
<p>ååã®ãªãªã¼ã¹ã¨åæ§ã«ãKubernetes v1.34ã®ãªãªã¼ã¹ã§ã¯æ°ããGAããã¼ã¿çãã¢ã«ãã¡çã®æ©è½ãå°å
¥ããã¾ãã
é«å質ãªãªãªã¼ã¹ã®ç¶ç¶çãªæä¾ã¯ãç§ãã¡ã®éçºãµã¤ã¯ã«ã®å¼·ãã¨ã³ãã¥ããã£ããã®æ´»çºãªãµãã¼ãã示ãã¦ãã¾ãã</p>
<p>ãã®ãªãªã¼ã¹ã¯58åã®æ©è½æ¹åã§æ§æããã¦ãã¾ãã
ãããã®ãã¡ãGAã¸ã®ææ ¼ã23åããã¼ã¿ã¸ã®ç§»è¡ã22åãã¢ã«ãã¡ã¨ãã¦ã®å°å
¥ã13åã¨ãªã£ã¦ãã¾ãã</p>
<p>ã¾ãããã®ãªãªã¼ã¹ã«ã¯ããã¤ãã®<a href="#deprecations-and-removals">鿍奍åã¨åé¤</a>ãããã¾ãã
ãããã«å¿
ãç®ãéãã¦ãã ããã</p>
<h2 id="ãªãªã¼ã¹ã®ãã¼ãã¨ãã´">ãªãªã¼ã¹ã®ãã¼ãã¨ãã´</h2>
<figure class="release-logo ">
<img src="https://kubernetes.io/blog/2025/08/27/kubernetes-v1-34-release/k8s-v1.34.png"
alt="Kubernetes v1.34 logo: Three bears sail a wooden ship with a flag featuring a paw and a helm symbol on the sail, as wind blows across the ocean"/>
</figure>
<p>ç§ãã¡ãåãå·»ã風ãããã¦ç§ãã¡ã®å
ãªãæå¿ã«ãã£ã¦åãããããªãªã¼ã¹ã</p>
<p>訳注: ãã®ãªãªã¼ã¹ã§ã¯ãKubernetesã®éçºãèªæµ·ã«ãªãããã¦ãã¾ãã</p>
<p>ãã¹ã¦ã®ãªãªã¼ã¹ãµã¤ã¯ã«ã§ãç§ãã¡ã¯å®éã«ã¯ã³ã³ããã¼ã«ã§ããªãã風ããåãç¶ãã¾ã â ãã¼ã«ã®ç¶æ
ãããã¥ã¡ã³ããããã¦ããã¸ã§ã¯ãã®æ´å²çãªç¹æ§ã§ãã
æã«ãããã®é¢¨ã¯ç§ãã¡ã®å¸ãæºãããæã«æ¨ªã«æ¼ãæµããæã«åªãã§ãã¾ãã¾ãã</p>
<p>Kubernetesãåé²ããç¶ãã¦ããã®ã¯å®ç§ãªé¢¨ã§ã¯ãªããè¹å¡ãã¡ã®æå¿ã§ãã
å½¼ãã¯å¸ã調æ´ããèµãåããèªè·¯ãå®ããè¹ãå®å®ããã¾ãã
ãªãªã¼ã¹ãå®ç¾ããã®ã¯æ¡ä»¶ã常ã«çæ³çã ããã§ã¯ããã¾ããã
ãããæ§ç¯ãã人ã
ããªãªã¼ã¹ãã人ã
ãããã¦ã¯ã<sup>^</sup>ãç«ãç¬ãéæ³ä½¿ãã好å¥å¿ã«æºã¡ã人ã
ãããããããå®ç¾ããã®ã§ãã
風ãã©ã®æ¹åã«å¹ãã¦ããå½¼ãã¯Kubernetesãåå¼·ãåé²ããç¶ãã¦ãã¾ãã</p>
<p>ãã®ãªãªã¼ã¹ <strong>Of Wind & Will (O' WaW)</strong> ã¯ãç§ãã¡ãå½¢ä½ã£ã¦ãã風ã¨ãç§ãã¡ãåé²ãããæå¿ã«æ¬æã表ãã¦ãã¾ãã</p>
<p><sub>^ ãªãã¯ããªã®ãï¼ ãã®çãã¯ãæ³åã«ãä»»ããã¾ãï¼</sub></p>
<h2 id="主ãªã¢ãããã¼ãæ
å ±">主ãªã¢ãããã¼ãæ
å ±</h2>
<p>Kubernetes v1.34ã¯æ°æ©è½ã¨æ¹åç¹ãæºè¼ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ããªãªã¼ã¹ãã¼ã ãç¹ã«æ³¨ç®ãã¦æ¬²ãããé¸ããããã®ã¢ãããã¼ãå
容ããç´¹ä»ãã¾ãï¼</p>
<h3 id="ga-draã®ã³ã¢æ©è½">GA: DRAã®ã³ã¢æ©è½</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/dynamic-resource-allocation/">Dynamic Resource Allocation</a> (DRA)ã¯ãGPUãTPUãNICããã³ãã®ä»ã®ããã¤ã¹ã鏿ãå²ãå½ã¦ãå
±æãè¨å®ããããã®ããå¼·åãªæ¹æ³ãæä¾ãã¾ãã</p>
<p>v1.30ãªãªã¼ã¹ä»¥éãDRAã¯æ§é åãã©ã¡ã¼ã¿ã¼ã使ã£ã¦ããã¤ã¹ãè¦æ±ããä»çµã¿ãæ¡ç¨ãã¦ãã¾ãã
ãããã®ãã©ã¡ã¼ã¿ã¼ã¯Kubernetesã®ã³ã¢ããã¯ç´æ¥è¦ããªãå½¢ã§å¦çããã¾ãã
ãã®è¨è¨ã¯ãã¹ãã¬ã¼ã¸ããªã¥ã¼ã ã®åçãããã¸ã§ãã³ã°ããçæ³ãå¾ã¦ãã¾ãã
æ§é åãã©ã¡ã¼ã¿ã¼ã使ç¨ããDRAã¯ã<code>resource.k8s.io</code>é
ä¸ã®ä»¥ä¸ã®APIã«ä¾åãã¦ãã¾ããResourceClaimãDeviceClassãResourceClaimTemplateãResourceSliceã
ã¾ããPodã®<code>.spec</code>ã«æ°ãã<code>resourceClaims</code>ãã£ã¼ã«ãã追å ãã¦ãã¾ãã<br>
<code>resource.k8s.io/v1</code> APIã¯GAã«ææ ¼ããç¾å¨ã¯ããã©ã«ãã§å©ç¨å¯è½ã§ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/4381">KEP #4381</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãã¼ã¿-kubelet-ã¤ã¡ã¼ã¸èªè¨¼ãããã¤ãã¼åãã®projected-serviceaccountãã¼ã¯ã³">ãã¼ã¿: <code>kubelet</code>ã¤ã¡ã¼ã¸èªè¨¼ãããã¤ãã¼åãã®Projected ServiceAccountãã¼ã¯ã³</h3>
<p>ãã©ã¤ãã¼ãã³ã³ããã¤ã¡ã¼ã¸ãåå¾ããéã«ä½¿ç¨ããã<code>kubelet</code>ã®èªè¨¼ãããã¤ãã¼ã¯ã徿¥ããã¼ããã¯ã©ã¹ã¿ã¼ã«ä¿åãããé·æéæå¹ãªSecretã«ä¾åãã¦ãã¾ããã
ãã®æ¹æ³ã§ã¯ãèªè¨¼æ
å ±ãç¹å®ã®ã¯ã¼ã¯ãã¼ãã«ç´ä»ãããããèªåæ´æ°ããããªããããã»ãã¥ãªãã£ãªã¹ã¯ã¨ç®¡çã®æéãå¢å¤§ãã¦ãã¾ããã<br>
ãã®åé¡ã解決ããããã<code>kubelet</code>ãã³ã³ããã¬ã¸ã¹ããªã¸ã®èªè¨¼ã«ãçæéã®ã¿æå¹ã§ç¹å®ã®ç¨éã«éå®ãããServiceAccountãã¼ã¯ã³ãè¦æ±ã§ããããã«ãªãã¾ããã
ããã«ããããã¼ãå
¨ä½ã®èªè¨¼æ
å ±ã§ã¯ãªããPodåºæã®ã¢ã¤ãã³ãã£ãã£ã«åºã¥ãã¦ã¤ã¡ã¼ã¸ã®åå¾ãèªå¯ã§ãã¾ãã<br>
æå¤§ã®å©ç¹ã¯ã»ãã¥ãªãã£ã®å¤§å¹
ãªåä¸ã§ãã
ã¤ã¡ã¼ã¸åå¾ã®ããã«é·æéæå¹ãªSecretãä¿æããå¿
è¦ããªããªããæ»æãåãããªã¹ã¯ãæ¸å°ãã管çè
ã¨éçºè
ã®ä¸¡æ¹ã«ã¨ã£ã¦èªè¨¼æ
å ±ã®ç®¡çãã·ã³ãã«ã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã¨SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4412">KEP #4412</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¢ã«ãã¡-kyaml-kubernetesåãã«æé©åãããyamlå½¢å¼-ã®ãµãã¼ã">ã¢ã«ãã¡: KYAML(Kubernetesåãã«æé©åãããYAMLå½¢å¼)ã®ãµãã¼ã</h3>
<p>KYAMLã¯ãKubernetesåãã«æé©åããããããå®å
¨ã§ææ§ãã®å°ãªãYAMLã®ãµãã»ããã§ãã
Kubernetes v1.34以éãã©ã®ãã¼ã¸ã§ã³ã®Kubernetesã使ç¨ãã¦ãã¦ããkubectlã®æ°ããåºåå½¢å¼ã¨ãã¦KYAMLãå©ç¨ã§ãã¾ãã</p>
<p>KYAMLã¯ãYAMLã¨JSONãããããæ±ãã課é¡ã解決ãã¾ãã
YAMLã§ã¯ç©ºç½æåãéè¦ãªæå³ãæã¤ãããã¤ã³ãã³ãããã¹ãã«ç´°å¿ã®æ³¨æãå¿
è¦ã§ãã
ã¾ããæååã®å¼ç¨ç¬¦ãçç¥ã§ãããã¨ã§ãäºæããªãå夿ãçºçãããã¨ãããã¾ã(ä¾: <a href="https://hitchdev.com/strictyaml/why/implicit-typing-removed/">ããã«ã¦ã§ã¼åé¡ã</a>)ã
䏿¹ãJSONã¯ã³ã¡ã³ããæ¸ãããæ«å°¾ã®ã«ã³ããå¼ç¨ç¬¦ä»ãã®ãã¼ã«é¢ãã¦å³å¯ãªã«ã¼ã«ãããã¾ãã</p>
<p>KYAMLãã¡ã¤ã«ã¯ãã¹ã¦æå¹ãªYAMLã§ããããããKYAMLã§è¨è¿°ãããã¡ã¤ã«ã¯ã©ã®ãã¼ã¸ã§ã³ã®<code>kubectl</code>ã«ãå
¥åã¨ãã¦æ¸¡ãã¾ãã
v1.34ã®<code>kubectl</code>ã§ã¯ãç°å¢å¤æ°<code>KUBECTL_KYAML=true</code>ãè¨å®ãããã¨ã§ã<a href="https://kubernetes.io/ja/docs/reference/kubectl/#syntax-1">KYAMLå½¢å¼ã§ã®åºå</a>ããªã¯ã¨ã¹ãã§ãã¾ã(ä¾: <code>kubectl get -o kyaml ...</code>)ã
ãã¡ããã徿¥éãJSONãYAMLå½¢å¼ã§ã®åºåãå¯è½ã§ãã</p>
<p>ãã®ä½æ¥ã¯SIG CLIã主å°ãã<a href="https://kep.k8s.io/5295">KEP #5295</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="gaã«ææ ¼ããæ©è½">GAã«ææ ¼ããæ©è½</h2>
<p><em>ããã¯v1.34ãªãªã¼ã¹å¾ã«GAã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="jobã®ä»£æ¿podã®é
延使">Jobã®ä»£æ¿Podã®é
延使</h3>
<p>ããã©ã«ãã§ã¯ãJobã³ã³ããã¼ã©ã¼ã¯Podãçµäºå¦çãå§ããæç¹ã§ãããã«ä»£æ¿ã¨ãªãæ°ããPodã使ãã¾ãã
ãã®çµæãçµäºä¸ã®å¤ãPodã¨ã¾ã æ°ããPodãåæã«åå¨ãã両æ¹ããªã½ã¼ã¹ã使ç¨ããç¶æ
ã«ãªãã¾ãã
ãªã½ã¼ã¹ãéãããã¯ã©ã¹ã¿ã¼ã§ã¯ãå¤ãPodãå®å
¨ã«çµäºãã¦ãªã½ã¼ã¹ãè§£æ¾ããã¾ã§ãæ°ããPodãèµ·åã§ããã«å¾
æ©ç¶æ
ã¨ãªãããªã½ã¼ã¹ã®ç«¶åãçºçãã¾ãã
ã¾ãããã®ç¶æ³ã«ãããã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼ãä¸å¿
è¦ã«ãã¼ãã追å ãã¦ãã¾ããã¨ãããã¾ãã
ããã«ãTensorFlowã<a href="https://jax.readthedocs.io/en/latest/">JAX</a>ãªã©ã®æ©æ¢°å¦ç¿ãã¬ã¼ã ã¯ã¼ã¯ã¯ãåãã¤ã³ããã¯ã¹ã®Podãè¤æ°åæã«åä½ãããã¨ã許å¯ããªãããããã®åæå®è¡ãåé¡ã¨ãªãã¾ãã
ãã®æ©è½ã«ãããJobã«<code>.spec.podReplacementPolicy</code>ãå°å
¥ããã¾ãã
Podãå®å
¨ã«çµäºããå¾(<code>.status.phase: Failed</code>ã¨ãªã£ãå¾)ã«ã®ã¿ä»£æ¿Podã使ããããè¨å®ã§ãã¾ãã
ãããè¡ãã«ã¯ã<code>.spec.podReplacementPolicy: Failed</code>ãè¨å®ãã¾ãã<br>
v1.28ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ããããã®æ©è½ã¯ãv1.34ã§GAã«ææ ¼ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Appsã主å°ãã<a href="https://kep.k8s.io/3939">KEP #3939</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ããªã¥ã¼ã æ¡å¼µå¤±æããã®å¾©æ§">ããªã¥ã¼ã æ¡å¼µå¤±æããã®å¾©æ§</h3>
<p>ãã®æ©è½ã«ãããã¹ãã¬ã¼ã¸ãããã¤ãã¼ããµãã¼ããã¦ããªããµã¤ãºã¸ã®ããªã¥ã¼ã æ¡å¼µã失æããå ´åã«ããã®æ¡å¼µæä½ããã£ã³ã»ã«ãããµãã¼ãç¯å²å
ã®ããå°ããªãµã¤ãºã§å度æ¡å¼µã試ã¿ããã¨ãã§ãã¾ãã<br>
v1.23ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ããããã®æ©è½ã¯ãv1.34ã§GAã«ææ ¼ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Storageã主å°ãã<a href="https://kep.k8s.io/1790">KEP #1790</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ããªã¥ã¼ã 夿´ã®ããã®volumeattributesclass">ããªã¥ã¼ã 夿´ã®ããã®VolumeAttributesClass</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/storage/volume-attributes-classes/">VolumeAttributesClass</a>ãv1.34ã§GAã«ææ ¼ãã¾ããã
VolumeAttributesClassã¯ããããã¸ã§ãã³ã°ãããIOãªã©ã®ããªã¥ã¼ã ãã©ã¡ã¼ã¿ã¼ã夿´ããããã®ãæ±ç¨çãªKubernetesãã¤ãã£ããªAPIã§ãã
ãããã¤ãã¼ããµãã¼ããã¦ããå ´åãã¯ã¼ã¯ãã¼ããã³ã¹ãã¨ããã©ã¼ãã³ã¹ã®ãã©ã³ã¹ãåããªããã稼åä¸ã«ããªã¥ã¼ã ãåç´ã¹ã±ã¼ãªã³ã°ã§ããããã«ãªãã¾ãã<br>
Kubernetesã®ä»ã®ãã¹ã¦ã®æ°ããããªã¥ã¼ã æ©è½ã¨åæ§ã«ããã®APIã¯<a href="https://kubernetes-csi.github.io/docs/">Container Storage Interface (CSI)</a>ãä»ãã¦å®è£
ããã¦ãã¾ãã
ãã®æ©è½ã使ç¨ããã«ã¯ãã使ãã®ãããã¸ã§ãã¼åºæã®CSIãã©ã¤ãã¼ãããã®æ©è½ã®CSIå´ã®å®è£
ã§ããæ°ããModifyVolume APIããµãã¼ããã¦ããå¿
è¦ãããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Storageã主å°ãã<a href="https://kep.k8s.io/3751">KEP #3751</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="æ§é åãããèªè¨¼è¨å®">æ§é åãããèªè¨¼è¨å®</h3>
<p>Kubernetes v1.29ã§ã¯ãAPIãµã¼ãã¼ã®ã¯ã©ã¤ã¢ã³ãèªè¨¼ã管çããæ°ããæ¹æ³ãå°å
¥ããã¾ããã
ããã¾ã§å¤æ°ã®ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã§è¨å®ãã¦ããèªè¨¼ããæ§é åãããè¨å®ãã¡ã¤ã«ã§ç®¡çã§ããããã«ãªãã¾ããã
<a href="https://kubernetes.io/ja/docs/reference/access-authn-authz/authentication/#using-authentication-configuration">AuthenticationConfiguration</a>ã¨ããæ°ãããªã½ã¼ã¹ã«ããã管çè
ã¯è¤æ°ã®JWTèªè¨¼æ©æ§ã®è¨å®ãCELå¼ã使ã£ãæè»ãªæ¤è¨¼ã«ã¼ã«ã®å®ç¾©ãããã¦ãµã¼ãã¼ãåèµ·åãããã¨ãªãè¨å®ãåçã«åèªã¿è¾¼ã¿ãããã¨ãå¯è½ã«ãªãã¾ãã
ãã®å¤æ´ã«ãããã¯ã©ã¹ã¿ã¼ã®èªè¨¼è¨å®ããã管çãããããç£æ»ãããããªãã¾ããã
ãã®æ©è½ã¯v1.34ã§GAã«ææ ¼ãã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/3331">KEP #3331</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã»ã¬ã¯ã¿ã¼ã«åºã¥ãç´°ããèªå¯">ã»ã¬ã¯ã¿ã¼ã«åºã¥ãç´°ããèªå¯</h3>
<p>Kubernetesã®èªå¯æ©æ§(Webhookèªå¯ãçµã¿è¾¼ã¿ã®ãã¼ãèªå¯ãå«ã)ãããªã¯ã¨ã¹ãã«å«ã¾ãããã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ãã©ãã«ã»ã¬ã¯ã¿ã¼ã®å
容ã¾ã§èæ
®ãã¦ãããç´°ããèªå¯å¤æãè¡ããããã«ãªãã¾ããã
<strong>list</strong>ã<strong>watch</strong>ã<strong>deletecollection</strong> ã¨ãã£ãä¸è¦§åå¾ãåé¤ã®ãªã¯ã¨ã¹ãã«ã»ã¬ã¯ã¿ã¼ãå«ã¾ãã¦ããå ´åãèªå¯ã¬ã¤ã¤ã¼ã¯ãã®æ¡ä»¶ãå«ãã¦ã¢ã¯ã»ã¹æ¨©éãè©ä¾¡ãã¾ãã</p>
<p>ä¾ãã°ããç¹å®ã®ãã¼ã(<code>.spec.nodeName</code>)ã«å²ãå½ã¦ãããPodã®ã¿ãä¸è¦§è¡¨ç¤ºã§ãããã¨ããèªå¯ããªã·ã¼ã使ã§ãã¾ãã
ãã®å ´åãã¯ã©ã¤ã¢ã³ã(ä¾: ç¹å®ãã¼ãä¸ã®kubelet)ã¯å¿
è¦ãªãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ãæç¤ºçã«æå®ããå¿
è¦ããããæå®ããªãå ´åã¯ãªã¯ã¨ã¹ããæå¦ããã¾ãã
ãã®æ©è½ã«ãããã¯ã©ã¤ã¢ã³ããå¶éäºé
ãçè§£ãé©åã«ãªã¯ã¨ã¹ããéä¿¡ã§ããç°å¢ã§ããã°ãæå°æ¨©éã®ååã«åºã¥ããå³å¯ãªã¢ã¯ã»ã¹å¶å¾¡ãå®ç¾ã§ãã¾ãã
Kubernetes v1.34ã§ã¯ããã¼ããã¨ã®ãªã½ã¼ã¹åé¢ãã«ã¹ã¿ã ãã«ãããã³ãæ§æãªã©ãããç´°ããå¶å¾¡ãå¿
è¦ãªç°å¢ã§ã®éç¨ãããå®å
¨ã«ãªãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4601">KEP #4601</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ç´°ããå¶å¾¡ã«ããå¿åãªã¯ã¨ã¹ãã®å¶é">ç´°ããå¶å¾¡ã«ããå¿åãªã¯ã¨ã¹ãã®å¶é</h3>
<p>å¿åã¢ã¯ã»ã¹ãå®å
¨ã«æå¹ã¾ãã¯ç¡å¹ã«ãã代ããã«ãèªè¨¼ããã¦ããªããªã¯ã¨ã¹ãã許å¯ããç¹å®ã®ã¨ã³ããã¤ã³ãã®ãªã¹ããå³å¯ã«è¨å®ã§ããããã«ãªãã¾ããã
ããã«ããã<code>/healthz</code>ã<code>/readyz</code>ã<code>/livez</code>ãªã©ã®ãã«ã¹ãã§ãã¯ããã¼ãã¹ãã©ããç¨ã¨ã³ããã¤ã³ãã¸ã®å¿åã¢ã¯ã»ã¹ã«ä¾åããã¯ã©ã¹ã¿ã¼ã«å¯¾ãã¦ãããå®å
¨ãªä»£æ¿ææ®µãæä¾ãã¾ãã</p>
<p>ãã®æ©è½ã«ãããå¿åã¦ã¼ã¶ã¼ã«åºç¯ãªã¢ã¯ã»ã¹æ¨©ã誤ã£ã¦ä»ä¸ãã¦ãã¾ãRBACã®è¨å®ãã¹ãé²ããã¨ãã§ããå¤é¨ã®ããã¼ããã¼ã«ããã¼ãã¹ãã©ãããã¼ã«ã¸ã®å¤æ´ãä¸è¦ã§ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4633">KEP #4633</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãã©ã°ã¤ã³åºæã®ã³ã¼ã«ããã¯ã«ããå¹ççãªåãã¥ã¼ã¤ã³ã°">ãã©ã°ã¤ã³åºæã®ã³ã¼ã«ããã¯ã«ããå¹ççãªåãã¥ã¼ã¤ã³ã°</h3>
<p><code>kube-scheduler</code>ãã以åã¹ã±ã¸ã¥ã¼ã«ã§ããªãã£ãPodããã¤å試è¡ãã¹ããã«ã¤ãã¦ãããæ£ç¢ºãªå¤æãä¸ããããã«ãªãã¾ããã
åã¹ã±ã¸ã¥ã¼ãªã³ã°ãã©ã°ã¤ã³ãç¬èªã®ã³ã¼ã«ããã¯é¢æ°ãç»é²ã§ããããã«ãªããã¯ã©ã¹ã¿ã¼ã§çºçããã¤ãã³ããã以åæå¦ãããPodãã¹ã±ã¸ã¥ã¼ã«å¯è½ã«ããå¯è½æ§ããããã©ãããã¹ã±ã¸ã¥ã¼ã©ã¼ã«éç¥ãã¾ãã</p>
<p>ããã«ãããä¸è¦ãªå試è¡ã忏ãããã¹ã±ã¸ã¥ã¼ãªã³ã°å
¨ä½ã®ã¹ã«ã¼ããããåä¸ãã¾ãã
ç¹ã«åçãªã½ã¼ã¹å²ãå½ã¦(DRA)ã使ç¨ããã¯ã©ã¹ã¿ã¼ã§å¹æçã§ãã
ã¾ããç¹å®ã®ãã©ã°ã¤ã³ãå®å
¨ã¨å¤æããå ´åã«ã¯ãé常ã®ããã¯ãªãé
å»¶ãã¹ãããã§ããããã«ãªããç¹å®ã®ã±ã¼ã¹ã§ã¹ã±ã¸ã¥ã¼ãªã³ã°ãããé«éåããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/4247">KEP #4247</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="é åºä»ããããnamespaceåé¤">é åºä»ããããNamespaceåé¤</h3>
<p>ã©ã³ãã ã«è¿ããªã½ã¼ã¹åé¤é åºã¯ãã»ãã¥ãªãã£ã®ã£ãããæå³ããªãåä½ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
ä¾ãã°ãNetworkPolicyãåé¤ãããå¾ãPodãæ®ãç¶ããã¨ãã£ãåé¡ã§ãã<br>
ãã®æ¹åã«ãããKubernetes<a href="https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/namespaces/">åå空é</a>ã«å¯¾ãã¦ãããæ§é åãããåé¤ããã»ã¹ãå°å
¥ãããå®å
¨ã§æ±ºå®çãªãªã½ã¼ã¹åé¤ãä¿è¨¼ããã¾ãã
è«ççãªä¾åé¢ä¿ãã»ãã¥ãªãã£ã®ä¾åé¢ä¿ãå°éããåé¤é åºãå¼·å¶ãããã¨ã§ãPodãä»ã®ãªã½ã¼ã¹ãããå
ã«åé¤ããããã¨ãä¿è¨¼ããã¾ãã<br>
ãã®æ©è½ã¯Kubernetes v1.33ã§å°å
¥ãããv1.34ã§GAã«ææ ¼ãã¾ããã
ãã®ææ ¼ã«ããã<a href="https://github.com/advisories/GHSA-r56h-j38w-hrqq">CVE-2024-7598</a>ã§èª¬æããã¦ããèå¼±æ§ãå«ããéæ±ºå®çãªåé¤ã«ãããªã¹ã¯ã軽æ¸ããã»ãã¥ãªãã£ã¨ä¿¡é ¼æ§ãåä¸ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/5080">KEP #5080</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="list-å¿çã®ã¹ããªã¼ãã³ã°"><strong>list</strong> å¿çã®ã¹ããªã¼ãã³ã°</h3>
<p>Kubernetesã§å¤§è¦æ¨¡ãª<strong>list</strong>å¿çãå¦çãããã¨ã¯ãããã¾ã§å¤§ããªã¹ã±ã¼ã©ããªãã£ã®èª²é¡ã§ããã
ã¯ã©ã¤ã¢ã³ããæ°åã®Podãã«ã¹ã¿ã ãªã½ã¼ã¹ãªã©ã®å¤§è¦æ¨¡ãªãªã½ã¼ã¹ãªã¹ããè¦æ±ããå ´åãAPIãµã¼ãã¼ã¯éä¿¡åã«ãªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³å
¨ä½ãåä¸ã®å¤§ããªã¡ã¢ãªãããã¡ã«ã·ãªã¢ã©ã¤ãºããå¿
è¦ãããã¾ããã
ãã®ããã»ã¹ã¯å¤§éã®ã¡ã¢ãªè² è·ãçã¿åºããããã©ã¼ãã³ã¹ã®ä½ä¸ãå¼ãèµ·ãããã¯ã©ã¹ã¿ã¼å
¨ä½ã®å®å®æ§ã«å½±é¿ãä¸ããå¯è½æ§ãããã¾ããã<br>
ãã®å¶éã«å¯¾å¦ãããããã³ã¬ã¯ã·ã§ã³( <strong>list</strong> å¿ç)ã®ã¹ããªã¼ãã³ã°ã¨ã³ã³ã¼ãã£ã³ã°ã¡ã«ããºã ãå°å
¥ããã¾ããã
JSONããã³Kubernetes Protobufå¿çå½¢å¼ã§ã¯ããã®ã¹ããªã¼ãã³ã°ã¡ã«ããºã ãèªåçã«æå¹ã«ãªããé¢é£ãããã£ã¼ãã£ã¼ã²ã¼ãã¯GAã¨ãªã£ã¦ãã¾ãã
ãã®æ¹æ³ã®ä¸»ãªå©ç¹ã¯ãAPIãµã¼ãã¼ã§ã®å¤§è¦æ¨¡ãªã¡ã¢ãªå²ãå½ã¦ãåé¿ããã¡ã¢ãªãããããªã³ããããå°ããäºæ¸¬å¯è½ã«ãããã¨ã§ãã
ãã®çµæãç¹ã«å¤§è¦æ¨¡ãªãªã½ã¼ã¹ãªã¹ãã®é »ç¹ãªãªã¯ã¨ã¹ããä¸è¬çãªå¤§è¦æ¨¡ç°å¢ã«ããã¦ãã¯ã©ã¹ã¿ã¼ã®å復åã¨ããã©ã¼ãã³ã¹ãåä¸ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/5116">KEP #5116</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="å復åã®ããwatchãã£ãã·ã¥ã®åæå">å復åã®ããWatchãã£ãã·ã¥ã®åæå</h3>
<p>Watchãã£ãã·ã¥ã¯ãetcdã«ä¿åããã¦ããã¯ã©ã¹ã¿ã¼ç¶æ
ã®çµææ´åæ§ãä¿ã¤ãã£ãã·ã¥ã¬ã¤ã¤ã¼ã§ã<code>kube-apiserver</code>å
é¨ã§åä½ãã¾ãã
ããã¾ã§ã<code>kube-apiserver</code>ã®èµ·åæã«Watchãã£ãã·ã¥ãã¾ã åæåããã¦ããªãå ´åããWatchãã£ãã·ã¥ã®ååæåãå¿
è¦ãªå ´åã«åé¡ãçºçãããã¨ãããã¾ããã</p>
<p>ãããã®åé¡ã«å¯¾å¦ãããããWatchãã£ãã·ã¥ã®åæåããã»ã¹ãé害ã«å¯¾ãã¦ããå復åã®ãããã®ã«æ¹åãããã³ã³ããã¼ã«ãã¬ã¼ã³ã®å
ç¢æ§ãåä¸ããã³ã³ããã¼ã©ã¼ãã¯ã©ã¤ã¢ã³ãã確å®ã«Watchã確ç«ã§ããããã«ãªãã¾ããããã®æ¹åã¯v1.31ã§ãã¼ã¿ã¨ãã¦å°å
¥ãããç¾å¨ã¯GAã¨ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã¨SIG Scalabilityã主å°ãã<a href="https://kep.k8s.io/4568">KEP #4568</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="dnsæ¤ç´¢ãã¹æ¤è¨¼ã®ç·©å">DNSæ¤ç´¢ãã¹æ¤è¨¼ã®ç·©å</h3>
<p>ããã¾ã§ãPodã®DNS <code>search</code>ãã¹ã«å¯¾ãã峿 ¼ãªæ¤è¨¼ã¯ãè¤éãªãããã¯ã¼ã¯ç°å¢ãã¬ã¬ã·ã¼ãããã¯ã¼ã¯ç°å¢ã§ã®çµ±åã«ããã¦åé¡ãçºçãããã¨ãããããã¾ããã
ãã®å¶éã«ãããçµç¹ã®ã¤ã³ãã©ã¹ãã©ã¯ãã£ã«å¿
è¦ãªè¨å®ããããã¯ããã管çè
ã¯å°é£ãªåé¿çã®å®è£
ãå¼·ãããã¦ãã¾ããã<br>
ãã®åé¡ã«å¯¾å¦ãããããç·©åãããDNSæ¤è¨¼ãv1.32ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããv1.34ã§GAã«ææ ¼ãã¾ããã
ä¸è¬çãªã¦ã¼ã¹ã±ã¼ã¹ã¨ãã¦ãPodãå
é¨ã®Kubernetesãµã¼ãã¹ã¨å¤é¨ãã¡ã¤ã³ã®ä¸¡æ¹ã¨éä¿¡ããå¿
è¦ãããå ´åãããã¾ãã
Podã®<code>.spec.dnsConfig</code>ã®<code>searches</code>ãªã¹ãã®æåã®ã¨ã³ããªã«åä¸ã®ããã(<code>.</code>)ãè¨å®ãããã¨ã§ãã·ã¹ãã ã®ãªã¾ã«ãã¼ãã¯ã©ã¹ã¿ã¼ã®å
鍿¤ç´¢ãã¡ã¤ã³ãå¤é¨ã¯ã¨ãªã«è¿½å ãããã¨ãé²ãã¾ãã
ããã«ãããå¤é¨ãã¹ãåã«å¯¾ããä¸è¦ãªå
é¨DNSãµã¼ãã¼ã¸ã®DNSãªã¯ã¨ã¹ãã®çæãåé¿ããå¹çãåä¸ãããæ½å¨çãªåå解決ã¨ã©ã¼ãé²ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Networkã主å°ãã<a href="https://kep.k8s.io/4427">KEP #4427</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="windows-kube-proxy-ã«ãããdirect-service-return-dsr-ã®ãµãã¼ã">Windows <code>kube-proxy</code>ã«ãããDirect Service Return(DSR)ã®ãµãã¼ã</h3>
<p>DSRã¯ããã¼ããã©ã³ãµã¼ãçµç±ãããªã¿ã¼ã³ãã©ãã£ãã¯ããã¼ããã©ã³ãµã¼ããã¤ãã¹ãã¦ã¯ã©ã¤ã¢ã³ãã«ç´æ¥å¿çã§ããããã«ãããã¨ã§ãããã©ã¼ãã³ã¹ãæé©åãã¾ãã
ããã«ããããã¼ããã©ã³ãµã¼ã®è² è·ã軽æ¸ãããå
¨ä½çãªã¬ã¤ãã³ã·ã¼ãæ¹åããã¾ãã
Windowsä¸ã®DSRã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://techcommunity.microsoft.com/blog/networkingblog/direct-server-return-dsr-in-a-nutshell/693710">Direct Server Return (DSR) in a nutshell</a>ãã覧ãã ããã<br>
v1.14ã§æåã«å°å
¥ããããã®æ©è½ã¯ãv1.34ã§GAã«ææ ¼ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Windowsã主å°ãã<a href="https://kep.k8s.io/5100">KEP #5100</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã³ã³ããã©ã¤ããµã¤ã¯ã«ããã¯ã®sleepã¢ã¯ã·ã§ã³">ã³ã³ããã©ã¤ããµã¤ã¯ã«ããã¯ã®Sleepã¢ã¯ã·ã§ã³</h3>
<p>ã³ã³ããã®PreStopããã³PostStartã©ã¤ããµã¤ã¯ã«ããã¯ã«Sleepã¢ã¯ã·ã§ã³ãå°å
¥ãããå®å
¨ãªçµäºã®ç®¡çã¨ã³ã³ããã©ã¤ããµã¤ã¯ã«ç®¡çå
¨ä½ãæ¹åããç°¡åãªæ¹æ³ãæä¾ããã¾ããã<br>
Sleepã¢ã¯ã·ã§ã³ã«ãããã³ã³ããã¯èµ·åå¾ã¾ãã¯çµäºåã«æå®ãããæéã ã䏿忢ã§ãã¾ãã
è² ã®å¤ã¾ãã¯ã¼ãã®ã¹ãªã¼ãæéã使ç¨ããã¨ãããã«æ»ããçµæçã«ä½ãå®è¡ããªã(no-op)åä½ã¨ãªãã¾ãã<br>
Sleepã¢ã¯ã·ã§ã³ã¯ãKubernetes v1.29ã§å°å
¥ãããv1.32ã§ã¼ãå¤ã®ãµãã¼ãã追å ããã¾ããã
両æ¹ã®æ©è½ãv1.34ã§GAã«ææ ¼ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/3960">KEP #3960</a>ããã³<a href="https://kep.k8s.io/4818">KEP #4818</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="linuxãã¼ãã§ã®ã¹ã¯ããæ©è½ã®ãµãã¼ã">Linuxãã¼ãã§ã®ã¹ã¯ããæ©è½ã®ãµãã¼ã</h3>
<p>ããã¾ã§ãKubernetesã§ã¹ã¯ããæ©è½ãµãã¼ãããªãã£ããããã¡ã¢ãªä¸è¶³ã«é¥ã£ããã¼ãã§ã¯ããã»ã¹ãçªç¶çµäºãããããå¾ããã¯ã¼ã¯ãã¼ããä¸å®å®ã«ãªããã¨ãããããã¾ããã
ãã®åé¡ã¯ç¹ã«ã大容éã ãã¢ã¯ã»ã¹é »åº¦ã®ä½ãã¡ã¢ãªãããããªã³ããæã¤ã¢ããªã±ã¼ã·ã§ã³ã«å½±é¿ããããæè»ãªãªã½ã¼ã¹ç®¡çã妨ãã¦ãã¾ããã</p>
<p>ãã®åé¡ã«å¯¾å¦ããããããã¼ããã¨ã«è¨å®å¯è½ãªã¹ã¯ããæ©è½ã®ãµãã¼ããv1.22ã§å°å
¥ããã¾ããã
ã¢ã«ãã¡çã¨ãã¼ã¿çã®æ®µéãçµã¦ãv1.34ã§GAã«ææ ¼ãã¾ããã
主è¦ãªã¢ã¼ãã§ãã<code>LimitedSwap</code>ã§ã¯ãPodãæ¢åã®ã¡ã¢ãªå¶éå
ã§ã¹ã¯ããã使ç¨ã§ããåé¡ã«å¯¾ããç´æ¥çãªè§£æ±ºçãæä¾ãã¾ãã
ããã©ã«ãã§ã¯ã<code>kubelet</code>ã¯<code>NoSwap</code>ã¢ã¼ãã§è¨å®ããã¦ãããKubernetesã¯ã¼ã¯ãã¼ãã¯ã¹ã¯ããã使ç¨ã§ãã¾ããã</p>
<p>ãã®æ©è½ã«ãããã¯ã¼ã¯ãã¼ãã®å®å®æ§ãåä¸ãããªã½ã¼ã¹ä½¿ç¨çãããå¹ççã«ãªãã¾ãã
ãªã½ã¼ã¹ã«å¶ç´ã®ããç°å¢ã§ããã夿§ãªã¢ããªã±ã¼ã·ã§ã³ããµãã¼ãã§ããããã«ãªãã¾ããã管çè
ã¯ã¹ã¯ãã使ç¨ã«ããæ½å¨çãªããã©ã¼ãã³ã¹ã¸ã®å½±é¿ãèæ
®ããå¿
è¦ãããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/2400">KEP #2400</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ç°å¢å¤æ°ã§ã®ç¹æ®æåã®è¨±å¯">ç°å¢å¤æ°ã§ã®ç¹æ®æåã®è¨±å¯</h3>
<p>Kubernetesã®ç°å¢å¤æ°æ¤è¨¼ã«ã¼ã«ãç·©åããã<code>=</code>ãé¤ãã»ã¼ãã¹ã¦ã®å°åå¯è½ãªASCIIæåã夿°åã§ä½¿ç¨ã§ããããã«ãªãã¾ããã
ãã®å¤æ´ã«ããã鿍æºçãªæåã夿°åã«å¿
è¦ã¨ããã¯ã¼ã¯ãã¼ãã®ã·ããªãªããµãã¼ããã¾ãã
ä¾ãã°ã.NET Coreã®ãããªãã¬ã¼ã ã¯ã¼ã¯ã§ã¯ããã¹ããããè¨å®ãã¼ã表ãããã«<code>:</code>ã使ç¨ãã¾ãã</p>
<p>ç·©åãããæ¤è¨¼ã¯ãPod仿§ã§ç´æ¥å®ç¾©ãããç°å¢å¤æ°ã ãã§ãªããConfigMapãSecretã¸ã®<code>envFrom</code>åç
§ã使ç¨ãã¦æ³¨å
¥ãããç°å¢å¤æ°ã«ãé©ç¨ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4369">KEP #4369</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="taint管çã®nodeã©ã¤ããµã¤ã¯ã«ããã®åé¢">Taint管çã®Nodeã©ã¤ããµã¤ã¯ã«ããã®åé¢</h3>
<p>ããã¾ã§ã<code>TaintManager</code>ããã¼ãã®ç¶æ
(NotReadyãUnreachableãªã©)ã«åºã¥ãã¦NoScheduleãNoExecute taintãé©ç¨ãããã¸ãã¯ã¯ããã¼ãã®ã©ã¤ããµã¤ã¯ã«ã³ã³ããã¼ã©ã¼ã¨å¯æ¥ã«çµåãã¦ãã¾ããã
ãã®å¯çµåã«ãããã³ã¼ãã®ä¿å®æ§ã¨ãã¹ããå°é£ã«ãªããtaintãã¼ã¹ã®éé¿ã¡ã«ããºã ã®æè»æ§ãå¶éããã¦ãã¾ããã
ãã®KEPã§ã¯ã<code>TaintManager</code>ãKubernetesã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼å
ã®ç¬ç«ããã³ã³ããã¼ã©ã¼ã¨ãã¦ãªãã¡ã¯ã¿ãªã³ã°ãã¾ãã
ããã¯ã³ã¼ãã®ã¢ã¸ã¥ã¼ã«æ§ã¨ä¿å®æ§ãåä¸ãããããã®å
é¨çãªã¢ã¼ããã¯ãã£ã®æ¹åã§ãã
ãã®å¤æ´ã«ãããtaintãã¼ã¹ã®éé¿ãã¸ãã¯ãç¬ç«ãã¦ãã¹ãããçºå±ããããã¨ãã§ããããã«ãªãã¾ãããtaintã®ä½¿ç¨æ¹æ³ã«å¯¾ããã¦ã¼ã¶ã¼åãã®ç´æ¥çãªå½±é¿ã¯ããã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã¨SIG Nodeã主å°ãã<a href="https://kep.k8s.io/3902">KEP #3902</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="ãã¼ã¿ã®æ°æ©è½">ãã¼ã¿ã®æ°æ©è½</h2>
<p><em>ããã¯v1.34ã®ãªãªã¼ã¹å¾ã«ãã¼ã¿ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="podã¬ãã«ã®ãªã½ã¼ã¹è¦æ±ã¨å¶é">Podã¬ãã«ã®ãªã½ã¼ã¹è¦æ±ã¨å¶é</h3>
<p>è¤æ°ã®ã³ã³ãããæã¤Podã®ãªã½ã¼ã¹è¦æ±ãå®ç¾©ãããã¨ã¯ãããã¾ã§å°é£ã§ããã
è¦æ±ã¨å¶éã¯ã³ã³ãããã¨ã«ããè¨å®ã§ããªãã£ããããéçºè
ã¯åã³ã³ããã«éå°ãªãªã½ã¼ã¹ãå²ãå½ã¦ãããå¿
è¦ãªãªã½ã¼ã¹ç·éãç´°ããåå²ããå¿
è¦ãããã¾ããã
ããã«ããè¨å®ãè¤éã«ãªããéå¹ççãªãªã½ã¼ã¹å²ãå½ã¦ã«ã¤ãªãããã¨ãããããã¾ããã
ãã®åé¡ãç°¡ç´ åãããããPodã¬ãã«ã§ãªã½ã¼ã¹è¦æ±ã¨å¶éãæå®ã§ããæ©è½ãå°å
¥ããã¾ããã
ããã«ãããéçºè
ã¯Podå
¨ä½ã®ãªã½ã¼ã¹äºç®ãå®ç¾©ãããããæ§æããã³ã³ããéã§å
±æã§ãã¾ãã
ãã®æ©è½ã¯v1.32ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããv1.34ã§ãã¼ã¿ã«ææ ¼ããHPAãPodã¬ãã«ã®ãªã½ã¼ã¹æå®ããµãã¼ãããããã«ãªãã¾ããã
主ãªå©ç¹ã¯ããã«ãã³ã³ããPodã®ãªã½ã¼ã¹ç®¡çãããç´æçã§ç°¡åã«ãªããã¨ã§ãã
ãã¹ã¦ã®ã³ã³ããã使ç¨ãããªã½ã¼ã¹ã®åè¨ãPodã®å®ç¾©ãããå¶éãè¶
ããªããã¨ãä¿è¨¼ããã¾ãã
ããã«ããããªã½ã¼ã¹è¨ç»ã®æ¹åãããæ£ç¢ºãªã¹ã±ã¸ã¥ã¼ãªã³ã°ãããã¦ã¯ã©ã¹ã¿ã¼ãªã½ã¼ã¹ã®å¹ççãªå©ç¨ãå®ç¾ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã¨SIG Autoscalingã主å°ãã<a href="https://kep.k8s.io/2837">KEP #2837</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubectl-åãã¦ã¼ã¶ã¼è¨å®ã®ããã®-kuberc-ãã¡ã¤ã«"><code>kubectl</code>åãã¦ã¼ã¶ã¼è¨å®ã®ããã®<code>.kuberc</code>ãã¡ã¤ã«</h3>
<p><code>.kuberc</code>è¨å®ãã¡ã¤ã«ã«ãããããã©ã«ããªãã·ã§ã³ãã³ãã³ãã¨ã¤ãªã¢ã¹ãªã©ã<code>kubectl</code>ã®è¨å®ãå®ç¾©ã§ãã¾ãã
kubeconfigãã¡ã¤ã«ã¨ã¯ç°ãªãã<code>.kuberc</code>è¨å®ãã¡ã¤ã«ã«ã¯ã¯ã©ã¹ã¿ã¼ã®è©³ç´°ãã¦ã¼ã¶ã¼åããã¹ã¯ã¼ãã¯å«ã¾ãã¾ããã<br>
ãã®æ©è½ã¯ã¢ã«ãã¡ã¨ãã¦v1.33ã§å°å
¥ãããç°å¢å¤æ°<code>KUBECTL_KUBERC</code>ã§æå¹ã«ãããã¨ã§å©ç¨ã§ãã¾ãã
v1.34ã§ãã¼ã¿ã«ææ ¼ããããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG CLIã主å°ãã<a href="https://kep.k8s.io/3104">KEP #3104</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="å¤é¨serviceaccountã®ãã¼ã¯ã³ç½²å">å¤é¨ServiceAccountã®ãã¼ã¯ã³ç½²å</h3>
<p>ããã¾ã§ãKubernetesã¯ServiceAccountãã¼ã¯ã³ãã<code>kube-apiserver</code>ã®èµ·åæã«ãã£ã¹ã¯ããèªã¿è¾¼ã¾ããéçãªç½²åéµã使ç¨ãã¦ç®¡çãã¦ãã¾ããã
ãã®æ©è½ã§ã¯ãããã»ã¹å¤ç½²åã®ããã®<code>ExternalJWTSigner</code> gRPCãµã¼ãã¹ãå°å
¥ããã¾ãã
ããã«ãããKubernetesãã£ã¹ããªãã¥ã¼ã·ã§ã³ã¯ãéçãªãã£ã¹ã¯ãã¼ã¹ã®éµã®ä»£ããã«å¤é¨éµç®¡çã½ãªã¥ã¼ã·ã§ã³(HSMãã¯ã©ã¦ãKMSãªã©)ã使ç¨ãã¦ServiceAccountãã¼ã¯ã³ã®ç½²åãè¡ããããã«ãªãã¾ãã</p>
<p>v1.32ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ããããã®å¤é¨JWTã®ç½²åæ©è½ã¯ãv1.34ã§ãã¼ã¿ã«é²ã¿ãããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/740">KEP #740</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãã¼ã¿çã®draæ©è½">ãã¼ã¿çã®DRAæ©è½</h3>
<h4 id="ã»ãã¥ã¢ãªãªã½ã¼ã¹ã¢ãã¿ãªã³ã°ã®ããã®ç®¡çè
ã¢ã¯ã»ã¹">ã»ãã¥ã¢ãªãªã½ã¼ã¹ã¢ãã¿ãªã³ã°ã®ããã®ç®¡çè
ã¢ã¯ã»ã¹</h4>
<p>DRAã¯ãResourceClaimã¾ãã¯ResourceClaimTemplateã®<code>adminAccess</code>ãã£ã¼ã«ããéãã¦ãå¶å¾¡ããã管çè
ã¢ã¯ã»ã¹ããµãã¼ããã¾ãã
ããã«ãããã¯ã©ã¹ã¿ã¼éç¨è
ã¯ä»ã®ã¦ã¼ã¶ã¼ã使ç¨ä¸ã®ããã¤ã¹ã«ã¢ãã¿ãªã³ã°ã診æã®ããã«ã¢ã¯ã»ã¹ã§ãã¾ãã
ãã®ç¹æ¨©ã¢ã¼ãã¯ã<code>resource.k8s.io/admin-access: "true"</code>ã§ã©ãã«ä»ããããåå空éã§ãã®ãããªãªãã¸ã§ã¯ãã使ããæ¨©éãæã¤ã¦ã¼ã¶ã¼ã«éå®ããã¾ãã
ããã«ãããé常ã®ã¯ã¼ã¯ãã¼ãã¯å½±é¿ãåãã¾ããã
v1.34ã§ãã¼ã¿ã«ææ ¼ãããã®æ©è½ã¯ãåå空éãã¼ã¹ã®èªå¯ãã§ãã¯ãéãã¦ã¯ã¼ã¯ãã¼ãã®åé¢ãä¿ã¡ãªãããã»ãã¥ã¢ãªå
é¨ç£è¦æ©è½ãæä¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã¨SIG Authã主å°ãã<a href="https://kep.k8s.io/5018">KEP #5018</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="resourceclaimã¨resourceclaimtemplateã«ãããåªå
é ä½ä»ãã®ä»£æ¿æ¡">ResourceClaimã¨ResourceClaimTemplateã«ãããåªå
é ä½ä»ãã®ä»£æ¿æ¡</h4>
<p>ã¯ã¼ã¯ãã¼ãã¯åä¸ã®é«æ§è½GPUã§æé©ã«åä½ããããããã¾ãããã2ã¤ã®ä¸ç´GPUã§ãåä½å¯è½ãªå ´åãããã¾ãã<br>
ãã£ã¼ãã£ã¼ã²ã¼ãã®<code>DRAPrioritizedList</code>(ç¾å¨ã¯ããã©ã«ãã§æå¹)ã«ãããResourceClaimã¨ResourceClaimTemplateã«æ°ãã<code>firstAvailable</code>ãã£ã¼ã«ãã追å ããã¾ãã
ãã®ãã£ã¼ã«ãã¯é åºä»ããªã¹ãã§ããªã¯ã¨ã¹ããæ§ã
ãªæ¹æ³ã§æºããããå¯è½æ§ããããã¨ãæå®ã§ãã¾ãã
ç¹å®ã®ãã¼ãã¦ã§ã¢ãå©ç¨ã§ããªãå ´åã¯ä½ãå²ãå½ã¦ãªãã¨ãã鏿ãå«ã¾ãã¾ãã
ã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãªã¹ãå
ã®ä»£æ¿æ¡ãé çªã«æºãããã¨ãããããã¯ã¼ã¯ãã¼ãã«ã¯ã¯ã©ã¹ã¿ã¼ã§å©ç¨å¯è½ãªæé©ãªããã¤ã¹ã»ãããå²ãå½ã¦ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/4816">KEP #4816</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="kubelet-ã«ããå²ãå½ã¦æ¸ã¿draãªã½ã¼ã¹ã®å ±å"><code>kubelet</code>ã«ããå²ãå½ã¦æ¸ã¿DRAãªã½ã¼ã¹ã®å ±å</h4>
<p><code>kubelet</code>ã®APIãæ´æ°ãããDRAãéãã¦å²ãå½ã¦ãããPodãªã½ã¼ã¹ãå ±åã§ããããã«ãªãã¾ããã
ããã«ããããã¼ãã®ã¢ãã¿ãªã³ã°ã¨ã¼ã¸ã§ã³ãã¯ãåãã¼ãã§Podã«å²ãå½ã¦ããã¦ããDRAãªã½ã¼ã¹ãæ¤åºã§ãã¾ãã
ããã«ããã¼ãã³ã³ãã¼ãã³ãã¯PodResourcesAPIã使ç¨ãã¦ãã®DRAæ
å ±ãæ´»ç¨ããæ°ããæ©è½ãçµ±åãéçºã§ããããã«ãªãã¾ãã<br>
Kubernetes v1.34以éããã®æ©è½ã¯ããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/3695">KEP #3695</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kube-scheduler-ã®éããããã³ã°apiã³ã¼ã«"><code>kube-scheduler</code>ã®éããããã³ã°APIã³ã¼ã«</h3>
<p><code>kube-scheduler</code>ã¯ã¹ã±ã¸ã¥ã¼ãªã³ã°ãµã¤ã¯ã«ä¸ã«ããããã³ã°APIã³ã¼ã«ãè¡ããããã©ã¼ãã³ã¹ã®ããã«ããã¯ãçã¿åºãã¦ãã¾ããã
ãã®æ©è½ã§ã¯ããªã¯ã¨ã¹ãéè¤æé¤ãåããåªå
度ä»ããã¥ã¼ã·ã¹ãã ãéããéåæAPIå¦çãå°å
¥ããã¾ãã
ããã«ãããã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ããã¯ã°ã©ã¦ã³ãã§APIæä½ãå®äºããéããPodã®å¦çãç¶ç¶ã§ãã¾ãã
主ãªå©ç¹ã¨ãã¦ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã¬ã¤ãã³ã·ã¼ã®åæ¸ãAPIé
å»¶æã®ã¹ã±ã¸ã¥ã¼ã©ã¼ã¹ã¬ããã®æ¯æ¸é²æ¢ãã¹ã±ã¸ã¥ã¼ã«ä¸å¯è½ãªPodã®å³åº§ã®åè©¦è¡æ©è½ãããã¾ãã
ãã®å®è£
ã¯å¾æ¹äºææ§ãç¶æããä¿çä¸ã®APIæä½ãç£è¦ããããã®ã¡ããªã¯ã¹ã追å ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/5229">KEP #5229</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="mutating-admission-policy">Mutating Admission Policy</h3>
<p><a href="https://kubernetes.io/docs/reference/access-authn-authz/mutating-admission-policy/">MutatingAdmissionPolicy</a>ã¯ãMutating Admission Webhookã«å¯¾ãã宣è¨çã§ããã»ã¹å
ã®ä»£æ¿ææ®µãæä¾ãã¾ãã
ãã®æ©è½ã¯CELã®ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹åã¨JSONã®ãããæ¦ç¥ããServer-Side Applyã®ãã¼ã¸ã¢ã«ã´ãªãºã ã¨çµã¿åããã¦æ´»ç¨ãã¾ãã<br>
ããã«ããã管çè
ãAPIãµã¼ãã¼å
ã§ç´æ¥Mutationã«ã¼ã«ãå®ç¾©ã§ããããã«ãªããã¢ãããã·ã§ã³å¶å¾¡ã大å¹
ã«ç°¡ç´ åããã¾ãã<br>
v1.32ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããMutating Admission Policyã¯ãv1.34ã§ãã¼ã¿ã«ææ ¼ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/3962">KEP #3962</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¹ãããã·ã§ããå¯è½ãªapiãµã¼ãã¼ã®ãã£ãã·ã¥">ã¹ãããã·ã§ããå¯è½ãªAPIãµã¼ãã¼ã®ãã£ãã·ã¥</h3>
<p><code>kube-apiserver</code>ã®ãã£ãã·ã¥ã¡ã«ããºã (Watchãã£ãã·ã¥)ã¯ãææ°ã®è¦³æ¸¬ç¶æ
ã«å¯¾ãããªã¯ã¨ã¹ããå¹ççã«å¦çãã¾ãã
ãããã以åã®ç¶æ
ã«å¯¾ãã <strong>list</strong> ãªã¯ã¨ã¹ã(ãã¼ã¸ãã¼ã·ã§ã³ã<code>resourceVersion</code>ã®æå®ãªã©)ã¯ãå¤ãã®å ´åãã®ãã£ãã·ã¥ããã¤ãã¹ããetcdããç´æ¥æä¾ããã¾ãã
ãã®etcdã¸ã®ç´æ¥ã¢ã¯ã»ã¹ã¯ãããã©ã¼ãã³ã¹ã³ã¹ãã大å¹
ã«å¢å ãããç¹ã«å¤§è¦æ¨¡ãªãªã½ã¼ã¹ã§ã¯å¤§éã®ãã¼ã¿è»¢éã«ããã¡ã¢ãªå§è¿«ããå®å®æ§ã®åé¡ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã<br>
<code>ListFromCacheSnapshot</code>ãã£ã¼ãã£ã¼ã²ã¼ããããã©ã«ãã§æå¹ã«ãªããã¨ã§ã<code>kube-apiserver</code>ã¯è¦æ±ããã<code>resourceVersion</code>ããå¤ãã¹ãããã·ã§ãããå©ç¨å¯è½ãªå ´åãããããå¿çãæä¾ãããã¨ãã¾ãã
<code>kube-apiserver</code>ã¯æåã¹ãããã·ã§ããããªãç¶æ
ã§éå§ããwatchã¤ãã³ããã¨ã«æ°ããã¹ãããã·ã§ããã使ãã¾ãã
etcdãã³ã³ãã¯ã·ã§ã³ããããã¨ãæ¤åºãããã75ç§ããå¤ãã¤ãã³ãã§ãã£ãã·ã¥ããã£ã±ãã«ãªãã¾ã§ãã¹ãããã·ã§ãããä¿æãã¾ãã
æå®ããã<code>resourceVersion</code>ãå©ç¨ã§ããªãå ´åããµã¼ãã¼ã¯etcdã«ãã©ã¼ã«ããã¯ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/4988">KEP #4988</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubernetesãã¤ãã£ãåã®å®£è¨çæ¤è¨¼ã®ããã®ãã¼ã«">Kubernetesãã¤ãã£ãåã®å®£è¨çæ¤è¨¼ã®ããã®ãã¼ã«</h3>
<p>ãã®ãªãªã¼ã¹ä»¥åã¯ãKubernetesã«çµã¿è¾¼ã¾ããAPIã®æ¤è¨¼ã«ã¼ã«ã¯ãã¹ã¦æä½æ¥ã§æ¸ããã¦ãããã¡ã³ããã¼ã«ã¨ã£ã¦çºè¦ãçè§£ãæ¹åããã¹ããå°é£ã§ããã
APIã«é©ç¨ãããå¯è½æ§ã®ãããã¹ã¦ã®æ¤è¨¼ã«ã¼ã«ãè¦ã¤ããçµ±ä¸çãªæ¹æ³ãåå¨ãã¾ããã§ããã
<em>宣è¨çæ¤è¨¼</em> ã«ãããAPIéçºãä¿å®ãã¬ãã¥ã¼ã容æã«ãªããããè¯ããã¼ã«ã¨ããã¥ã¡ã³ãã¼ã·ã§ã³ã®ããã®ããã°ã©ã çãªæ¤æ»ãå¯è½ã«ãªãã¾ãã
Kubernetesã©ã¤ãã©ãªã使ç¨ãã¦ç¬èªã®ã³ã¼ã(ã³ã³ããã¼ã©ã¼ãªã©)ãæ¸ãéçºè
ã«ã¨ã£ã¦ããè¤éãªæ¤è¨¼é¢æ°ã§ã¯ãªãIDLã¿ã°ãéãã¦æ°ãããã£ã¼ã«ãã追å ã§ããããã使¥ãç°¡ç´ åããã¾ãã
ãã®å¤æ´ã¯æ¤è¨¼ç¨ã®ãã¤ã©ã¼ãã¬ã¼ã(å®åã³ã¼ã)ãèªååãã¦API使ãé«éåãããã¼ã¸ã§ã³ç®¡çãããåã§æ¤è¨¼ãå®è¡ãããã¨ã§ããé¢é£æ§ã®é«ãã¨ã©ã¼ã¡ãã»ã¼ã¸ãæä¾ãã¾ãã<br>
ãã®æ©è½å¼·å(v1.33ã§ãã¼ã¿ã«ææ ¼ããv1.34ã§ããã¼ã¿ã¨ãã¦ç¶ç¶)ã¯ããã¤ãã£ãKubernetesåã«CELãã¼ã¹ã®æ¤è¨¼ã«ã¼ã«ããããããåå®ç¾©ã«ç´æ¥ãããç´°ãã宣è¨çãªæ¤è¨¼ãå®ç¾©ã§ããããã«ãã¾ãã
ããã«ããAPIã®ä¸è²«æ§ã¨éçºè
ä½é¨ãåä¸ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/5073">KEP #5073</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="list-ãªã¯ã¨ã¹ãç¨ã®ã¹ããªã¼ãã³ã°ã¤ã³ãã©ã¼ãã¼"><strong>list</strong> ãªã¯ã¨ã¹ãç¨ã®ã¹ããªã¼ãã³ã°ã¤ã³ãã©ã¼ãã¼</h3>
<p>v1.32以éãã¼ã¿ã¨ãªã£ã¦ããã¹ããªã¼ãã³ã°ã¤ã³ãã©ã¼ãã¼æ©è½ã¯ãv1.34ã§ãããªããã¼ã¿ã®æ¹åããã¾ããã
ãã®æ©è½ã«ããã<strong>list</strong> ãªã¯ã¨ã¹ãã¯etcdããç´æ¥ãã¼ã¸åãããçµæãçµã¿ç«ã¦ãã®ã§ã¯ãªããAPIãµã¼ãã¼ã®Watchãã£ãã·ã¥ããç¶ç¶çãªãªãã¸ã§ã¯ãã®ã¹ããªã¼ã ã¨ãã¦ãã¼ã¿ãè¿ããã¨ãã§ãã¾ãã
<strong>Watch</strong>æä½ã«ä½¿ç¨ãããã®ã¨åãã¡ã«ããºã ãåå©ç¨ãããã¨ã§ãAPIãµã¼ãã¼ã¯å®å®ããã¡ã¢ãªä½¿ç¨éãä¿ã¡ãªããå¤§è¦æ¨¡ãªãã¼ã¿ã»ãããæä¾ã§ããå®å®æ§ã«å½±é¿ãä¸ããå²ãå½ã¦ã®ã¹ãã¤ã¯ãåé¿ã§ãã¾ãã</p>
<p>ãã®ãªãªã¼ã¹ã§ã¯ã<code>kube-apiserver</code>ã¨<code>kube-controller-manager</code>ã®ä¸¡æ¹ãããã©ã«ãã§æ°ãã<code>WatchList</code>ã¡ã«ããºã ãæ´»ç¨ãã¾ãã
<code>kube-apiserver</code>ã§ã¯listãªã¯ã¨ã¹ããããå¹ççã«ã¹ããªã¼ãã³ã°ããã<code>kube-controller-manager</code>ã¯ã¤ã³ãã©ã¼ãã¼ãæ±ãããã®ããã¡ã¢ãªå¹ççã§äºæ¸¬å¯è½ãªæ¹æ³ã®æ©æµãåãã¾ãã
ãããã®æ¹åã«ãããå¤§è¦æ¨¡ãªlistæä½ä¸ã®ã¡ã¢ãªå§è¿«ã忏ãããæç¶çãªè² è·ä¸ã§ã®ä¿¡é ¼æ§ãåä¸ããlistã¹ããªã¼ãã³ã°ãããäºæ¸¬å¯è½ã§å¹ççã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã¨SIG Scalabilityã主å°ãã<a href="https://kep.k8s.io/3157">KEP #3157</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="windowsãã¼ãã®å®å
¨ãªçµäº">Windowsãã¼ãã®å®å
¨ãªçµäº</h3>
<p>Windowsãã¼ãä¸ã®<code>kubelet</code>ãã·ã¹ãã ã®ã·ã£ãããã¦ã³ã¤ãã³ããæ¤åºããå®è¡ä¸ã®Podã®å®å
¨ãªçµäºãéå§ã§ããããã«ãªãã¾ããã
ããã¯Linuxä¸ã®æ¢åã®åä½ãåæ ãã¦ãããè¨ç»çãªã·ã£ãããã¦ã³ãåèµ·åæã«ã¯ã¼ã¯ãã¼ããã¯ãªã¼ã³ã«çµäºãããã¨ãä¿è¨¼ãã¾ãã<br>
ã·ã¹ãã ãã·ã£ãããã¦ã³ãéå§ããã¨ã<code>kubelet</code>ã¯æ¨æºçãªçµäºãã¸ãã¯ã使ç¨ãã¦åå¿ãã¾ãã
è¨å®ãããã©ã¤ããµã¤ã¯ã«ããã¯ã¨ç¶äºæéãå°éãããã¼ãã黿ºãªãã«ãªãåã«Podã«åæ¢ããæéãä¸ãã¾ãã
ãã®æ©è½ã¯Windowsã®ãã¬ã·ã£ãããã¦ã³éç¥ã«ä¾åãã¦ãã®ããã»ã¹ã調æ´ãã¾ãã
ãã®æ©è½å¼·åã«ãããã¡ã³ããã³ã¹ãåèµ·åãã¾ãã¯ã·ã¹ãã ã¢ãããã¼ãæã®ã¯ã¼ã¯ãã¼ãã®ä¿¡é ¼æ§ãåä¸ãã¾ãã
ç¾å¨ãã¼ã¿çã§ãããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Windowsã主å°ãã<a href="https://kep.k8s.io/4802">KEP #4802</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¤ã³ãã¬ã¼ã¹ãªpodã®ãªãµã¤ãºæ©è½ã®æ¹å">ã¤ã³ãã¬ã¼ã¹ãªPodã®ãªãµã¤ãºæ©è½ã®æ¹å</h3>
<p>v1.33ã§ãã¼ã¿ã«ææ ¼ãããã©ã«ãã§æå¹ã«ãªã£ãã¤ã³ãã¬ã¼ã¹ãªPodã®ãªãµã¤ãºæ©è½ã¯ãv1.34ã§ãããªãæ¹åãåãã¦ãã¾ãã
ããã«ã¯ãã¡ã¢ãªä½¿ç¨éã®åæ¸ã®ãµãã¼ãã¨Podã¬ãã«ãªã½ã¼ã¹ã¨ã®çµ±åãå«ã¾ãã¾ãã</p>
<p>ãã®æ©è½ã¯v1.34ã§ããã¼ã¿ã®ã¾ã¾ç¶æããã¦ãã¾ãã
詳細ãªä½¿ç¨æ¹æ³ã¨ä¾ã«ã¤ãã¦ã¯ãããã¥ã¡ã³ã<a href="https://kubernetes.io/ja/docs/tasks/configure-pod-container/resize-container-resources/">ã³ã³ããã«å²ãå½ã¦ãããCPUã¨ã¡ã¢ãªãªã½ã¼ã¹ã®ãªãµã¤ãº</a>ããåç
§ãã ããã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã¨SIG Autoscalingã主å°ãã<a href="https://kep.k8s.io/1287">KEP #1287</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="ã¢ã«ãã¡ã®æ°æ©è½">ã¢ã«ãã¡ã®æ°æ©è½</h2>
<p><em>ããã¯v1.34ãªãªã¼ã¹å¾ã«ã¢ã«ãã¡ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="mtlsèªè¨¼ã®ããã®podã®è¨¼ææ¸">mTLSèªè¨¼ã®ããã®Podã®è¨¼ææ¸</h3>
<p>ã¯ã©ã¹ã¿ã¼å
ã®ã¯ã¼ã¯ãã¼ãã®èªè¨¼ãç¹ã«APIãµã¼ãã¼ã¨ã®éä¿¡ã§ã¯ã主ã«ServiceAccountãã¼ã¯ã³ã«ä¾åãã¦ãã¾ããã
广çã§ã¯ãããã®ã®ããããã®ãã¼ã¯ã³ã¯ç¸äºTLS(mTLS)ã®ããã®å¼·åã§æ¤è¨¼å¯è½ãªã¢ã¤ãã³ãã£ãã£ã確ç«ããã«ã¯å¿
ãããçæ³çã§ã¯ãªããè¨¼ææ¸ãã¼ã¹ã®èªè¨¼ãæå¾
ããå¤é¨ã·ã¹ãã ã¨ã®çµ±åæã«èª²é¡ãçãããã¨ãããã¾ãã<br>
Kubernetes v1.34ã§ã¯ã<a href="https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#pod-certificate-requests">PodCertificateRequest</a>ãä»ãã¦PodãX.509è¨¼ææ¸ãåå¾ããããã®çµã¿è¾¼ã¿ã¡ã«ããºã ãå°å
¥ããã¾ãã
<code>kubelet</code>ã¯Podç¨ã®è¨¼ææ¸ãè¦æ±ã»ç®¡çã§ãããããã®è¨¼ææ¸ã¯mTLSã使ç¨ãã¦Kubernetes APIãµã¼ãã¼ãä»ã®ãµã¼ãã¹ã¸ã®èªè¨¼ã«ä½¿ç¨ã§ãã¾ãã
主ãªå©ç¹ã¯ãPodã®ããã®ããå
ç¢ã§æè»ãªã¢ã¤ãã³ãã£ãã£ã¡ã«ããºã ã§ãã
Bearerãã¼ã¯ã³ã®ã¿ã«ä¾åãããã¨ãªããå¼·åãªmTLSèªè¨¼ãå®è£
ãããã¤ãã£ããªæ¹æ³ãæä¾ããKubernetesãæ¨æºçãªã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ã«åãããè¨¼ææ¸å¯¾å¿ã®å¯è¦³æ¸¬æ§ãã»ãã¥ãªãã£ãã¼ã«ã¨ã®çµ±åãç°¡ç´ åãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4317">KEP #4317</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="å¶é-podã®ã»ãã¥ãªãã£æ¨æºã«ããremote-probeã®ç¦æ¢">ãå¶éãPodã®ã»ãã¥ãªãã£æ¨æºã«ããRemote Probeã®ç¦æ¢</h3>
<p>Probeããã³ã©ã¤ããµã¤ã¯ã«ãã³ãã©ã¼å
ã®<code>host</code>ãã£ã¼ã«ãã«ãããã¦ã¼ã¶ã¼ã¯<code>kubelet</code>ãProbeãã対象ã¨ãã¦<code>podIP</code>以å¤ã®ã¨ã³ãã£ãã£ãæå®ã§ãã¾ãã
ããããããã¯æªç¨ããã»ãã¥ãªãã£å¶å¾¡ããã¤ãã¹ããæ»æã®çµè·¯ãéãã¾ãã
<code>host</code>ãã£ã¼ã«ãã«ã¯ãã»ãã¥ãªãã£ä¸éè¦ãªå¤é¨ãã¹ãããã¼ãä¸ã®localhostãå«ãã<strong>ä»»æã®</strong>å¤ãè¨å®ã§ããããã§ãã
Kubernetes v1.34ã§ã¯ãPodã<a href="https://kubernetes.io/ja/docs/concepts/security/pod-security-standards/#å¶é">å¶é</a>Podã®ã»ãã¥ãªãã£æ¨æºãæºããã®ã¯ã<code>host</code>ãã£ã¼ã«ããæªè¨å®ã®ã¾ã¾ã«ãããããã®ã¿ã¤ãã®Probeã使ç¨ããªãå ´åã®ã¿ã¨ãªãã¾ãã
ãã®æ¨æºãå¼·å¶ããã«ã¯ã<em>Podã»ãã¥ãªãã£ã¢ãããã·ã§ã³</em> ã¾ãã¯ãµã¼ããã¼ãã£ã½ãªã¥ã¼ã·ã§ã³ã使ç¨ã§ãã¾ãã
ãããã¯ã»ãã¥ãªãã£å¶å¾¡ã§ããããã鏿ããå¼·å¶ã¡ã«ããºã ã®å¶éã¨åä½ãçè§£ããããã«ããã¥ã¡ã³ãã確èªãã¦ãã ããã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4940">KEP #4940</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="podé
ç½®ã表ç¾ããããã®-status-nominatednodename-ã®ä½¿ç¨">Podé
ç½®ã表ç¾ããããã®<code>.status.nominatedNodeName</code>ã®ä½¿ç¨</h3>
<p><code>kube-scheduler</code>ãPodãNodeã«ãã¤ã³ãããã®ã«æéããããå ´åãã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼ã¯Podãç¹å®ã®Nodeã«ãã¤ã³ãããããã¨ãçè§£ã§ããªãå ´åãããã¾ãã
ãã®çµæãNodeã使ç¨çãä½ãã¨èª¤å¤æããåé¤ãã¦ãã¾ãå¯è½æ§ãããã¾ãã<br>
ãã®åé¡ã«å¯¾å¦ããããã<code>kube-scheduler</code>ã¯<code>.status.nominatedNodeName</code>ã使ç¨ãã¦ãé²è¡ä¸ã®ããªã¨ã³ãã·ã§ã³ã示ãã ãã§ãªããPodã®é
ç½®æå³ã表ç¾ã§ããããã«ãªãã¾ãã
<code>NominatedNodeNameForExpectation</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ãããã¨ã§ãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãã®ãã£ã¼ã«ãã使ç¨ãã¦Podãã©ãã«ãã¤ã³ãããããã示ãã¾ãã
ããã«ããå
é¨çãªäºç´ãå
¬éãããå¤é¨ã³ã³ãã¼ãã³ããæ
å ±ã«åºã¥ãã夿ãä¸ããããã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/5278">KEP #5278</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¢ã«ãã¡çã®draæ©è½">ã¢ã«ãã¡çã®DRAæ©è½</h3>
<h4 id="draã®ãªã½ã¼ã¹ãã«ã¹ç¶æ
">DRAã®ãªã½ã¼ã¹ãã«ã¹ç¶æ
</h4>
<p>Podãæ
éãããã¾ãã¯ä¸æçã«ç°å¸¸ãªããã¤ã¹ã使ç¨ãã¦ããå ´åããããææ¡ãããã¨ã¯å°é£ã§ãã
ããã«ããPodã®ã¯ã©ãã·ã¥ã®ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ãé£ãããæã«ã¯ä¸å¯è½ã«ãªãã¾ãã<br>
DRAã®ãªã½ã¼ã¹ãã«ã¹ç¶æ
æ©è½ã¯ãPodã«å²ãå½ã¦ãããããã¤ã¹ã®ãã«ã¹ç¶æ
ãPodã®ã¹ãã¼ã¿ã¹ã«å
¬éãããã¨ã§ãå¯è¦³æ¸¬æ§ãåä¸ããã¾ãã
ããã«ãããç°å¸¸ãªããã¤ã¹ã«é¢é£ããPodã®åé¡ã®åå ãç¹å®ãããããªããé©åã«å¯¾å¿ã§ããããã«ãªãã¾ãã<br>
ãã®æ©è½ãæå¹ã«ããã«ã¯ã<code>ResourceHealthStatus</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ããDRAãã©ã¤ãã¼ã<code>DRAResourceHealth</code> gRPCãµã¼ãã¹ãå®è£
ãã¦ããå¿
è¦ãããã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/4680">KEP #4680</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="æ¡å¼µãªã½ã¼ã¹ãããã³ã°">æ¡å¼µãªã½ã¼ã¹ãããã³ã°</h4>
<p>æ¡å¼µãªã½ã¼ã¹ãããã³ã°ã¯ããªã½ã¼ã¹ã®å®¹éã¨æ¶è²»éãè¨è¿°ããããã®ç°¡åãªæ¹æ³ãæä¾ãããã¨ã§ãDRAã®è¡¨ç¾åè±ãã§æè»ãªã¢ããã¼ããããã·ã³ãã«ãªä»£æ¿ææ®µã¨ãªãã¾ãã
ããã«ãããã¯ã©ã¹ã¿ã¼ç®¡çè
ã¯DRAã§ç®¡çãã¦ãããªã½ã¼ã¹ã<em>æ¡å¼µãªã½ã¼ã¹</em>ã¨ãã¦å
¬éã§ããã¢ããªã±ã¼ã·ã§ã³éçºè
ãéç¨è
ã¯æ°ããDRA APIãå¦ã¶ãã¨ãªãã徿¥éãã³ã³ããã®<code>.spec.resources</code>ãã£ã¼ã«ãã§ãããã®ãªã½ã¼ã¹ãè¦æ±ã§ãã¾ãã<br>
ãã®æ©è½ã®æå¤§ã®å©ç¹ã¯ãæ¢åã®ã¯ã¼ã¯ãã¼ãã夿´ããã«DRAã®æ©æµãåãããããã¨ã§ãã
ã¢ããªã±ã¼ã·ã§ã³éçºè
ã¨ã¯ã©ã¹ã¿ã¼ç®¡çè
ã®ä¸¡æ¹ã«ã¨ã£ã¦ãDRAã¸ã®ç§»è¡ã大å¹
ã«ç°¡åã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/5004">KEP #5004</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="draã®æ¶è²»å¯è½ãªå®¹é">DRAã®æ¶è²»å¯è½ãªå®¹é</h4>
<p>Kubernetes v1.33ã§ã¯ããªã½ã¼ã¹ãã©ã¤ãã¼ãããã¤ã¹å
¨ä½ãä¸ã¤ã®åä½ã¨ãã¦æ±ãã®ã§ã¯ãªããå©ç¨å¯è½ãªããã¤ã¹ã®ä¸é¨å(ã¹ã©ã¤ã¹)ãå
¬éã§ããããã«ãªãã¾ããã
ãããããã®ã¢ããã¼ãã§ã¯ãããã¤ã¹ãã©ã¤ãã¼ãã¦ã¼ã¶ã¼ã®è¦æ±ã«åºã¥ãã¦ããã¤ã¹ãªã½ã¼ã¹ãç´°ããåçã«åå²ããå ´åããResourceClaimã®ä»æ§ã¨åå空éã®å¶éãè¶
ãã¦ãªã½ã¼ã¹ãå
±æããå ´åã«å¯¾å¿ã§ãã¾ããã§ããã<br>
<code>DRAConsumableCapacity</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ãããã¨ã§(v1.34ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥)ããªã½ã¼ã¹ãã©ã¤ãã¼ã¯åãããã¤ã¹ãããã¤ã¹ã®ä¸é¨ããè¤æ°ã®ResourceClaimã¾ãã¯è¤æ°ã®DeviceRequestéã§å
±æã§ããããã«ãªãã¾ãã
ãã®æ©è½ã¯ã¾ãã<code>capacity</code>ãã£ã¼ã«ãã§å®ç¾©ãããããã¤ã¹ãªã½ã¼ã¹ã®ä¸é¨ãå²ãå½ã¦ããã¨ããµãã¼ãããããã¹ã±ã¸ã¥ã¼ã©ã¼ãæ¡å¼µãã¾ãã
ãã®DRAæ©è½ã«ãããåå空éãã¯ã¬ã¼ã éã§ã®ããã¤ã¹å
±æãæ¹åãããPodã®ãã¼ãºã«åããã調æ´ãå¯è½ã«ãªãã¾ãã
ãã©ã¤ãã¼ã容éå¶éãå¼·å¶ã§ããã¹ã±ã¸ã¥ã¼ãªã³ã°ãå¼·åããã帯åå¹
ãèæ
®ãããããã¯ã¼ãã³ã°ããã«ãããã³ãå
±æãªã©ã®æ°ããã¦ã¼ã¹ã±ã¼ã¹ããµãã¼ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/5075">KEP #5075</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="ããã¤ã¹ã®ãã¤ã³ãæ¡ä»¶">ããã¤ã¹ã®ãã¤ã³ãæ¡ä»¶</h4>
<p>Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãå¿
è¦ãªå¤é¨ãªã½ã¼ã¹(ã¢ã¿ããå¯è½ãªããã¤ã¹ãFPGAãªã©)ãæºåå®äºã§ãããã¨ã確èªããã¾ã§ãPodã®Nodeã¸ã®ãã¤ã³ãã£ã³ã°ãé
å»¶ããããã¨ã§ãããä¿¡é ¼æ§ãåä¸ãã¾ãã<br>
ãã®é
å»¶ã¡ã«ããºã ã¯ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã®<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/scheduling-framework/#pre-bind">PreBindãã§ã¼ãº</a>ã§å®è£
ããã¾ãã
ãã®ãã§ã¼ãºä¸ã«ãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯å¿
è¦ãªãã¹ã¦ã®ããã¤ã¹æ¡ä»¶ãæºãããã¦ãããã確èªãã¦ããããã¤ã³ãã£ã³ã°ãç¶è¡ãã¾ãã
ããã«ããå¤é¨ããã¤ã¹ã³ã³ããã¼ã©ã¼ã¨ã®èª¿æ´ãå¯è½ã«ãªããããå
ç¢ã§äºæ¸¬å¯è½ãªã¹ã±ã¸ã¥ã¼ãªã³ã°ãå®ç¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯WG Device Managementã主å°ãã<a href="https://kep.k8s.io/5007">KEP #5007</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã³ã³ããåèµ·åã«ã¼ã«">ã³ã³ããåèµ·åã«ã¼ã«</h3>
<p>ç¾å¨ãPodå
ã®ãã¹ã¦ã®ã³ã³ããã¯ãçµäºã¾ãã¯ã¯ã©ãã·ã¥æã«åã<code>.spec.restartPolicy</code>ã«å¾ãã¾ãã
ããããè¤æ°ã®ã³ã³ãããå®è¡ããPodã§ã¯ãåã³ã³ããã«ç°ãªãåèµ·åè¦ä»¶ãå¿
è¦ãªå ´åãããã¾ãã
ä¾ãã°ãåæåãå®è¡ããããã«ä½¿ç¨ãããInitã³ã³ããã§ã¯ã失ææã«åæåãå試è¡ããããªãå ´åãããã¾ãã
åæ§ã«é·æéå®è¡ãããè¨ç·´ã¯ã¼ã¯ãã¼ããæ±ãMLç ç©¶ã®ç°å¢ã§ã¯ãå試è¡å¯è½ãªçµäºã³ã¼ãã§å¤±æããã³ã³ããã¯ãPodå
¨ä½ãå使ãã¦é²è¡ç¶æ³ã失ãã®ã§ã¯ãªãããã®å ´ã§ç´ æ©ãåèµ·åãã¹ãã§ãã<br>
Kubernetes v1.34ã§ã¯<code>ContainerRestartRules</code>ãã£ã¼ãã£ã¼ã²ã¼ããå°å
¥ãã¾ãã
æå¹ã«ããã¨ãPodå
ã®åã³ã³ããã«å¯¾ãã¦<code>restartPolicy</code>ãæå®ã§ãã¾ãã
ã¾ããæå¾ã®çµäºã³ã¼ãã«åºã¥ãã¦<code>restartPolicy</code>ã䏿¸ããã<code>restartPolicyRules</code>ãªã¹ããå®ç¾©ã§ãã¾ãã
ããã«ãããè¤éãªã·ããªãªã«å¯¾å¦ããããã«å¿
è¦ãªç´°ããå¶å¾¡ã¨ãè¨ç®ãªã½ã¼ã¹ã®ããè¯ãå©ç¨ãå¯è½ã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/5307">KEP #5307</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="å®è¡æã«ä½æããããã¡ã¤ã«ããã®ç°å¢å¤æ°ã®èªã¿è¾¼ã¿">å®è¡æã«ä½æããããã¡ã¤ã«ããã®ç°å¢å¤æ°ã®èªã¿è¾¼ã¿</h3>
<p>ã¢ããªã±ã¼ã·ã§ã³éçºè
ã¯é·ãéãç°å¢å¤æ°å®£è¨ã®ããæè»ãªæ¹æ³ãæ±ãã¦ãã¾ããã
ããã¾ã§ãç°å¢å¤æ°ã¯éçãªå¤ãConfigMapã¾ãã¯Secretãä»ãã¦APIãµã¼ãã¼å´ã§å®£è¨ããã¦ãã¾ããã</p>
<p><code>EnvFiles</code>ãã£ã¼ãã£ã¼ã²ã¼ãã«ãã£ã¦ãKubernetes v1.34ã§ã¯å®è¡æã«ç°å¢å¤æ°ã宣è¨ããæ©è½ãå°å
¥ãã¾ãã
ããã³ã³ãã(é常ã¯Initã³ã³ãã)ã夿°ãçæãã¦ãã¡ã¤ã«ã«ä¿åããå¾ç¶ã®ã³ã³ããããã®ãã¡ã¤ã«ããç°å¢å¤æ°ãèªã¿è¾¼ãã§èµ·åã§ãã¾ãã
ãã®ã¢ããã¼ãã«ããã対象ã³ã³ããã®ã¨ã³ããªãã¤ã³ãããã©ããããã(èµ·åã³ãã³ãã夿´ãã)å¿
è¦ããªããªããPodå
ã§ã®ããæè»ãªã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ãå¯è½ã«ãªãã¾ãã</p>
<p>ãã®æ©è½ã¯ç¹ã«AI/MLãã¬ã¼ãã³ã°ã®ã¯ã¼ã¯ãã¼ãã«æçã§ãã
è¨ç·´Jobå
ã®åPodãå®è¡æã«å®ç¾©ãããå¤ã§åæåãããå¿
è¦ãããå ´åã«å½¹ç«ã¡ã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/3721">KEP #3721</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="v1-34ã§ã®ææ ¼-鿍奍å-ããã³åé¤">v1.34ã§ã®ææ ¼ã鿍奍åãããã³åé¤</h2>
<h3 id="gaã¸ã®ææ ¼">GAã¸ã®ææ ¼</h3>
<p>ããã¯å®å®ç(<em>ä¸è¬æä¾ãGA</em>ã¨ãå¼ã°ãã)ã«ææ ¼ãããã¹ã¦ã®æ©è½ãä¸è¦§ã«ãããã®ã§ãã
ã¢ã«ãã¡ãããã¼ã¿ã¸ã®ææ ¼ãæ°æ©è½ãå«ãæ´æ°ã®å®å
¨ãªãªã¹ãã«ã¤ãã¦ã¯ããªãªã¼ã¹ãã¼ããã覧ãã ããã</p>
<p>ãã®ãªãªã¼ã¹ã«ã¯ãGAã«ææ ¼ããåè¨23ã®æ©è½å¼·åãå«ã¾ãã¦ãã¾ã:</p>
<ul>
<li><a href="https://kep.k8s.io/4369">Allow almost all printable ASCII characters in environment variables</a></li>
<li><a href="https://kep.k8s.io/3939">Allow for recreation of pods once fully terminated in the job controller</a></li>
<li><a href="https://kep.k8s.io/4818">Allow zero value for Sleep Action of PreStop Hook</a></li>
<li><a href="https://kep.k8s.io/647">API Server tracing</a></li>
<li><a href="https://kep.k8s.io/24">AppArmor support</a></li>
<li><a href="https://kep.k8s.io/4601">Authorize with Field and Label Selectors</a></li>
<li><a href="https://kep.k8s.io/2340">Consistent Reads from Cache</a></li>
<li><a href="https://kep.k8s.io/3902">Decouple TaintManager from NodeLifecycleController</a></li>
<li><a href="https://kep.k8s.io/4033">Discover cgroup driver from CRI</a></li>
<li><a href="https://kep.k8s.io/4381">DRA: structured parameters</a></li>
<li><a href="https://kep.k8s.io/3960">Introducing Sleep Action for PreStop Hook</a></li>
<li><a href="https://kep.k8s.io/2831">Kubelet OpenTelemetry Tracing</a></li>
<li><a href="https://kep.k8s.io/3751">Kubernetes VolumeAttributesClass ModifyVolume</a></li>
<li><a href="https://kep.k8s.io/2400">Node memory swap support</a></li>
<li><a href="https://kep.k8s.io/4633">Only allow anonymous auth for configured endpoints</a></li>
<li><a href="https://kep.k8s.io/5080">Ordered namespace deletion</a></li>
<li><a href="https://kep.k8s.io/4247">Per-plugin callback functions for accurate requeueing in kube-scheduler</a></li>
<li><a href="https://kep.k8s.io/4427">Relaxed DNS search string validation</a></li>
<li><a href="https://kep.k8s.io/4568">Resilient Watchcache Initialization</a></li>
<li><a href="https://kep.k8s.io/5116">Streaming Encoding for LIST Responses</a></li>
<li><a href="https://kep.k8s.io/3331">Structured Authentication Config</a></li>
<li><a href="https://kep.k8s.io/5100">Support for Direct Service Return (DSR) and overlay networking in Windows kube-proxy</a></li>
<li><a href="https://kep.k8s.io/1790">Support recovery from volume expansion failure</a></li>
</ul>
<h3 id="deprecations-and-removals">鿍奍åã¨åé¤</h3>
<p>Kubernetesã®éçºã¨æçã«ä¼´ããããã¸ã§ã¯ãå
¨ä½ã®å¥å
¨æ§ãåä¸ãããããã«æ©è½ã鿍奍åãããããåé¤ãããããããè¯ãæ©è½ã«ç½®ãæããããããããã¨ãããã¾ãã
ãã®ããã»ã¹ã«é¢ãã詳細ã¯ã<a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">Kubernetes鿍奍ããªã·ã¼</a>ãåç
§ãã¦ãã ããã
Kubernetes v1.34ã«ã¯ããã¤ãã®éæ¨å¥¨åãå«ã¾ãã¦ãã¾ãã</p>
<h4 id="æåã§ã®cgroupãã©ã¤ãã¼è¨å®ã®éæ¨å¥¨å">æåã§ã®cgroupãã©ã¤ãã¼è¨å®ã®éæ¨å¥¨å</h4>
<p>ããã¾ã§ãæ£ããcgroupãã©ã¤ãã¼ã®è¨å®ã¯ãKubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ããã¦ã¼ã¶ã¼ã«ã¨ã£ã¦æ©ã¿ã®ç¨®ã§ããã
Kubernetes v1.28ã§ã¯ã<code>kubelet</code>ãCRIå®è£
ã«åãåããã¦ä½¿ç¨ãã¹ãcgroupãã©ã¤ãã¼ãè¦ã¤ããæ¹æ³ã追å ããã¾ããã
ãã®èªåæ¤åºãç¾å¨<strong>å¼·ãæ¨å¥¨</strong>ããã¦ããããã®ãµãã¼ãã¯v1.34ã§GAã«ææ ¼ãã¾ããã
ã使ãã®CRIã³ã³ããã©ã³ã¿ã¤ã ãå¿
è¦ãªcgroupãã©ã¤ãã¼ãå ±åããæ©è½ããµãã¼ããã¦ããªãå ´åã¯ãã³ã³ããã©ã³ã¿ã¤ã ãã¢ããã°ã¬ã¼ãã¾ãã¯å¤æ´ããå¿
è¦ãããã¾ãã
<code>kubelet</code>è¨å®ãã¡ã¤ã«ã®<code>cgroupDriver</code>è¨å®ã¯ç¾å¨éæ¨å¥¨ã¨ãªã£ã¦ãã¾ãã
対å¿ããã³ãã³ãã©ã¤ã³ãªãã·ã§ã³<code>--cgroup-driver</code>ã¯ä»¥åãã鿍奍ã¨ãªã£ã¦ãããKubernetesã§ã¯è¨å®ãã¡ã¤ã«ã®ä½¿ç¨ãæ¨å¥¨ãã¦ãã¾ãã
è¨å®é
ç®ã¨ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã®ä¸¡æ¹ã¯å°æ¥ã®ãªãªã¼ã¹ã§åé¤ãããäºå®ã§ããããã®åé¤ã¯v1.36ã®ãã¤ãã¼ãªãªã¼ã¹ããåã«ã¯è¡ããã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4033">KEP #4033</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="v1-36ã§ã®containerd-1-xãµãã¼ãçµäº">v1.36ã§ã®containerd 1.xãµãã¼ãçµäº</h4>
<p>Kubernetes v1.34ã¯ã¾ã containerd 1.7ããã®ä»ã®LTSãªãªã¼ã¹ããµãã¼ããã¦ãã¾ãããèªåã§ã®cgroupãã©ã¤ãã¼æ¤åºã®çµæã¨ãã¦ãKubernetes SIG Nodeã³ãã¥ããã£ã¯containerd v1.Xã®æçµãµãã¼ãã¿ã¤ã ã©ã¤ã³ã«ã¤ãã¦æ£å¼ã«åæãã¾ããã
ãã®ãµãã¼ããæä¾ããæå¾ã®Kubernetesãªãªã¼ã¹ã¯v1.35ã¨ãªãã¾ã(containerd 1.7ã®EOLã«åããã¦)ã
ããã¯æ©æã®è¦åã§ãã
containerd 1.Xã使ç¨ãã¦ããå ´åã¯ãæ©æ¥ã«2.0以éã¸ã®åãæ¿ããæ¤è¨ãã¦ãã ããã
ã¯ã©ã¹ã¿ã¼å
ã®ãã¼ãããã¾ããªããµãã¼ã対象å¤ã¨ãªãcontainerdãã¼ã¸ã§ã³ã使ç¨ãã¦ãããã©ããã夿ããããã«ã<code>kubelet_cri_losing_support</code>ã¡ããªã¯ã¹ãç£è¦ã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4033">KEP #4033</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h4 id="preferclose-ãã©ãã£ãã¯åæ£ã®éæ¨å¥¨å"><code>PreferClose</code>ãã©ãã£ãã¯åæ£ã®éæ¨å¥¨å</h4>
<p>Kubernetes <a href="https://kubernetes.io/ja/docs/concepts/services-networking/service/">Service</a>å
ã®<code>spec.trafficDistribution</code>ãã£ã¼ã«ãã«ãããã¦ã¼ã¶ã¼ã¯Serviceã¨ã³ããã¤ã³ãã¸ã®ãã©ãã£ãã¯ã®ã«ã¼ãã£ã³ã°æ¹æ³ã«é¢ããåªå
è¨å®ãæå®ã§ãã¾ãã</p>
<p><a href="https://kep.k8s.io/3015">KEP-3015</a>ã§ã¯<code>PreferClose</code>ã鿍奍ã¨ãã2ã¤ã®æ°ããå¤<code>PreferSameZone</code>ã¨<code>PreferSameNode</code>ãå°å
¥ãã¾ãã
<code>PreferSameZone</code>ã¯æ¢åã®<code>PreferClose</code>ã®ã¨ã¤ãªã¢ã¹ã§ããã®æå³ãããæç¢ºã«ãã¾ãã
<code>PreferSameNode</code>ã¯å¯è½ãªå ´åã¯ãã¼ã«ã«ã¨ã³ããã¤ã³ãã«æ¥ç¶ãé
ä¿¡ããä¸å¯è½ãªå ´åã¯ãªã¢ã¼ãã¨ã³ããã¤ã³ãã«ãã©ã¼ã«ããã¯ãããã¨ãå¯è½ã«ãã¾ãã</p>
<p>ãã®æ©è½ã¯<code>PreferSameTrafficDistribution</code>ãã£ã¼ãã£ã¼ã²ã¼ãã®ä¸ã§v1.33ã§å°å
¥ããã¾ããã
v1.34ã§ãã¼ã¿ã«ææ ¼ããããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Networkã主å°ãã<a href="https://kep.k8s.io/3015">KEP #3015</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã">ãªãªã¼ã¹ãã¼ã</h2>
<p>Kubernetes v1.34ãªãªã¼ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.34.md">ãªãªã¼ã¹ãã¼ã</a>ãã覧ãã ããã</p>
<h2 id="å
¥ææ¹æ³">å
¥ææ¹æ³</h2>
<p>Kubernetes v1.34ã¯<a href="https://github.com/kubernetes/kubernetes/releases/tag/v1.34.0">GitHub</a>ã¾ãã¯<a href="https://kubernetes.io/releases/download/">Kuberneteså
¬å¼ãµã¤ãã®ãã¦ã³ãã¼ããã¼ã¸</a>ãããã¦ã³ãã¼ãã§ãã¾ãã</p>
<p>Kubernetesãå§ããã«ã¯ã<a href="https://kubernetes.io/ja/docs/tutorials/">ãã¥ã¼ããªã¢ã«</a>ããã§ãã¯ãããã<a href="https://minikube.sigs.k8s.io/">minikube</a>ã使ç¨ãã¦ãã¼ã«ã«Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ãã¦ãã ãããã¾ãã<a href="https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/">kubeadm</a>ã使ç¨ãã¦ç°¡åã«v1.34ãã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã ">ãªãªã¼ã¹ãã¼ã </h2>
<p>Kubernetesã¯ãã³ãã¥ããã£ã®æ¯æ´ã¨ç®èº«çãªåªåã«ãã£ã¦æãç«ã£ã¦ãã¾ãã
åãªãªã¼ã¹ãã¼ã ã¯ãçãããå©ç¨ããKubernetesãªãªã¼ã¹ãæ§æããæ§ã
ãªè¦ç´ ãååãã¦æ§ç¯ãããç®èº«çãªã³ãã¥ããã£ãã©ã³ãã£ã¢ã§æ§æããã¦ãã¾ãã
ãããå®ç¾ããã«ã¯ãã³ã¼ããã®ãã®ããããã¥ã¡ã³ã使ãããã¸ã§ã¯ã管çã«è³ãã¾ã§ãã³ãã¥ããã£ã®ããããåéã®å°éã¹ãã«ãå¿
è¦ã§ãã</p>
<p>ç§ãã¡ã¯ãæè¡ã¨ã³ãã¥ããã£æ§ç¯ã¸ã®æ
ç±ã§Kubernetesã³ãã¥ããã£ã«å¤§ããªè¶³è·¡ãæ®ããç®èº«çãªã³ã³ããªãã¥ã¼ã¿ã¼ã<a href="https://github.com/cncf/memorials/blob/main/rodolfo-martinez.md">Rodolfo "Rodo" MartÃnez Vegaã追æ¼ãã¾ã</a>ã
Rodoã¯ãv1.22-v1.23ããã³v1.25-v1.30ãå«ãè¤æ°ã®ãªãªã¼ã¹ã§Kubernetesãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¨ãã¦æ´»åããããã¸ã§ã¯ãã®æåã¨å®å®æ§ã«å¯¾ããæºãããªãç®èº«ã示ãã¾ããã<br>
ãªãªã¼ã¹ãã¼ã ã§ã®æ´»åã«å ããRodoã¯Cloud Native LATAMã³ãã¥ããã£ã®çºå±ã«æ·±ãé¢ããããã®åéã«ãããè¨èªã¨æåã®å£ãè¶ããæ¶ãæ©ã¨ãªãã¾ããã
Kubernetesããã¥ã¡ã³ãã®ã¹ãã¤ã³èªçãCNCF Glossaryã§ã®æ´»åã¯ãä¸çä¸ã®ã¹ãã¤ã³èªè©±è
ã®éçºè
ã«ç¥èãå±ãããã¨ããå½¼ã®å¼·ãæããä½ç¾ãã¦ãã¾ããã
Rodoãæå°ããæ°å¤ãã®ã³ãã¥ããã£ã¡ã³ãã¼ãå½¼ãæ¯ãããªãªã¼ã¹ãããã¦å½¼ãè²ãã æ´»æ°ããLATAM Kubernetesã³ãã¥ããã£ãéãã¦ãå½¼ã®éºç£ã¯ä»ãçãç¶ãã¦ãã¾ãã</p>
<p>Kubernetes v1.34ãªãªã¼ã¹ãã³ãã¥ããã£ã«å±ããããã«å¤ãã®æéãè²»ããã¦åãçµãã§ããã<a href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.34/release-team.md">ãªãªã¼ã¹ãã¼ã </a>å
¨ä½ã«æè¬ãã¾ãã
ãªãªã¼ã¹ãã¼ã ã«ã¯ãååå ã®Shadow(è¦ç¿ã)ãããè¤æ°ã®ãªãªã¼ã¹ãµã¤ã¯ã«ã§çµé¨ãç©ãã ããã©ã³ã®ãã¼ã ãªã¼ãã¾ã§ãæ§ã
ãªã¡ã³ãã¼ãåå ãã¦ãã¾ãã
ãªãªã¼ã¹ãªã¼ãã®Vyom Yadavã«å¿ããæè¬ãã¾ãã
å½¼ã¯æåã¸ã¨å°ããªã¼ãã¼ã·ããã課é¡è§£æ±ºã¸ã®å®è·µçãªã¢ããã¼ããããã¦ã³ãã¥ããã£ãåé²ãããæ´»åã¨æãããã示ãã¦ããã¾ããã</p>
<h2 id="ããã¸ã§ã¯ãã®æ´»åç¶æ³">ããã¸ã§ã¯ãã®æ´»åç¶æ³</h2>
<p>CNCF K8sã®<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStats</a>ããã¸ã§ã¯ãã¯ãKubernetesããã³æ§ã
ãªãµãããã¸ã§ã¯ãã®æ´»åç¶æ³ã«é¢ããè峿·±ããã¼ã¿ãã¤ã³ããéè¨ãã¦ãã¾ãã
ããã«ã¯å人ã®è²¢ç®ããè²¢ç®ä¼æ¥æ°ã¾ã§å«ã¾ãããã®ã¨ã³ã·ã¹ãã ã®çºå±ã«è²»ããããåªåã®æ·±ãã¨åºãã示ãã¦ãã¾ãã</p>
<p>v1.34ãªãªã¼ã¹ãµã¤ã¯ã«(2025å¹´5æ19æ¥ãã2025å¹´8æ27æ¥ã¾ã§ã®15é±é)ã«ããã¦ãKubernetesã«ã¯æå¤§106ã®ç°ãªã伿¥ã¨491人ã®å人ããè²¢ç®ãããã¾ããã
ããåºç¯ãªã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã ã§ã¯ããã®æ°åã¯370社ãåè¨2235人ã®ã³ã³ããªãã¥ã¼ã¿ã¼ã«éãã¦ãã¾ãã</p>
<p>ãªãããè²¢ç®ãã¨ã¯ã³ãããã®ä½æãã³ã¼ãã¬ãã¥ã¼ãã³ã¡ã³ããIssueãPRã®ä½æãPRã®ã¬ãã¥ã¼(ããã°ãããã¥ã¡ã³ããå«ã)ãã¾ãã¯IssueãPRã¸ã®ã³ã¡ã³ããè¡ããã¨ãæãã¾ãã<br>
è²¢ç®ã«èå³ãããå ´åã¯ãã³ã³ããªãã¥ã¼ã¿ã¼åãWebãµã¤ãã®<a href="https://www.kubernetes.dev/docs/guide/#getting-started">ã¯ããã«</a>ãã覧ãã ããã</p>
<p>ãã¼ã¿ã½ã¼ã¹:</p>
<ul>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1747609200000&to=1756335599000&var-period=d28&var-repogroup_name=Kubernetes&var-repo_name=kubernetes%2Fkubernetes">Companies contributing to Kubernetes</a></li>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1747609200000&to=1756335599000&var-period=d28&var-repogroup_name=All&var-repo_name=kubernetes%2Fkubernetes">Overall ecosystem contributions</a></li>
</ul>
<h2 id="ã¤ãã³ãæ
å ±">ã¤ãã³ãæ
å ±</h2>
<p>ä»å¾éå¬äºå®ã®Kubernetesããã³ã¯ã©ã¦ããã¤ãã£ãã¤ãã³ã(KubeCon + CloudNativeConãKCDãªã©)ããä¸çåå°ã§éå¬ããã主è¦ãªã«ã³ãã¡ã¬ã³ã¹ã«ã¤ãã¦ç´¹ä»ãã¾ãã
Kubernetesã³ãã¥ããã£ã®ææ°æ
å ±ãå
¥æããåå ãã¾ãããï¼</p>
<p><strong>2025å¹´8æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-colombia-presents-kcd-colombia-2025/"><strong>KCD - Kubernetes Community Days: Colombia</strong></a>: 2025å¹´8æ28æ¥ | ã³ãã³ãã¢ããã´ã¿</li>
</ul>
<p><strong>2025å¹´9æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-cloud-native-sydney-presents-cloudcon-sydney-sydney-international-convention-centre-910-september/"><strong>CloudCon Sydney</strong></a>: 2025å¹´9æ9æ¥-10æ¥ | ãªã¼ã¹ãã©ãªã¢ãã·ããã¼</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-sf-bay-area-presents-kcd-san-francisco-bay-area/"><strong>KCD - Kubernetes Community Days: San Francisco Bay Area</strong></a>: 2025å¹´9æ9æ¥ | ã¢ã¡ãªã«ããµã³ãã©ã³ã·ã¹ã³</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-washington-dc-presents-kcd-washington-dc-2025/"><strong>KCD - Kubernetes Community Days: Washington DC</strong></a>: 2025å¹´9æ16æ¥ | ã¢ã¡ãªã«ãã¯ã·ã³ãã³D.C.</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-sofia-presents-kubernetes-community-days-sofia/"><strong>KCD - Kubernetes Community Days: Sofia</strong></a>: 2025å¹´9æ18æ¥ | ãã«ã¬ãªã¢ãã½ãã£ã¢</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-el-salvador-presents-kcd-el-salvador/"><strong>KCD - Kubernetes Community Days: El Salvador</strong></a>: 2025å¹´9æ20æ¥ | ã¨ã«ãµã«ããã«ããµã³ãµã«ããã«</li>
</ul>
<p><strong>2025å¹´10æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-warsaw-presents-kcd-warsaw-2025/"><strong>KCD - Kubernetes Community Days: Warsaw</strong></a>: 2025å¹´10æ9æ¥ | ãã¼ã©ã³ããã¯ã«ã·ã£ã¯</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-uk-presents-kubernetes-community-days-uk-edinburgh-2025/"><strong>KCD - Kubernetes Community Days: Edinburgh</strong></a>: 2025å¹´10æ21æ¥ | ã¤ã®ãªã¹ãã¨ãã£ã³ãã©</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-sri-lanka-presents-kcd-sri-lanka-2025/"><strong>KCD - Kubernetes Community Days: Sri Lanka</strong></a>: 2025å¹´10æ26æ¥ | ã¹ãªã©ã³ã«ãã³ãã³ã</li>
</ul>
<p><strong>2025å¹´11æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-porto-presents-kcd-porto-2025/"><strong>KCD - Kubernetes Community Days: Porto</strong></a>: 2025å¹´11æ3æ¥ | ãã«ãã¬ã«ããã«ã</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/"><strong>KubeCon + CloudNativeCon North America 2025</strong></a>: 2025å¹´11æ10æ¥-13æ¥ | ã¢ã¡ãªã«ãã¢ãã©ã³ã¿</li>
<li><a href="https://sessionize.com/kcd-hangzhou-and-oicd-2025/"><strong>KCD - Kubernetes Community Days: Hangzhou</strong></a>: 2025å¹´11æ14æ¥ | ä¸å½ãæå·</li>
</ul>
<p><strong>2025å¹´12æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-suisse-romande-presents-kcd-suisse-romande/"><strong>KCD - Kubernetes Community Days: Suisse Romande</strong></a>: 2025å¹´12æ4æ¥ | ã¹ã¤ã¹ãã¸ã¥ãã¼ã</li>
</ul>
<p>ææ°ã®ã¤ãã³ãæ
å ±ã¯<a href="https://community.cncf.io/events/#/list">ãã¡ã</a>ã§ã確èªããã ãã¾ãã</p>
<h2 id="ã¦ã§ããã¼ã®ãæ¡å
">ã¦ã§ããã¼ã®ãæ¡å
</h2>
<p>Kubernetes v1.34ãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¨ä¸ç·ã« <strong>2025å¹´9æ24æ¥(æ°´)åå¾4æ(UTC)</strong> ããããã®ãªãªã¼ã¹ã®ãã¤ã©ã¤ããã¢ããã°ã¬ã¼ãã®è¨ç»ã«å½¹ç«ã¤éæ¨å¥¨äºé
ãåé¤äºé
ã«ã¤ãã¦å¦ã³ã¾ãããã
詳細ããã³åå ç»é²ã¯ãCNCFãªã³ã©ã¤ã³ããã°ã©ã ã»ãµã¤ãã®<a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cloud-native-live-kubernetes-v134-release/">ã¤ãã³ããã¼ã¸</a>ãã覧ãã ããã</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p>Kubernetesã«é¢ããæãç°¡åãªæ¹æ³ã¯ãããªãã®èå³ã«åã£ã<a href="https://github.com/kubernetes/community/blob/master/sig-list.md">Special Interest Groups</a> (SIGs)ã®ããããã«åå ãããã¨ã§ãã
Kubernetesã³ãã¥ããã£ã«åãã¦ä½ãçºä¿¡ããããã¨ã¯ããã¾ããï¼
æ¯é±ã®<a href="https://github.com/kubernetes/community/tree/master/communication">ã³ãã¥ããã£ãã¼ãã£ã³ã°</a>ãã以ä¸ã®ãã£ã³ãã«ã§ããªãã®å£°ãå
±æãã¦ãã ããã
ç¶ç¶çãªãã£ã¼ãããã¯ã¨ãµãã¼ãã«æè¬ãããã¾ãã</p>
<ul>
<li>ææ°æ
å ±ã¯BlueSkyã®<a href="https://bsky.app/profile/kubernetes.io">@kubernetes.io</a>ããã©ãã¼ãã¦ãã ãã</li>
<li><a href="https://discuss.kubernetes.io/">Discuss</a>ã§ã³ãã¥ããã£ãã£ã¹ã«ãã·ã§ã³ã«åå ãã¦ãã ãã</li>
<li><a href="http://slack.k8s.io/">Slack</a>ã§ã³ãã¥ããã£ã«åå ãã¦ãã ãã</li>
<li><a href="http://stackoverflow.com/questions/tagged/kubernetes">Stack Overflow</a>ã§è³ªåããããåçããããã¦ãã ãã</li>
<li>ããªãã®Kubernetesã«é¢ãã<a href="https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform">ã¹ãã¼ãªã¼</a>ãå
±æãã¦ãã ãã</li>
<li>Kubernetesã®ææ°æ
å ±ã¯<a href="https://kubernetes.io/blog/">ããã°</a>ã§ããã«è©³ããèªããã¨ãã§ãã¾ã</li>
<li>ãªãªã¼ã¹ãã¼ã ã«ã¤ãã¦ã®è©³ç´°ã¯<a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Kubernetes Release Team</a>ãã覧ãã ãã</li>
</ul>
- Kubernetes v1.33: æãæãã¦ããã¨ããã«åä½ããããã«ãªã£ãImage Pull Policyï¼https://kubernetes.io/ja/blog/2025/05/12/kubernetes-v1-33-ensure-secret-pulled-images-alpha/Mon, 12 May 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/05/12/kubernetes-v1-33-ensure-secret-pulled-images-alpha/
<h2 id="æãæãã¦ããã¨ããã«åä½ããããã«ãªã£ãimage-pull-policy">æãæãã¦ããã¨ããã«åä½ããããã«ãªã£ãImage Pull Policyï¼</h2>
<p>Kubernetesã«ã¯æå¤ãªæåãããã¤ãåå¨ãã¾ããã<code>imagePullPolicy</code>ã®æåããã®ä¸ã¤ããããã¾ããã
KubernetesãPodã®å®è¡ãæ¬è³ªã¨ãããã®ã§ãããã¨ãè¸ã¾ããã¨ãèªè¨¼ãå¿
è¦ãªã¤ã¡ã¼ã¸ã«å¯¾ãã¦Podã®ã¢ã¯ã»ã¹ãå¶éãããã¨ããéã«ã10年以ä¸åãã<a href="https://github.com/kubernetes/kubernetes/issues/18787">issue 18787</a>ã¨ããå½¢ã§æ³¨æç¹ãåå¨ãã¦ãããã¨ãç¥ãã¨ãæå¤ã«æãããããã¾ããã
ãã®10å¹´è¶ãã®åé¡ã解決ããããªãªã¼ã¹ã¯ãé常ã«è奮ãã¹ããã®ã§ãã</p>
<div class="alert alert-info" role="alert"><h4 class="alert-heading">åè:</h4>ãã®ããã°è¨äºå
¨ä½ãéãã¦ãPodã®èªè¨¼æ
å ±ãã¨ããç¨èªãé »ç¹ã«ä½¿ããã¾ãã
ãã®æèã«ããã¦ã¯ããã®ç¨èªã¯ãä¸è¬çã«ã³ã³ããã¤ã¡ã¼ã¸ã®ãã«ãèªè¨¼ããããã«Podãå©ç¨ã§ããèªè¨¼æ
å ±å
¨ä½ãæãã¾ãã</div>
<h2 id="ifnotpresent-ãã¨ãæ¬æ¥æã¤ã¹ãã§ãªãã¨ãã¦ã">IfNotPresentããã¨ãæ¬æ¥æã¤ã¹ãã§ãªãã¨ãã¦ã</h2>
<p>ãã®åé¡ã®è¦ç¹ã¯ã<code>imagePullPolicy: IfNotPresent</code>ã¨ããè¨å®ããã¾ãã«æåéãã®æå³ã§ããåä½ããããã以ä¸ã®ãã¨ã¯ä¸åè¡ã£ã¦ããªãã£ãã¨ããç¹ã§ãã
ããã§ãã¨ããã·ããªãªãèãã¦ã¿ã¾ãããã
ã¾ãã<em>Namespace X</em>å
ã®<em>Pod A</em>ã<em>Node 1</em>ã«ã¹ã±ã¸ã¥ã¼ã«ããããã©ã¤ãã¼ããªãã¸ããªãã<em>image Foo</em>ãå¿
è¦ã¨ããç¶æ³ãèãã¾ãã
ã¤ã¡ã¼ã¸ãã«æã®èªè¨¼æ
å ±ã¨ãã¦ããã®Podã¯<code>imagePullSecrets</code>ã®<em>Secret 1</em>ãåç
§ãã¦ãã¾ãã
<em>Secret 1</em>ã«ã¯ããã©ã¤ãã¼ããªãã¸ããªããã¤ã¡ã¼ã¸ããã«ããããã«å¿
è¦ãªèªè¨¼æ
å ±ãå«ã¾ãã¦ãã¾ãã
Kubeletã¯<em>Pod A</em>ããæä¾ããã<em>Secret 1</em>ã®èªè¨¼æ
å ±ã使ç¨ããã¬ã¸ã¹ããªãã<em>container image Foo</em>ããã«ãããã¨ã«ãªãã¾ãã
ãããæå³ãã(ãã¤å®å
¨ãª)åä½ã§ãã</p>
<p>ãããããããããè峿·±ãã¨ããã§ãã
<em>Namespace Y</em>å
ã®<em>Pod B</em>ãããã¾ãã¾<em>Node 1</em>ã«ã¹ã±ã¸ã¥ã¼ã«ãããã¨ãã¾ãã
ãã®ã¨ããäºæããªã(ãã¤æ½å¨çã«å®å
¨ã§ãªã)äºæ
ãçºçãã¾ãã
<em>Pod B</em>ã¯<code>IfNotPresent</code>ã®ã¤ã¡ã¼ã¸ãã«ããªã·ã¼ãæå®ããåããã©ã¤ãã¼ãã¤ã¡ã¼ã¸ãåç
§ãã¦ããããããã¾ããã
ãããã<em>Pod B</em>ã¯<code>imagePullSecrets</code>ã§<code>Secret 1</code>(ãããã¯æ¬ä¾ã§ã¯ããããªãSecretã)ãæå®ãã¦ãã¾ããã
Kubeletããã®Podãå®è¡ãããã¨ããã¨ã<code>IfNotPresent</code>ã®ããªã·ã¼ãå°éããã¾ãã
Kubeletã¯ã<em>image Foo</em>ããã§ã«ãã¼ã«ã«ã«åå¨ãã¦ãããã¨ã確èªãããã®<em>image Foo</em>ã<em>Pod B</em>ã«æä¾ãã¾ãã
ã¤ã¾ãã<em>Pod B</em>ã¯ããããããã®ã¤ã¡ã¼ã¸ããã«ããæ¨©éã示ãèªè¨¼æ
å ±ãä¸åæä¾ãã¦ããªãã«ããããããããã®ã¤ã¡ã¼ã¸ãå®è¡ã§ãã¦ãã¾ãã®ã§ãã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2025/05/12/kubernetes-v1-33-ensure-secret-pulled-images-alpha/ensure_secret_image_pulls.svg"
alt="ãã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã¸ã¢ã¯ã»ã¹ãããã¨ãã2ã¤ã®Podã®å¦çã®å³ã1ã¤ç®ã®Podã¯pull secretãæã¡ã2ã¤ç®ã®Podã¯æããªãã"/> <figcaption>
<p>ç°ãªãPodã«ãã£ã¦ãã«ããããã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã使ç¨ãã</p>
</figcaption>
</figure>
<p><code>IfNotPresent</code>ã¯ãã¤ã¡ã¼ã¸ããã¼ãä¸ã«ãã§ã«åå¨ãã¦ããå ´åã«ã¯<em>image Foo</em>ããã«ãã¹ãã§ã¯ããã¾ãããããã¼ãã«ã¹ã±ã¸ã¥ã¼ã«ããããã¹ã¦ã®Podããéå»ã«ãã«ããããã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã¸ã¢ã¯ã»ã¹ã§ãã¦ãã¾ãã¨ããã®ã¯ãã»ãã¥ãªãã£ä¸ä¸é©åãªæ§æã§ãã
ãããã®Podã¯ããããããã®ã¤ã¡ã¼ã¸ããã«ããæ¨©éãå
¨ãä¸ãããã¦ããªãã£ãã®ã§ãã</p>
<h2 id="ifnotpresent-ãã ãæ¬æ¥ã¢ã¯ã»ã¹æ¨©ãããå ´åã«éã">IfNotPresentããã ãæ¬æ¥ã¢ã¯ã»ã¹æ¨©ãããå ´åã«éã</h2>
<p>Kubernetes v1.33ã§ã¯ãSIG Authã¨SIG Nodeãã¤ãã«ãã®(é常ã«å¤ããããã)åé¡ã¸ã®å¯¾å¿ãéå§ããé©åãªæ¤è¨¼ãè¡ãããããã«ãªãã¾ããï¼
åºæ¬çãªæå¾
ãããæåã¯å¤æ´ããã¦ãã¾ããã
ã¤ã¡ã¼ã¸ãåå¨ããªãå ´åãKubeletã¯ãã®ã¤ã¡ã¼ã¸ããã«ãããã¨ãã¾ãã
ãã®éã«ã¯ãåPodãæä¾ããèªè¨¼æ
å ±ã使ç¨ããã¾ãã
ãã®æåã¯1.33以åã¨åæ§ã§ãã</p>
<p>ã¤ã¡ã¼ã¸ããã§ã«åå¨ãã¦ããå ´åãKubeletã®æåã¯å¤åãã¾ãã
ããããã¯ãKubeletã¯Podã«ãã®ã¤ã¡ã¼ã¸ã®ä½¿ç¨ã許å¯ããåã«ããã®Podã®èªè¨¼æ
å ±ãæ¤è¨¼ããããã«ãªãã¾ãã</p>
<p>ãã®æ©è½ã®æ¹ä¿®ã«ããã£ã¦ã¯ãããã©ã¼ãã³ã¹ã¨ãµã¼ãã¹ã®å®å®æ§ãèæ
®ããã¦ãã¾ãã
åãèªè¨¼æ
å ±ã使ç¨ããPodã¯ãåèªè¨¼ãè¦æ±ããããã¨ã¯ããã¾ããã
ããã¯ãPodãåãKubernetesã®Secretãªãã¸ã§ã¯ãããèªè¨¼æ
å ±ãåå¾ãã¦ããå ´åã«ã¯ããã¨ããã®èªè¨¼æ
å ±ããã¼ãã¼ã·ã§ã³ããã¦ããã¨ãã¦ããå½ã¦ã¯ã¾ãã¾ãã</p>
<h2 id="never-pull-ãã ãèªè¨¼ããã¦ããå ´åã«éã">Never pullããã ãèªè¨¼ããã¦ããå ´åã«éã</h2>
<p><code>imagePullPolicy: Never</code>ãªãã·ã§ã³ã¯ãã¤ã¡ã¼ã¸ãåå¾ãã¾ããã
ãã ããã³ã³ããã¤ã¡ã¼ã¸ããã§ã«ãã¼ãä¸ã«åå¨ããå ´åããã®ãã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã使ç¨ãããã¨ãããã¹ã¦ã®Podã¯ãèªè¨¼æ
å ±ã®æç¤ºãæ±ãããããã®èªè¨¼æ
å ±ã¯æ¤è¨¼ããã¾ãã</p>
<p>åãèªè¨¼æ
å ±ã使ç¨ããPodã¯ãåèªè¨¼ãè¦æ±ããããã¨ã¯ããã¾ããã
䏿¹ã§ã以åã«ãã®ã¤ã¡ã¼ã¸ã®ãã«ã«æåããèªè¨¼æ
å ±ãæç¤ºããªãPodã«ã¯ããã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã®ä½¿ç¨ã許å¯ããã¾ããã</p>
<h2 id="always-pull-ãã ãèªè¨¼ããã¦ããå ´åã«éã">Always pullããã ãèªè¨¼ããã¦ããå ´åã«éã</h2>
<p><code>imagePullPolicy: Always</code>ã¯ãããã¾ã§ãæå³ããã«åä½ãã¦ãã¾ããã
ã¤ã¡ã¼ã¸ãè¦æ±ããããã³ã«ããã®ãªã¯ã¨ã¹ãã¯ã¬ã¸ã¹ããªã«éãããã¬ã¸ã¹ããªå´ã§èªè¨¼ãã§ãã¯ãå®è¡ããã¾ãã</p>
<p>以åã¯ããã©ã¤ãã¼ããªã³ã³ããã¤ã¡ã¼ã¸ãããã§ã«ã¤ã¡ã¼ã¸ããã«æ¸ã¿ã®ãã¼ãä¸ã§ä»ã®Podã«åå©ç¨ãããªãããã«ããå¯ä¸ã®ææ®µã¯ãPodã®ã¢ãããã·ã§ã³æã«å¼·å¶çã«<code>Always</code>ã®ã¤ã¡ã¼ã¸ãã«ããªã·ã¼ãé©ç¨ãããã¨ã§ããã</p>
<p>幸ãã«ãããã®æ¹æ³ã¯ããç¨åº¦ããã©ã¼ãã³ã¹ã«åªãã¦ãã¾ããã
ãã«ãããã®ã¯ã¤ã¡ã¼ã¸ãã®ãã®ã§ã¯ãªããã¤ã¡ã¼ã¸ãããã§ã¹ãã ãã ã£ãããã§ãã
ããããªãããããã§ãã³ã¹ãã¨ãªã¹ã¯ã¯åå¨ãã¦ãã¾ããã
æ°ãããã¼ã«ã¢ã¦ããã¹ã±ã¼ã«ã¢ãããã¾ãã¯Podã®åèµ·åã®éã«ã¯ãã¤ã¡ã¼ã¸ãæä¾ããã¬ã¸ã¹ããªãèªè¨¼ãã§ãã¯ã®ããã«å¿
ãå©ç¨å¯è½ã§ãªããã°ãªããããã®çµæãã¯ã©ã¹ã¿ã¼å
ã§ç¨¼åãããµã¼ãã¹ã®å®å®æ§ã«ããã¦ãã¤ã¡ã¼ã¸ã¬ã¸ã¹ããªãã¯ãªãã£ã«ã«ãã¹ã«ç½®ããããã¨ã«ãªãã¾ãã</p>
<h2 id="ä»çµã¿ã«ã¤ãã¦">ä»çµã¿ã«ã¤ãã¦</h2>
<p>ãã®æ©è½ã¯ãåãã¼ãã«åå¨ããæ°¸ç¶çãªãã¡ã¤ã«ãã¼ã¹ã®ãã£ãã·ã¥ã«åºã¥ãã¦åä½ãã¾ãã
以ä¸ã¯ããã®æ©è½ãã©ã®ããã«åä½ãããã®ç°¡ç¥åããã説æã§ãã
å®å
¨ãªä»æ§ã«ã¤ãã¦ã¯ã<a href="https://kep.k8s.io/2535">KEP-2535</a>ããåç
§ãã ããã</p>
<p>åãã¦ã¤ã¡ã¼ã¸ããªã¯ã¨ã¹ãããéã®å¦çã®æµãã¯ã以ä¸ã®ã¨ããã§ã:</p>
<ol>
<li>ãã©ã¤ãã¼ãã¬ã¸ã¹ããªããã¤ã¡ã¼ã¸ãè¦æ±ããPodãããã¼ãã«ã¹ã±ã¸ã¥ã¼ã«ãããã</li>
<li>è¦æ±ãããã¤ã¡ã¼ã¸ããå½è©²ãã¼ãä¸ã«åå¨ããªãã</li>
<li>Kubeletã¯ããã®ã¤ã¡ã¼ã¸ããã«ãããã¨ãã¦ããç¶æ
ã§ãããã¨ã示ãè¨é²ã使ããã</li>
<li>Kubeletã¯ãPodã«image pull secretã¨ãã¦æå®ãããKubernetesã®Secretããèªè¨¼æ
å ±ãæ½åºããããã使ç¨ãã¦ãã©ã¤ãã¼ãã¬ã¸ã¹ããªããã¤ã¡ã¼ã¸ãåå¾ãã¾ããã</li>
<li>ã¤ã¡ã¼ã¸ã®ãã«ã«æåããã¨ãKubeletã¯ãã®æåãè¨é²ããããã®è¨é²ã«ã¯ã使ç¨ãããèªè¨¼æ
å ±(ããã·ã¥å½¢å¼)ããã³ããããã®èªè¨¼æ
å ±ãåå¾ããããã«ä½¿ãããSecretã®æ
å ±ãå«ã¾ããã</li>
<li>Kubeletã¯ãå
ã®ãã«ãããã¨ãã¦ããç¶æ
ã§ãããã¨ã示ãè¨é²ãåé¤ããã</li>
<li>Kubeletã¯ããã«ã«æåãããã¨ã示ãè¨é²ãå¾ã®å©ç¨ã®ããã«ä¿æããã</li>
</ol>
<p>å¾ã«ãåããã¼ãã«ã¹ã±ã¸ã¥ã¼ã«ãããå¥ã®Podãã以åã«ãã«ããããã©ã¤ãã¼ãã¤ã¡ã¼ã¸ãè¦æ±ããå ´åã®å¦çã¯æ¬¡ã®ã¨ããã§ã:</p>
<ol>
<li>Kubeletã¯ããã®æ°ããPodããã«ã®ããã«æä¾ããèªè¨¼æ
å ±ã確èªããã</li>
<li>ãã®èªè¨¼æ
å ±ã®ããã·ã¥ãã¾ãã¯ãã®èªè¨¼æ
å ±ã®å
ã¨ãªã£ãSecretãã以åã®ãã«æåæã«è¨é²ãããããã·ã¥ã¾ãã¯Secretã¨ä¸è´ããå ´åããã®Podã«ã¯ä»¥åã«ãã«ãããã¤ã¡ã¼ã¸ã®ä½¿ç¨ã許å¯ãããã</li>
<li>èªè¨¼æ
å ±ã¾ãã¯ãã®èªè¨¼æ
å ±ã®å
ã¨ãªãSecretãããã®ã¤ã¡ã¼ã¸ã«é¢ãããã«æåè¨é²ã®ä¸ã«åå¨ããªãå ´åãKubeletã¯ãã®æ°ããèªè¨¼æ
å ±ã使ã£ã¦ãªã¢ã¼ãã¬ã¸ã¹ããªããã®åãã«ã試ã¿ãèªè¨¼ããã¼ãéå§ããã</li>
</ol>
<h2 id="試ãã¦ã¿ãã">試ãã¦ã¿ãã</h2>
<p>Kubernetes v1.33ã§ã¯ããã®æ©è½ã®ã¢ã«ãã¡çããªãªã¼ã¹ããã¾ããã
å®éã«è©¦ãã¦ã¿ãã«ã¯ããã¼ã¸ã§ã³1.33ã®Kubeletã«ããã¦ã<code>KubeletEnsureSecretPulledImages</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ãã¦ãã ããã</p>
<p>ãã®æ©è½ã追å ã®ãªãã·ã§ã³è¨å®ã®è©³ç´°ã«ã¤ãã¦ã¯ãKuberneteså
¬å¼ããã¥ã¡ã³ãã®<a href="https://kubernetes.io/ja/docs/concepts/containers/images/#ensureimagepullcredentialverification">ã¤ã¡ã¼ã¸ã®æ¦è¦ãã¼ã¸</a>ãã覧ãã ããã</p>
<h2 id="ä»å¾ã®äºå®">ä»å¾ã®äºå®</h2>
<p>ä»å¾ã®ãªãªã¼ã¹ã«ããã¦ã以ä¸ã®å¯¾å¿ãäºå®ãã¦ãã¾ã:</p>
<ol>
<li><a href="https://kep.k8s.io/4412">Kubeletã¤ã¡ã¼ã¸èªè¨¼ãããã¤ãç¨ã®æå½±ãµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³</a>ã¨ã®é£æºãå®ç¾ãã¾ããããã«ãããã¯ã¼ã¯ãã¼ãã«ç¹åããæ°ããã¤ã¡ã¼ã¸ãã«èªè¨¼æ
å ±ã®ä¾çµ¦å
ã追å ããã¾ãã</li>
<li>ãã®æ©è½ã®ããã©ã¼ãã³ã¹ãè¨æ¸¬ããå°æ¥çãªå¤æ´ã®å½±é¿ãè©ä¾¡ããããã®ãã³ããã¼ã¯ã¹ã¤ã¼ãã使ãã¾ãã</li>
<li>åã¤ã¡ã¼ã¸ãã«è¦æ±ã®ãã³ã«ãã¡ã¤ã«ãèªã¿è¾¼ãå¿
è¦ããªããªãããã«ãã¤ã³ã¡ã¢ãªãã£ãã·ã¥å±¤ãå®è£
ãã¾ãã</li>
<li>èªè¨¼æ
å ±ã®æå¹æéããµãã¼ããã以åã«æ¤è¨¼æ¸ã¿ã®èªè¨¼æ
å ±ã§ãå¼·å¶çã«åèªè¨¼ããããã«ãã¾ãã</li>
</ol>
<h2 id="åå ããã«ã¯">åå ããã«ã¯</h2>
<p>ãããã®å¤æ´ã«ã¤ãã¦è©³ããçè§£ããã«ã¯ã<a href="https://kep.k8s.io/2535">KEP-2535ãèªã</a>ã®ãæé©ã§ãã</p>
<p>ããã«é¢ããããæ¹ã¯ãKubernetes Slackã®<a href="https://kubernetes.slack.com/archives/C04UMAUC4UA">#sig-auth-authenticators-dev</a>ãã£ã³ãã«ã§ç§ãã¡ã«ãé£çµ¡ãã ãã(æå¾
ãåããã«ã¯<a href="https://slack.k8s.io/">https://slack.k8s.io/</a>ãã確èªãã ãã)ã
ã¾ããé鱿°´ææ¥ã«éå¬ããã¦ãã<a href="https://github.com/kubernetes/community/blob/master/sig-auth/README.md#meetings">SIG Authã®ãã¼ãã£ã³ã°</a>ã¸ã®åå ãæè¿ã§ãã</p>
- Kubernetes v1.33: HorizontalPodAutoscalerã®è¨å®å¯è½ãªè¨±å®¹å¤https://kubernetes.io/ja/blog/2025/04/28/kubernetes-v1-33-hpa-configurable-tolerance/Mon, 28 Apr 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/04/28/kubernetes-v1-33-hpa-configurable-tolerance/
<p>ãã®æç¨¿ã§ã¯ãKubernetes 1.33ã§åãã¦å©ç¨å¯è½ã«ãªã£ãæ°ããã¢ã«ãã¡æ©è½ã§ããã<em>HorizontalPodAutoscalerã®è¨å®å¯è½ãªè¨±å®¹å¤</em> ã«ã¤ãã¦èª¬æãã¾ãã</p>
<h2 id="ããã¯ä½ã§ãã">ããã¯ä½ã§ããï¼</h2>
<p><a href="https://kubernetes.io/ja/docs/tasks/run-application/horizontal-pod-autoscale/">æ°´å¹³Podèªåã¹ã±ã¼ãªã³ã°</a>ã¯ãKubernetesã®ããç¥ãããæ©è½ã§ããããªã½ã¼ã¹ä½¿ç¨çã«åºã¥ãã¦ã¬ããªã«ã追å ã¾ãã¯åé¤ãããã¨ã§ãã¯ã¼ã¯ãã¼ãã®ãµã¤ãºãèªåçã«èª¿æ´ã§ãã¾ãã</p>
<p>ãã¨ãã°ãKubernetesã¯ã©ã¹ã¿ã¼ã§50åã®ã¬ããªã«ãæã¤Webã¢ããªã±ã¼ã·ã§ã³ã稼åãã¦ããã¨ãã¾ãã
HorizontalPodAutoscaler(HPA)ãCPU使ç¨çã«åºã¥ãã¦ã¹ã±ã¼ãªã³ã°ããããã«æ§æããç®æ¨ä½¿ç¨çã75%ã«è¨å®ãã¾ãã
ç¾å¨ã®å
¨ã¬ããªã«ã«ãããCPU使ç¨çãç®æ¨ã®75%ãä¸åã90%ã§ããã¨ä»®å®ãã¾ãã
ãã®ã¨ããHPAã¯æ¬¡ã®å¼ã使ç¨ãã¦å¿
è¦ãªã¬ããªã«æ°ãè¨ç®ãã¾ãã</p>
<div class="math">$$desiredReplicas = ceil\left\lceil currentReplicas \times \frac{currentMetricValue}{desiredMetricValue} \right\rceil$$</div><p>ãã®ä¾ã®å ´åã§ã¯ãä¸è¨ã®ããã«ãªãã¾ãã</p>
<div class="math">$$50 \times (90/75) = 60$$</div><p>ãã®ãããHPAã¯åPodã®è² è·ã軽æ¸ããããã«ãã¬ããªã«æ°ã50ãã60ã«å¢ããã¾ãã
åæ§ã«ãCPU使ç¨çã75%ãä¸åã£ãå ´åã¯ãHPAãããã«å¿ãã¦ã¬ããªã«æ°ã縮å°ãã¾ãã
Kubernetesã®ããã¥ã¡ã³ãã§ã¯ã<a href="https://kubernetes.io/ja/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details">ã¹ã±ã¼ãªã³ã°ã¢ã«ã´ãªãºã ã®è©³ç´°ãªèª¬æ</a>ãæä¾ããã¦ãã¾ãã</p>
<p>å°ããªã¡ããªã¯ã¹ã®å¤åããããã³ã«ã¬ããªã«ã使ã¾ãã¯åé¤ãããã®ãé²ãããã«ãKubernetesã¯ãã¹ããªã·ã¹ã®ä»çµã¿ãé©ç¨ãã¦ãã¾ãã
ç¾å¨ã®å¤ã¨ç®æ¨å¤ã®å·®ã10%ãè¶
ããå ´åã«ã®ã¿ãã¬ããªã«æ°ã夿´ãã¾ãã
ä¸è¨ã®ä¾ã§ã¯ãç¾å¨å¤ã¨ç®æ¨å¤ã®æ¯çã¯\(90/75\)ãããªãã¡ç®æ¨ã20%ä¸åã£ã¦ããã10%ã®è¨±å®¹å¤ãè¶
ãã¦ãããããã¹ã±ã¼ã«ã¢ãããå®è¡ããã¾ãã</p>
<p>ãã®10%ã¨ããããã©ã«ãã®è¨±å®¹å¤ã¯ã¯ã©ã¹ã¿ã¼å
¨ä½ã«é©ç¨ããããã®ã§ãããããã¾ã§ã®Kubernetesã®ãªãªã¼ã¹ã§ã¯ç´°ãã調æ´ãããã¨ãã§ãã¾ããã§ããã
å¤ãã®ç¨éã«ã¯é©ãã¦ãã¾ããã10%ã®è¨±å®¹å¤ãæ°ååã®Podã«ç¸å½ãããããªå¤§è¦æ¨¡ãªãããã¤ã¡ã³ãã«ã¯ç²ããã¾ãã
ãã®çµæãã³ãã¥ããã£ã§ã¯ããã®å¤ã調æ´å¯è½ã«ãã¦ã»ããã¨ããè¦æã以åãã<a href="https://github.com/kubernetes/kubernetes/issues/116984">å¯ãããã¦ãã¾ãã</a>ã</p>
<p>Kubernetes v1.33ã§ã¯ããããå¯è½ã«ãªãã¾ããã</p>
<h2 id="ã©ããã£ã¦ä½¿ãã®ã">ã©ããã£ã¦ä½¿ãã®ãï¼</h2>
<p>Kubernetes v1.33ã¯ã©ã¹ã¿ã¼ã§<code>HPAConfigurableTolerance</code><a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ãæå¹ã«ããå¾ãHorizontalPodAutoscalerãªãã¸ã§ã¯ãã«å¯¾ãã¦å¸æãã許容å¤ãè¨å®ã§ãã¾ãã</p>
<p>許容å¤ã¯<code>spec.behavior.scaleDown</code>ããã³<code>spec.behavior.scaleUp</code>ãã£ã¼ã«ãã®ä¸ã«æå®ãããã¹ã±ã¼ã«ã¢ããã¨ã¹ã±ã¼ã«ãã¦ã³ã§ç°ãªãå¤ãè¨å®ãããã¨ãå¯è½ã§ãã
å
¸åçãªä½¿ãæ¹ã¨ãã¦ã¯ãã¹ã±ã¼ã«ã¢ããã«ã¯å°ããªè¨±å®¹ç¯å²(ã¹ãã¤ã¯ã«ç´ æ©ãåå¿ãããã)ãã¹ã±ã¼ã«ãã¦ã³ã«ã¯å¤§ããªè¨±å®¹ç¯å²(ã¡ããªã¯ã¹ã®å°ããªå¤åã«å¯¾ãã¦ã¬ããªã«ãéå°ã«è¿½å ã»åé¤ããªãããã«ãããã)ãæå®ãããã¨ãæãããã¾ãã</p>
<p>ãã¨ãã°ãã¹ã±ã¼ã«ãã¦ã³ã«å¯¾ãã¦5%ã®è¨±å®¹å¤ããã¹ã±ã¼ã«ã¢ããã«å¯¾ãã¦è¨±å®¹å¤ãæå®ããªãHPAã¯ã次ã®ããã«ãªãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>autoscaling/v2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>HorizontalPodAutoscaler<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>my-app<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>...<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">behavior</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scaleDown</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">tolerance</span>:<span style="color:#bbb"> </span><span style="color:#666">0.05</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scaleUp</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">tolerance</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span></span></span></code></pre></div><h2 id="ãã¹ã¦ã®è©³ç´°ãç¥ããã">ãã¹ã¦ã®è©³ç´°ãç¥ãããï¼</h2>
<p>ãã¹ã¦ã®æè¡çãªè©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-autoscaling/4951-configurable-hpa-tolerance">KEP-4951</a>ãåç
§ãã¦ãã ããã
ã¾ãã<a href="https://github.com/kubernetes/enhancements/issues/4951">issue 4951</a>ããã©ãã¼ãããã¨ã§ããã®æ©è½ã®å®å®çã¸ã®ç§»è¡ã«ã¤ãã¦ã®éç¥ãåãåããã¨ãã§ãã¾ãã</p>
- Kubernetes v1.33: EndpointsããEndpointSliceã¸ã®ç¶ç¶çãªç§»è¡ãé²ããhttps://kubernetes.io/ja/blog/2025/04/24/endpoints-deprecation/Thu, 24 Apr 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/04/24/endpoints-deprecation/
<p><a href="https://kubernetes.io/blog/2020/09/02/scaling-kubernetes-networking-with-endpointslices/">EndpointSlice</a> (<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/0752-endpointslices/README.md">KEP-752</a>)ãv1.15ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããv1.21ã§GAã¨ãªã£ã¦ä»¥æ¥ãEndpoints APIã¯Kubernetesã®ä¸ã§ã»ã¼ä½¿ããããåã被ã£ã¦ãã¾ãã
<a href="https://kubernetes.io/ja/docs/concepts/services-networking/dual-stack/">ãã¥ã¢ã«ã¹ã¿ãã¯ãããã¯ã¼ã¯</a>ã<a href="https://kubernetes.io/docs/reference/networking/virtual-ips/#traffic-distribution">ãã©ãã£ãã¯åæ£</a>ãªã©ãServiceã®æ°æ©è½ã¯EndpointSlice APIã§ã®ã¿ãµãã¼ãããã¦ãããããå
¨ã¦ã®ãµã¼ãã¹ãããã·ãGateway APIå®è£
ãåã³åæ§ã®ã³ã³ããã¼ã©ã¼ã¯EndpointsããEndpointSliceã¸ã®ç§»è¡ãä½åãªãããã¾ããã
ç¾æç¹ã®Endpoints APIã¯ãæªã ã«Endpointsã使ã£ã¦ããã¨ã³ãã¦ã¼ã¶ã¼ã®ã¯ã¼ã¯ãã¼ããã¹ã¯ãªããã®äºææ§ãç¶æããããã®åå¨ã«éãã¾ããã</p>
<p>Kubernetes 1.33以éãEndpoints APIã¯æ£å¼ã«éæ¨å¥¨ã¨ãªããEndpointsãªã½ã¼ã¹ãèªã¿æ¸ãããã¦ã¼ã¶ã¼ã«å¯¾ãã¦ãEndpointSliceã使ç¨ããããAPIãµã¼ãã¼ããè¦åãè¿ãããããã«ãªãã¾ããã</p>
<p>æçµçã«ã¯ããServiceã¨Podã«åºã¥ãã¦Endpointsãªãã¸ã§ã¯ããçæãã <em>Endpointsã³ã³ããã¼ã©ã¼</em> ãã¯ã©ã¹ã¿ã¼å
ã§å®è¡ããã¦ãããã¨ããåºæºã<a href="https://www.cncf.io/training/certification/software-conformance/">Kubernetes Conformance</a>ããé¤å¤ãããã¨ã<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/4974-deprecate-endpoints/README.md">KEP-4974</a>ã«ã¦è¨ç»ããã¦ãã¾ãã
ããã®å®ç¾ã«ãã£ã¦ãç¾ä»£çãªã»ã¨ãã©ã®ã¯ã©ã¹ã¿ã¼ã«ããã¦ä¸è¦ãªä½æ¥ãåé¿ãããã¨ãã§ãã¾ãã</p>
<p><a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">Kubernetes鿍奍ããªã·ã¼</a>ã«å¾ãã¨ãEndpointsã¿ã¤ãèªä½ãå®å
¨ã«å»æ¢ããããã¨ã¯ããããç¡ãã§ãããEndpoints APIã使ãã¯ã¼ã¯ãã¼ããã¹ã¯ãªãããä¿æãã¦ããã¦ã¼ã¶ã¼ã¯EndpointSliceã¸ã®ç§»è¡ãæ¨å¥¨ããã¾ãã</p>
<h2 id="endpointsããendpointsliceã¸ã®ç§»è¡ã«é¢ããæ³¨æç¹">EndpointsããEndpointSliceã¸ã®ç§»è¡ã«é¢ããæ³¨æç¹</h2>
<h3 id="endpointsliceãå©ç¨ãã">EndpointSliceãå©ç¨ãã</h3>
<p>ã¨ã³ãã¦ã¼ã¶ã¼ã«ã¨ã£ã¦ãEndpoints APIã¨EndpointSlice APIã®æå¤§ã®éãã¯ã<code>selector</code>ãæã¤å
¨ã¦ã®Serviceãèªèº«ã¨åãååã®Endpointsãªãã¸ã§ã¯ããå¿
ã1ã¤ãã¤æã¤ã®ã«å¯¾ãã1ã¤ã®Serviceã«ç´ã¥ããããEndpointSliceã¯è¤æ°åå¨ããå¯è½æ§ããããã¨ããç¹ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl get endpoints myservice
</span></span><span style="display:flex;"><span><span style="color:#888">Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice
</span></span></span><span style="display:flex;"><span><span style="color:#888">NAME ENDPOINTS AGE
</span></span></span><span style="display:flex;"><span><span style="color:#888">myservice 10.180.3.17:443 1h
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">$</span> kubectl get endpointslice -l kubernetes.io/service-name<span style="color:#666">=</span>myservice
</span></span><span style="display:flex;"><span><span style="color:#888">NAME ADDRESSTYPE PORTS ENDPOINTS AGE
</span></span></span><span style="display:flex;"><span><span style="color:#888">myservice-7vzhx IPv4 443 10.180.3.17 21s
</span></span></span><span style="display:flex;"><span><span style="color:#888">myservice-jcv8s IPv6 443 2001:db8:0123::5 21s
</span></span></span></code></pre></div><p>ãã®å ´åãServiceããã¥ã¢ã«ã¹ã¿ãã¯ã§ãããããEndpointSliceãIPv4ã¢ãã¬ã¹ç¨ã¨IPv6ã¢ãã¬ã¹ç¨ã®2ã¤åå¨ãã¾ãã
(Endpoints APIã¯ãã¥ã¢ã«ã¹ã¿ãã¯ããµãã¼ããã¦ããªããããEndpointsãªãã¸ã§ã¯ãã«ã¯ã¯ã©ã¹ã¿ã¼ã®ãã©ã¤ããªã¢ãã¬ã¹ãã¡ããªã¼ã®ã¢ãã¬ã¹ã®ã¿ã表示ããã¦ãã¾ãã)</p>
<p>è¤æ°ã®EndpointSliceãæã¤ <em>å¯è½æ§</em> ã¯ãè¤æ°ã®ã¨ã³ããã¤ã³ããåå¨ããããããServiceã«ããã¾ããã代表çãªã±ã¼ã¹ã3ã¤åå¨ãã¾ãã</p>
<ul>
<li>
<p>EndpointSliceã¯åä¸ã®IPãã¡ããªã¼ã®ã¨ã³ããã¤ã³ããã表ç¾ã§ããªãããããã¥ã¢ã«ã¹ã¿ãã¯Serviceã®å ´åãIPv4ç¨ã¨IPv6ç¨ã®EndpointSliceããããã使ããã¾ãã</p>
</li>
<li>
<p>åä¸ã®EndpointSliceå
ã®ã¨ã³ããã¤ã³ãã¯ãå
¨ã¦åããã¼ãã対象ã¨ããå¿
è¦ãããã¾ããä¾ãã°ãã¨ã³ããã¤ã³ãã¨ãªãPodããã¼ã«ã¢ã¦ããã¦ããªãã¹ã³ãããã¼ãçªå·ã80ãã8080ã«æ´æ°ããå ´åããã¼ã«ã¢ã¦ãä¸ã¯Serviceã«2ã¤ã®EndpointSliceãå¿
è¦ã«ãªãã¾ãã1ã¤ã¯ãã¼ã80ããªãã¹ã³ãã¦ããã¨ã³ããã¤ã³ãç¨ããã1ã¤ã¯ãã¼ã8080ããªãã¹ã³ãã¦ããã¨ã³ããã¤ã³ãç¨ã§ãã</p>
</li>
<li>
<p>Serviceã«100以ä¸ã®ã¨ã³ããã¤ã³ããåå¨ããå ´åãEndpointsã³ã³ããã¼ã©ã¼ã¯1ã¤ã®å·¨å¤§ãªãªãã¸ã§ã¯ãã«ã¨ã³ããã¤ã³ããéç´ãã¦ãã¾ããããEndpointSliceã³ã³ããã¼ã©ã¼ã¯ããããè¤æ°ã®EndpointSliceã«åå²ãã¾ãã</p>
</li>
</ul>
<p>Serviceã¨EndpointSliceã®éã«äºæ¸¬å¯è½ãª1対1ã®å¯¾å¿é¢ä¿ã¯ãªããããããServiceã«ç´ã¥ããããEndpointSliceãªã½ã¼ã¹ã®å®éã®ååãäºåã«ç¥ããã¨ã¯ã§ãã¾ããã
ãã®ãããServiceã«ç´ã¥ããããEndpointSliceãªã½ã¼ã¹ãåå¾ããéã¯ãååã§åå¾ããã®ã§ã¯ãªãã<code>"kubernetes.io/service-name"</code><a href="https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/labels/">ã©ãã«</a>ãç®çã®Serviceãæãã¦ããEndpointSliceãå
¨ã¦åå¾ããå¿
è¦ãããã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">kubectl get endpointslice -l kubernetes.io/service-name=myservice
</span></span></span></code></pre></div><p>Goã®ã³ã¼ãã§ãåæ§ã®å¤æ´ãå¿
è¦ã§ãã
Endpointsã使ç¨ãã¦æ¬¡ã®ããã«è¨è¿°ãã¦ããã¨ããã¯ã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#080;font-style:italic">// `namespace`å
ã®`name`ã¨ããååã®Endpointsãåå¾ãã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span>endpoint, err <span style="color:#666">:=</span> client.<span style="color:#00a000">CoreV1</span>().<span style="color:#00a000">Endpoints</span>(namespace).<span style="color:#00a000">Get</span>(ctx, name, metav1.GetOptions{})
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">if</span> err <span style="color:#666">!=</span> <span style="color:#a2f;font-weight:bold">nil</span> {
</span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">if</span> apierrors.<span style="color:#00a000">IsNotFound</span>(err) {
</span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// ãµã¼ãã¹ã«å¯¾å¿ããEndpointsã(ã¾ã )åå¨ããªã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">...</span>
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// ä»ã®ã¨ã©ã¼ãå¦ç
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">...</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic">// `endpoint`ã使ã£ãå¦çãç¶ãã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span><span style="color:#666">...</span>
</span></span></code></pre></div><p>EndpointSliceã使ãã¨æ¬¡ã®ããã«ãªãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#080;font-style:italic">// `namespace`å
ã®`name`ã¨ããServiceã«ç´ã¥ããå
¨ã¦ã®EndpointSliceãåå¾ãã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span>slices, err <span style="color:#666">:=</span> client.<span style="color:#00a000">DiscoveryV1</span>().<span style="color:#00a000">EndpointSlices</span>(namespace).<span style="color:#00a000">List</span>(ctx,
</span></span><span style="display:flex;"><span> metav1.ListOptions{LabelSelector: discoveryv1.LabelServiceName <span style="color:#666">+</span> <span style="color:#b44">"="</span> <span style="color:#666">+</span> name})
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">if</span> err <span style="color:#666">!=</span> <span style="color:#a2f;font-weight:bold">nil</span> {
</span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// ã¨ã©ã¼ãå¦ç
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">...</span>
</span></span><span style="display:flex;"><span>} <span style="color:#a2f;font-weight:bold">else</span> <span style="color:#a2f;font-weight:bold">if</span> <span style="color:#a2f">len</span>(slices.Items) <span style="color:#666">==</span> <span style="color:#666">0</span> {
</span></span><span style="display:flex;"><span> <span style="color:#080;font-style:italic">// Serviceã«å¯¾å¿ããEndpointSliceã(ã¾ã )åå¨ããªã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span> <span style="color:#666">...</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic">// `slices.Items`ã使ã£ãå¦çãç¶ãã
</span></span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"></span><span style="color:#666">...</span>
</span></span></code></pre></div><h3 id="endpointsliceãçæãã">EndpointSliceãçæãã</h3>
<p>æä½æ¥ã§Endpointsãçæãã¦ããç®æãã³ã³ããã¼ã©ã¼ã«ã¤ãã¦ã¯ãè¤æ°ã®EndpointSliceãèæ
®ããªãã¦ãããå ´åãå¤ããããæ¯è¼çç°¡åã«EndpointSliceã¸ã®ç§»è¡ãã§ãã¾ãã
Endpointsããå°ãæ
å ±ã®æ´çã®ä»æ¹ã¯å¤ãã£ã¦ãã¾ãããåã«EndpointSliceã¨ããæ°ããåã使ç¨ããããã«YAMLãGoã®ã³ã¼ããæ´æ°ããã ãã§æ¸ã¿ã¾ãã</p>
<p>ä¾ãã°ãã®ãããªEndpointsãªãã¸ã§ã¯ãã®å ´åã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Endpoints<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>myservice<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">subsets</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">addresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">ip</span>:<span style="color:#bbb"> </span><span style="color:#666">10.180.3.17</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">ip</span>:<span style="color:#bbb"> </span><span style="color:#666">10.180.5.22</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>nodeName: node-9<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">ip</span>:<span style="color:#bbb"> </span><span style="color:#666">10.180.18.2</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-7<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">notReadyAddresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">ip</span>:<span style="color:#bbb"> </span><span style="color:#666">10.180.6.6</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-8<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">ports</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>https<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">protocol</span>:<span style="color:#bbb"> </span>TCP<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">443</span><span style="color:#bbb">
</span></span></span></code></pre></div><p>次ã®ãããªEndpointSliceãªãã¸ã§ã¯ãã«ãªãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>discovery.k8s.io/v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>EndpointSlice<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>myservice<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">labels</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kubernetes.io/service-name</span>:<span style="color:#bbb"> </span>myservice<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">addressType</span>:<span style="color:#bbb"> </span>IPv4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">endpoints</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">addresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">10.180.3.17</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">addresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">10.180.5.22</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-9<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">addresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">10.180.18.12</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-7<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">addresses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">10.180.6.6</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span>node-8<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">conditions</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">ready</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">ports</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>https<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">protocol</span>:<span style="color:#bbb"> </span>TCP<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">443</span><span style="color:#bbb">
</span></span></span></code></pre></div><p>ããã¤ãçæç¹ãããã¾ãã</p>
<ol>
<li>
<p>ãã®ä¾ã§ã¯æç¤ºçã«<code>name</code>ãæå®ãã¦ãã¾ããã<code>generateName</code>ã使ç¨ãããã¨ã§APIãµã¼ãã¼ã«ã¦ãã¼ã¯ãªãµãã£ãã¯ã¹ãä»å ããããã¨ãã§ãã¾ããéè¦ãªã®ã¯ååèªä½ã§ã¯ãªããServiceãæã<code>"kubernetes.io/service-name"</code>ã©ãã«ã§ãã</p>
</li>
<li>
<p>æç¤ºçã«<code>addressType: IPv4</code>(ã¾ãã¯<code>IPv6</code>)ãæå®ããå¿
è¦ãããã¾ãã</p>
</li>
<li>
<p>EndpointSliceã¯ãEndpointsã®<code>"subsets"</code>ãã£ã¼ã«ãã®ä¸è¦ç´ ã¨é¡ä¼¼ãã¦ãã¾ããè¤æ°ã®subsetsãæã¤Endpointsãªãã¸ã§ã¯ãã表ç¾ããå ´åãåºæ¬çã«ã¯ç°ãªã<code>"ports"</code>ãæã¤è¤æ°ã®EndpointSliceã«ããå¿
è¦ãããã¾ãã</p>
</li>
<li>
<p><code>endpoints</code>ãã£ã¼ã«ãã¨<code>addresses</code>ãã£ã¼ã«ãã¯ã©ã¡ããé
åã§ãããæ
£ç¿çã«<code>addresses</code>ãã£ã¼ã«ãã¯1ã¤ã®è¦ç´ ããå«ã¿ã¾ãããServiceã«è¤æ°ã®ã¨ã³ããã¤ã³ããããå ´åã¯ã<code>endpoints</code>ãã£ã¼ã«ãã«è¤æ°ã®è¦ç´ ãæãããããããã®<code>addresses</code>ãã£ã¼ã«ãã«ã¯1ã¤ã®è¦ç´ ã®ã¿ãå«ããå¿
è¦ãããã¾ãã</p>
</li>
<li>
<p>Endpoints APIã§ã¯ãreadyãã¨ãnot-readyãã®ã¨ã³ããã¤ã³ããå¥ã
ã«åæããã¾ãããEndpointSlice APIã§ã¯åã¨ã³ããã¤ã³ãã«å¯¾ãã¦conditions(<code>ready: false</code>ãªã©)ãè¨å®ãããã¨ãã§ãã¾ãã</p>
</li>
</ol>
<p>ãã¡ãããã²ã¨ãã³EndpointSliceã«ç§»è¡ããã°ãtopology hintsãterminating endpointsãªã©EndpointSliceç¹æã®æ©è½ãæ´»ç¨ã§ãã¾ãã
詳細ã¯<a href="https://kubernetes.io/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1">EndpointSlice APIã®ããã¥ã¡ã³ã</a>ããåç
§ä¸ããã</p>
- Kubernetes v1.33: Octarinehttps://kubernetes.io/ja/blog/2025/04/23/kubernetes-v1-33-release/Wed, 23 Apr 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/04/23/kubernetes-v1-33-release/
<p><strong>ç·¨éè
:</strong> Agustina Barbetta, Aakanksha Bhende, Udi Hofesh, Ryota Sawada, Sneha Yadav</p>
<p>ååã®ãªãªã¼ã¹ã¨åæ§ã«ãKubernetes v1.33ãªãªã¼ã¹ã§ã¯æ°ããGAããã¼ã¿ãã¢ã«ãã¡ã®æ©è½ãå°å
¥ããã¦ãã¾ãã
é«å質ãªãªãªã¼ã¹ã®ç¶ç¶çãªæä¾ã¯ãç§ãã¡ã®éçºãµã¤ã¯ã«ã®å¼·ãã¨ã³ãã¥ããã£ããã®æ´»çºãªãµãã¼ãã示ãã¦ãã¾ãã</p>
<p>ãã®ãªãªã¼ã¹ã«ã¯64åã®æ©è½æ¹åãå«ã¾ãã¦ãã¾ãã
ãããã®ãã¡ãGAã¸ã®ææ ¼ã18åããã¼ã¿ã¸ã®ç§»è¡ã20åãã¢ã«ãã¡ã¨ãã¦ã®å°å
¥ã24åãæ©è½ã®éæ¨å¥¨ååã³æ¤åã2åã¨ãªã£ã¦ãã¾ãã</p>
<p>ã¾ãããã®ãªãªã¼ã¹ã«ã¯ããã¤ãã®æ³¨ç®ãã¹ã<a href="#deprecations-and-removals">鿍奍åã¨åé¤</a>ãããã¾ãã
ã¾ã å¤ããã¼ã¸ã§ã³ã®Kubernetesãå®è¡ãã¦ããå ´åã¯ããããã«å¿
ãç®ãéãã¦ãã ããã</p>
<h2 id="ãªãªã¼ã¹ã®ãã¼ãã¨ãã´">ãªãªã¼ã¹ã®ãã¼ãã¨ãã´</h2>
<figure class="release-logo ">
<img src="https://kubernetes.io/blog/2025/04/23/kubernetes-v1-33-release/k8s-1.33.svg"
alt="Kubernetes v1.33 Octarineã®ãã´"/>
</figure>
<p>Kubernetes v1.33ã®ãã¼ãã¯<strong>Octarine: éæ³ã®è²</strong><sup>1</sup>ã§ãããªã¼ã»ãã©ãã§ããã® <em>ãã£ã¹ã¯ã¯ã¼ã«ã</em> ã·ãªã¼ãºã«çæ³ãå¾ã¦ãã¾ãã</p>
<p>ãã®ãªãªã¼ã¹ã¯ãKubernetesãã¨ã³ã·ã¹ãã å
¨ä½ã§å¯è½ã«ãããªã¼ãã³ã½ã¼ã¹ã®éæ³<sup>2</sup>ã強調ãã¦ãã¾ãã</p>
<p>ãã£ã¹ã¯ã¯ã¼ã«ãã®ä¸çã«è©³ããæ¹ãªãã"è¦ããã大å¦"ã®å¡ã®ä¸ã«æ¢ã¾ã£ãå°ããªæ²¼ãã©ã´ã³ããã¢ã³ã¯ã»ã¢ã«ãã¼ã¯ã®è¡ã®ä¸ã«64ã®æ<sup>3</sup>ã¨å
±ã«æµ®ãã¶Kubernetesã®æãè¦ä¸ããæ§åãæãæµ®ãã¹ã¦ãããã¨ã§ãããã</p>
<p>Kubernetesã10å¹´ã®ç¯ç®ãè¿ãæ°ããª10å¹´ã¸è¸ã¿åºãã«ããããç§ãã¡ã¯ã¡ã³ããã¼ã®éè¡ãæ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã®å¥½å¥å¿ãããã¦ããã¸ã§ã¯ããæ¨é²ããååçãªç²¾ç¥ãç¥ç¦ãã¾ãã
v1.33ãªãªã¼ã¹ã¯ããã©ãã§ãããæ¸ããããã«ã<em>ãããæ¹ãç¥ã£ã¦ãã¦ããããã¯ã¾ã éæ³ã ã</em> ã¨ãããã¨ãæãåºããã¦ããã¾ãã
Kubernetesã®ã³ã¼ããã¼ã¹ã®è©³ç´°ããã¹ã¦ç¥ã£ã¦ããã¨ãã¦ãããªãªã¼ã¹ãµã¤ã¯ã«ã®çµããã«ç«ã¡æ¢ã¾ã£ã¦ã¿ãã¨ãKubernetesã¯ã¾ã éæ³ã®ã¾ã¾ã§ãããã¨ããããã§ãããã</p>
<p>Kubernetes v1.33ã¯ãçã«åè¶ãããã®ãçã¿åºãããã«ä¸çä¸ã®ä½ç¾äººãã®ã³ã³ããªãã¥ã¼ã¿ã¼<sup>4</sup>ãååããããªã¼ãã³ã½ã¼ã¹ã¤ããã¼ã·ã§ã³ã®æç¶çãªåã®è¨¼ã§ãã
ããããæ°æ©è½ã®èå¾ã«ã¯ãããã¸ã§ã¯ããç¶æã»æ¹åããããå®å
¨æ§ãä¿¡é ¼æ§ãæ
ä¿ããããè¨ç»éãã«ãªãªã¼ã¹ãããã¨ãã£ãKubernetesã³ãã¥ããã£ã®åããããã¾ãã</p>
<p><sub>1. Octarineã¯ãã£ã¹ã¯ã¯ã¼ã«ãä¸çã®ç¥è©±ä¸ã®8çªç®ã®è²ã§ããèå
ã®ç·ããã£ãé»ç´«è²ãã¨è¡¨ç¾ãããæ¶ç©ºã®è²ã§ãã
ç§è¡ã«èª¿å¾ããã人ã
âéæ³ä½¿ããé女ãããã¦ãã¡ããç«ã«ã®ã¿è¦ãã¾ãã
ä¸è¬äººã¯ç®ãéããæã®ã¿ãã®è²ãæãããã¨ãã§ããã¨ããã¦ãã¾ãã
ããã¦æã
ãIPãã¼ãã«ã®ã«ã¼ã«ãé·æéè¦ã¤ãã¦ãã人ã«ãè¦ããããã«ãªãã¾ãã</sub><br>
<sub>2. ãååã«çºéããæè¡ã¯éæ³ã¨åºå¥ãã¤ããªããã§ãããâ¦ï¼</sub><br>
<sub>3. v1.33ã«ã64ã®KEP(Kubernetes Enhancement Proposals)ãå«ã¾ãã¦ãã¾ãããããã¯å¶ç¶ã§ã¯ããã¾ããã</sub><br>
<sub>4. v1.33ã®ããã¸ã§ã¯ãæ´»åç¶æ³ã»ã¯ã·ã§ã³ãã覧ãã ãã ð</sub></p>
<h2 id="主ãªã¢ãããã¼ãæ
å ±">主ãªã¢ãããã¼ãæ
å ±</h2>
<p>Kubernetes v1.33ã¯æ°æ©è½ã¨æ¹åç¹ãæºè¼ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ããªãªã¼ã¹ãã¼ã ãç¹ã«æ³¨ç®ãã¦æ¬²ãããé¸ããããã®ã¢ãããã¼ãå
容ããç´¹ä»ãã¾ãï¼</p>
<h3 id="ga-ãµã¤ãã«ã¼ã³ã³ãã">GA: ãµã¤ãã«ã¼ã³ã³ãã</h3>
<p>ãµã¤ãã«ã¼ãã¿ã¼ã³ã§ã¯ããããã¯ã¼ãã³ã°ããã®ã³ã°ãã¡ããªã¯ã¹åéãªã©ã®åéã«ãããè¿½å æ©è½ãå¦çããããã«ãå¥éè£å©çãªã³ã³ããããããã¤ããå¿
è¦ãããã¾ãã
ãµã¤ãã«ã¼ã³ã³ããã¯v1.33ã§GAã«ææ ¼ãã¾ããã</p>
<p>Kubernetesã§ã¯ã<code>restartPolicy: Always</code>ãè¨å®ããããç¹å¥ãªç¨®é¡ã®initã³ã³ããã¨ãã¦ãµã¤ãã«ã¼ãå®è£
ãã¦ãã¾ãã
ãµã¤ãã«ã¼ã¯ãã¢ããªã±ã¼ã·ã§ã³ã³ã³ããããå
ã«èµ·åããPodã®ã©ã¤ããµã¤ã¯ã«å
¨ä½ãéãã¦å®è¡ããç¶ããã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã®çµäºãå¾
ã£ã¦ããèªåçã«çµäºãããã¨ãä¿è¨¼ããã¾ãã</p>
<p>ããã«ããµã¤ãã«ã¼ã¯probe(startupãreadinessãliveness)ã使ç¨ãã¦åä½ç¶æ
ãéç¥ã§ããä»ãã¡ã¢ãªä¸è¶³æã®æ©æçµäºãé²ããããOut-Of-Memory(OOM)ã¹ã³ã¢èª¿æ´ããã©ã¤ããªã³ã³ããã¨æãããã¦ãã¾ãã</p>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/sidecar-containers/">ãµã¤ãã«ã¼ã³ã³ãã</a>ããèªã¿ãã ããã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/753">KEP-753: Sidecar Containers</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãã¼ã¿-podã®åç´ã¹ã±ã¼ãªã³ã°ã®ããã®ã¤ã³ãã¬ã¼ã¹ãªãªã½ã¼ã¹ãªãµã¤ãº">ãã¼ã¿: Podã®åç´ã¹ã±ã¼ãªã³ã°ã®ããã®ã¤ã³ãã¬ã¼ã¹ãªãªã½ã¼ã¹ãªãµã¤ãº</h3>
<p>ã¯ã¼ã¯ãã¼ãã¯DeploymentãStatefulSetãªã©ã®APIã使ç¨ãã¦å®ç¾©ã§ãã¾ãã
ãããã¯ã¡ã¢ãªãCPUãªã½ã¼ã¹ãã¾ãå®è¡ãã¹ãPodã®æ°(ã¬ããªã«æ°)ãå«ããå®è¡ãããã¹ãPodã®ãã³ãã¬ã¼ãã示ãã¦ãã¾ãã
ã¯ã¼ã¯ãã¼ãã¯Podã®ã¬ããªã«æ°ãæ´æ°ãããã¨ã§æ°´å¹³æ¹åã«ã¹ã±ã¼ã«ããããPodã®ã³ã³ããã«å¿
è¦ãªãªã½ã¼ã¹ãæ´æ°ãããã¨ã§åç´æ¹åã«ã¹ã±ã¼ã«ãããã§ãã¾ãã
ãã®æ©è½æ¹åãå
¥ãåãPodã®<code>spec</code>ã§å®ç¾©ãããã³ã³ãããªã½ã¼ã¹ã¯ä¸å¤ã§ããããããã®è©³ç´°ãPodãã³ãã¬ã¼ãå
ã§æ´æ°ããã«ã¯Podã®ç½®ãæããå¿
è¦ã§ããã</p>
<p>ããããåèµ·åç¡ãã§æ¢åã®Podã®ãªã½ã¼ã¹è¨å®ãåçã«æ´æ°ã§ããã¨ãããã©ãã§ããããï¼</p>
<p><a href="https://kep.k8s.io/1287">KEP-1287</a>ã¯ãã¾ãã«ãã®ãããªã¤ã³ãã¬ã¼ã¹Podæ´æ°ãå¯è½ã«ããããã®ãã®ã§ãã
ããã¯v1.27ã§ã¢ã«ãã¡ã¨ãã¦ãªãªã¼ã¹ãããv1.33ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ããã«ãããã¹ãã¼ããã«ãªããã»ã¹ããã¦ã³ã¿ã¤ã ãªãã§åç´æ¹åã«ã¹ã±ã¼ã«ã¢ãããããããã©ãã£ãã¯ãå°ãªãæã·ã¼ã ã¬ã¹ã«ã¹ã±ã¼ã«ãã¦ã³ãããã¨ãã§ãã¾ãã
ããã«ã¯èµ·åæã«å¤§ããªãªã½ã¼ã¹ãå²ãå½ã¦ã¦ãåæè¨å®ãå®äºããã忏ããããããªã©ããã¾ãã¾ãªå¯è½æ§ãéããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã¨SIG Autoscalingã主å°ãã<a href="https://kep.k8s.io/1287">KEP-1287: In-Place Update of Pod Resources</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¢ã«ãã¡-kuberc-ã«ããkubectlåãã¦ã¼ã¶ã¼è¨å®ã®æ°ããè¨è¿°ãªãã·ã§ã³">ã¢ã«ãã¡: <code>.kuberc</code>ã«ããkubectlåãã¦ã¼ã¶ã¼è¨å®ã®æ°ããè¨è¿°ãªãã·ã§ã³</h3>
<p>v1.33ã«ã¦ã<code>kubectl</code>ã¯æ°ããã¢ã«ãã¡æ©è½ã¨ãã¦ãã¦ã¼ã¶ã¼è¨å®ãã¯ã©ã¹ã¿ã¼è¨å®ã¨åãã¦æç¤ºçã«è¨è¿°ãããã¡ã¤ã«ã<code>.kuberc</code>ãå°å
¥ãã¾ãã
ãã®ãã¡ã¤ã«ã«ã¯<code>kubectl</code>ã®ã¨ã¤ãªã¢ã¹ã䏿¸ãè¨å®(ä¾ãã°<a href="https://kubernetes.io/docs/reference/using-api/server-side-apply/">Server-Side Apply</a>ãããã©ã«ãã§ä½¿ç¨ãããªã©)ãå«ãããã¨ãã§ãã¾ãããã¯ã©ã¹ã¿ã¼èªè¨¼æ
å ±ããã¹ãæ
å ±ã¯kubeconfigã«æ®ãã¦ããå¿
è¦ãããã¾ãã</p>
<p>ãã®åé¢ã«ãã£ã¦ã対象ã¯ã©ã¹ã¿ã¼ã使ç¨ããkubeconfigã«é¢ãããã<code>kubectl</code>ã®æä½ã«é¢ããã¦ã¼ã¶ã¼è¨å®ã¯åãç©ã使ãåããããã«ãªãã¾ãã</p>
<p>ãã®ã¢ã«ãã¡æ©è½ãæå¹ã«ããããã«ã¯ãç°å¢å¤æ°<code>KUBECTL_KUBERC=true</code>ãè¨å®ãã<code>.kuberc</code>è¨å®ãã¡ã¤ã«ã使ãã¦ä¸ããã
ããã©ã«ãã®ç¶æ
ã§ã¯ã<code>kubectl</code>ã¯<code>~/.kube/kuberc</code>ã«ãã®ãã¡ã¤ã«ãç¡ããæ¢ãã¾ãã
<code>--kuberc</code>ãã©ã°ã使ç¨ããã¨ã代ããã®å ´æãæå®ãããã¨ãã§ãã¾ãã</p>
<p>ä¾: <code>kubectl --kuberc /var/kube/rc</code></p>
<p>ãã®ä½æ¥ã¯SIG CLIã主å°ãã<a href="https://kep.k8s.io/3104">KEP-3104: Separate kubectl user preferences from cluster configs</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="gaã«ææ ¼ããæ©è½">GAã«ææ ¼ããæ©è½</h2>
<p><em>ããã¯v1.33ãªãªã¼ã¹å¾ã«GAã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="ã¤ã³ããã¯ã¹ä»ãjobã®ã¤ã³ããã¯ã¹ãã¨ã®ããã¯ãªãå¶é">ã¤ã³ããã¯ã¹ä»ãJobã®ã¤ã³ããã¯ã¹ãã¨ã®ããã¯ãªãå¶é</h3>
<p>ãã®ãªãªã¼ã¹ã§ã¯ãã¤ã³ããã¯ã¹ä»ãJobã®ã¤ã³ããã¯ã¹ãã¨ã«ããã¯ãªãå¶éãè¨å®ã§ããæ©è½ãGAã«ææ ¼ãã¾ããã
徿¥ãKubernetes Jobã®<code>backoffLimit</code>ãã©ã¡ã¼ã¿ã¼ã¯ãJobå
¨ä½ã失æã¨ã¿ãªãããåã®å試è¡åæ°ãæå®ãã¦ãã¾ããã
ãã®æ©è½å¼·åã«ãããã¤ã³ããã¯ã¹ä»ãJobå
ã®åã¤ã³ããã¯ã¹ãç¬èªã®ããã¯ãªãå¶éãæã¤ãã¨ãã§ããããã«ãªããåã
ã®ã¿ã¹ã¯ã®å試è¡åä½ãããç´°ããå¶å¾¡ã§ããããã«ãªãã¾ããã
ããã«ãããç¹å®ã®ã¤ã³ããã¯ã¹ã®å¤±æãJobå
¨ä½ãæ©æã«çµäºããããã¨ãªããä»ã®ã¤ã³ããã¯ã¹ãç¬ç«ãã¦å¦çãç¶ç¶ã§ããããã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Appsã主å°ãã<a href="https://kep.k8s.io/3850">KEP-3850: Backoff Limit Per Index For Indexed Jobs</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="jobæåããªã·ã¼">Jobæåããªã·ã¼</h3>
<p><code>.spec.successPolicy</code>ã使ç¨ãã¦ã¦ã¼ã¶ã¼ã¯ã©ã®Podã¤ã³ããã¯ã¹ãæåããå¿
è¦ãããã(<code>succeededIndexes</code>)ãä½åã®Podãæåããå¿
è¦ãããã(<code>succeededCount</code>)ãã¾ãã¯ãã®ä¸¡æ¹ã®çµã¿åãããæå®ã§ãã¾ãã
ãã®æ©è½ã¯ãé¨åçãªå®äºã§ååãªã·ãã¥ã¬ã¼ã·ã§ã³ããªã¼ãã¼ã®æåã ããJobã®å
¨ä½çãªçµæã決å®ãããªã¼ãã¼ã»ã¯ã¼ã«ã¼ãã¿ã¼ã³ãªã©ããã¾ãã¾ãªã¯ã¼ã¯ãã¼ãã«å©ç¹ãããããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Appsã主å°ãã<a href="https://kep.k8s.io/3998">KEP-3998: Job success/completion policy</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãã¤ã³ããããserviceaccountãã¼ã¯ã³ã®ã»ãã¥ãªãã£æ¹å">ãã¤ã³ããããServiceAccountãã¼ã¯ã³ã®ã»ãã¥ãªãã£æ¹å</h3>
<p>ãã®æ©è½å¼·åã§ã¯ä¸æã®ãã¼ã¯ã³èå¥å(ããªãã¡<a href="https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.7">JWT IDã¯ã¬ã¼ã ãJTIã¨ãå¼ã°ãã</a>)ããã¼ãæ
å ±ããã¼ã¯ã³å
ã«å«ãããã¨ã§ãããæ£ç¢ºãªæ¤è¨¼ã¨ç£æ»ãå¯è½ã«ããæ©è½ãªã©ãå°å
¥ããã¾ããã
ããã«ããã¼ãåºæã®å¶éããµãã¼ããããã¼ã¯ã³ãæå®ããããã¼ãã§ã®ã¿ä½¿ç¨å¯è½ã§ãããã¨ãä¿è¨¼ãããã¨ã§ããã¼ã¯ã³ã®ä¸æ£ä½¿ç¨ãæ½å¨çãªã»ãã¥ãªãã£ä¾µå®³ã®ãªã¹ã¯ã使¸ãã¾ãã
ãããã®æ¹åã¯ç¾å¨ä¸è¬æä¾ãããKubernetesã¯ã©ã¹ã¿ã¼å
ã®ãµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®å
¨ä½çãªã»ãã¥ãªãã£æ
å¢ãå¼·åãããã¨ãç®çã¨ãã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4193">KEP-4193: Bound service account token improvements</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubectlã§ã®ãµããªã½ã¼ã¹ãµãã¼ã">kubectlã§ã®ãµããªã½ã¼ã¹ãµãã¼ã</h3>
<p><code>--subresource</code>弿°ãç¾å¨kubectlã®ãµãã³ãã³ã(<code>get</code>ã<code>patch</code>ã<code>edit</code>ã<code>apply</code>ã<code>replace</code>ãªã©)ã§ä¸è¬æä¾ãããããã«ãªããã¦ã¼ã¶ã¼ã¯ãããããµãã¼ããããã¹ã¦ã®ãªã½ã¼ã¹ã®ãµããªã½ã¼ã¹ãåå¾ããã³æ´æ°ã§ããããã«ãªãã¾ããã
ãµãã¼ãããã¦ãããµããªã½ã¼ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/ja/docs/reference/kubectl/conventions/#subresources">Subresources</a>ãã覧ãã ããã</p>
<p>ãã®ä½æ¥ã¯SIG CLIã主å°ãã<a href="https://kep.k8s.io/2590">KEP-2590: Add subresource support to kubectl</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="è¤æ°ã®ãµã¼ãã¹cidr">è¤æ°ã®ãµã¼ãã¹CIDR</h2>
<p>ãã®æ©è½å¼·åã§ã¯ããµã¼ãã¹IPã®å²ãå½ã¦ãã¸ãã¯ã®æ°ããå®è£
ãå°å
¥ããã¾ããã
ã¯ã©ã¹ã¿ã¼å
¨ä½ã§ã<code>type: ClusterIP</code>ã®åãµã¼ãã¹ã«ã¯ä¸æã®IPã¢ãã¬ã¹ãå²ãå½ã¦ãããå¿
è¦ãããã¾ãã
æ¢ã«å²ãå½ã¦ããã¦ããç¹å®ã®ClusterIPã§ãµã¼ãã¹ã使ãããã¨ããã¨ãã¨ã©ã¼ãè¿ããã¾ãã
æ´æ°ãããIPã¢ãã¬ã¹å²ãå½ã¦ãã¸ãã¯ã¯ã<code>ServiceCIDR</code>ã¨<code>IPAddress</code>ã¨ãã2ã¤ã®æ°ããå®å®åããAPIãªãã¸ã§ã¯ãã使ç¨ãã¾ãã
ç¾å¨ä¸è¬æä¾ããã¦ãããããã®APIã«ãããã¯ã©ã¹ã¿ã¼ç®¡çè
ã¯(æ°ããServiceCIDRãªãã¸ã§ã¯ãã使ãããã¨ã§)<code>type: ClusterIP</code>ãµã¼ãã¹ã«å©ç¨å¯è½ãªIPã¢ãã¬ã¹ã®æ°ãåçã«å¢ãããã¨ãã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Networkã主å°ãã<a href="https://kep.k8s.io/1880">KEP-1880: Multiple Service CIDRs</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kube-proxyã®-nftables-ããã¯ã¨ã³ã">kube-proxyã®<code>nftables</code>ããã¯ã¨ã³ã</h3>
<p>kube-proxyã®<code>nftables</code>ããã¯ã¨ã³ããGAã«ãªããKubernetesã¯ã©ã¹ã¿ã¼å
ã®ãµã¼ãã¹å®è£
ã®ããã©ã¼ãã³ã¹ã¨ã¹ã±ã¼ã©ããªãã£ã大å¹
ã«åä¸ãããæ°ããå®è£
ã追å ããã¾ããã
äºææ§ã®çç±ãããLinuxãã¼ãã§ã¯ããã©ã«ãã§<code>iptables</code>ã®ã¾ã¾ã§ãã
試ãã¦ã¿ããå ´åã¯<a href="https://kubernetes.io/docs/reference/networking/virtual-ips/#migrating-from-iptables-mode-to-nftables">Migrating from iptables mode to nftables</a>ãã確èªãã ããã</p>
<p>ãã®ä½æ¥ã¯SIG Networkã主å°ãã<a href="https://kep.k8s.io/3866">KEP-3866: nftables kube-proxy backend</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="trafficdistribution-preferclose-ã«ããtopology-aware-routing"><code>trafficDistribution: PreferClose</code>ã«ããTopology Aware Routing</h3>
<p>ãã®ãªãªã¼ã¹ã§ã¯ãTopology Aware Routingã¨ãã©ãã£ãã¯åæ£ãGAã«ææ ¼ãããã«ãã¾ã¼ã³ã¯ã©ã¹ã¿ã¼ã§ã®ãµã¼ãã¹ãã©ãã£ãã¯ãæé©åã§ããããã«ãªãã¾ããã
EndpointSliceã®Topology Aware Hintã«ããkube-proxyãªã©ã®ã³ã³ãã¼ãã³ãã¯åãã¾ã¼ã³å
ã®ã¨ã³ããã¤ã³ãã¸ã®ãã©ãã£ãã¯ã«ã¼ãã£ã³ã°ãåªå
ã§ããããã«ãªããã¬ã¤ãã³ã·ã¼ã¨ã¯ãã¹ã¾ã¼ã³ãã¼ã¿è»¢éã³ã¹ãã忏ããã¾ãã
ãããåºã«ãServiceã®ä»æ§ã«<code>trafficDistribution</code>ãã£ã¼ã«ãã追å ããã<code>PreferClose</code>ãªãã·ã§ã³ã«ãããããã¯ã¼ã¯ãããã¸ã¼ã«åºã¥ãã¦æãè¿ãå©ç¨å¯è½ãªã¨ã³ããã¤ã³ãã«ãã©ãã£ãã¯ãèªå°ããã¾ãã
ãã®æ§æã¯ã¾ã¼ã³ééä¿¡ãæå°éã«æãããã¨ã§ããã©ã¼ãã³ã¹ã¨ã³ã¹ãå¹çãåä¸ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Networkã主å°ãã<a href="https://kep.k8s.io/4444">KEP-4444: Traffic Distribution for Services</a>ã¨<a href="https://kep.k8s.io/2433">KEP-2433: Topology Aware Routing</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="smté対å¿ã¯ã¼ã¯ãã¼ããæå¦ãããªãã·ã§ã³">SMTé対å¿ã¯ã¼ã¯ãã¼ããæå¦ãããªãã·ã§ã³</h3>
<p>ãã®æ©è½ã¯CPUããã¼ã¸ã£ã¼ã«ããªã·ã¼ãªãã·ã§ã³ã追å ããSimultaneous Multithreading(SMT)æ§æã«é©åããªãã¯ã¼ã¯ãã¼ããæå¦ã§ããããã«ãã¾ããã
ç¾å¨ä¸è¬æä¾ããã¦ãããã®æ©è½å¼·åã«ãããPodãCPUã³ã¢ã®æä»ç使ç¨ãè¦æ±ããå ´åãCPUããã¼ã¸ã£ã¼ã¯SMT対å¿ã·ã¹ãã ã§å®å
¨ãªã³ã¢ãã¢(ãã©ã¤ããªã¹ã¬ããã¨å
å¼ã¹ã¬ãã両æ¹ãå«ã)ã®å²ãå½ã¦ãå¼·å¶ã§ããããã«ãªããã¯ã¼ã¯ãã¼ããæå³ããªãæ¹æ³ã§CPUãªã½ã¼ã¹ãå
±æããã·ããªãªã鲿¢ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/2625">KEP-2625: node: cpumanager: add options to reject non SMT-aligned workload</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="matchlabelkeys-ã¨-mismatchlabelkeys-ã使ç¨ããpodã¢ãã£ããã£ã¾ãã¯ã¢ã³ãã¢ãã£ããã£ã®å®ç¾©"><code>matchLabelKeys</code>ã¨<code>mismatchLabelKeys</code>ã使ç¨ããPodã¢ãã£ããã£ã¾ãã¯ã¢ã³ãã¢ãã£ããã£ã®å®ç¾©</h3>
<p><code>matchLabelKeys</code>ã¨<code>mismatchLabelKeys</code>ãã£ã¼ã«ããPodã¢ãã£ããã£æ¡ä»¶ã§å©ç¨å¯è½ã«ãªããã¦ã¼ã¶ã¼ã¯Podãå
±åãã(ã¢ãã£ããã£)ã¾ãã¯å
±åããªã(ã¢ã³ãã¢ãã£ããã£)ã¹ãç¯å²ãç´°ããå¶å¾¡ã§ããããã«ãªãã¾ããã
ãããã®æ°ããå®å®åãããªãã·ã§ã³ã¯ãæ¢åã®<code>labelSelector</code>ã¡ã«ããºã ãè£å®ãã¾ãã
<code>affinity</code>ãã£ã¼ã«ãã¯ãå¤ç¨éãªãã¼ãªã³ã°ã¢ãããã¼ãã®å¼·åãããã¹ã±ã¸ã¥ã¼ãªã³ã°ããã°ãã¼ãã«æ§æã«åºã¥ãã¦ãã¼ã«ãã³ã³ããã¼ã©ã¼ã«ãã£ã¦ç®¡çããããµã¼ãã¹ã®åé¢ã容æã«ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/3633">KEP-3633: Introduce MatchLabelKeys to Pod Affinity and Pod Anti Affinity</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="podãããã¸ã¼åæ£å¶ç´ã¹ãã¥ã¼ã®è¨ç®æã«taintã¨tolerationãèæ
®ãã">Podãããã¸ã¼åæ£å¶ç´ã¹ãã¥ã¼ã®è¨ç®æã«taintã¨tolerationãèæ
®ãã</h3>
<p>ãã®æ©è½å¼·åã¯<code>PodTopologySpread</code>ã«<code>nodeAffinityPolicy</code>ã¨<code>nodeTaintsPolicy</code>ã¨ãã2ã¤ã®ãã£ã¼ã«ããå°å
¥ãã¾ããã
ãããã®ãã£ã¼ã«ãã«ãããã¦ã¼ã¶ã¼ã¯ãã¼ãéã®Pod忣ã®ã¹ãã¥ã¼(åã)ãè¨ç®ããéã«ãã¼ãã¢ãã£ããã£ã«ã¼ã«ã¨ãã¼ããã¤ã³ããèæ
®ãã¹ããã©ãããæå®ã§ãã¾ãã
ããã©ã«ãã§ã¯ã<code>nodeAffinityPolicy</code>ã¯<code>Honor</code>ã«è¨å®ããã¦ãããPodã®ãã¼ãã¢ãã£ããã£ã¾ãã¯ã»ã¬ã¯ã¿ã¼ã«ä¸è´ãããã¼ãã®ã¿ã忣è¨ç®ã«å«ã¾ãããã¨ãæå³ãã¾ãã
<code>nodeTaintsPolicy</code>ã¯ããã©ã«ãã§<code>Ignore</code>ã«è¨å®ããã¦ãããæå®ãããªãéããã¼ããã¤ã³ãã¯èæ
®ãããªããã¨ã示ãã¾ãã
ãã®æ©è½å¼·åã«ããPodé
ç½®ã®ããç´°ããå¶å¾¡ãå¯è½ã«ãªããPodãã¢ãã£ããã£ã¨ãã¤ã³ã許容ã®ä¸¡æ¹ã®è¦ä»¶ãæºãããã¼ãã«ã¹ã±ã¸ã¥ã¼ã«ããããã¨ãä¿è¨¼ããå¶ç´ãæºãããªãããã«Podãä¿çç¶æ
ã®ã¾ã¾ã«ãªãã·ããªãªã鲿¢ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/3094">KEP-3094: Take taints/tolerations into consideration when calculating PodTopologySpread skew</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="volume-populators">Volume Populators</h3>
<p>v1.24ã§ãã¼ã¿ã¨ãã¦ãªãªã¼ã¹ãããå¾ã<em>Volume Populators</em> ã¯v1.33ã§GAã«ææ ¼ãã¾ããã
ãã®æ°ããå®å®åããæ©è½ã¯ãã¦ã¼ã¶ã¼ãPersistentVolumeClaim(PVC)ã¯ãã¼ã³ãããªã¥ã¼ã ã¹ãããã·ã§ããã ãã§ãªããæ§ã
ãªã½ã¼ã¹ããã®ãã¼ã¿ã§ããªã¥ã¼ã ãäºåã«æºåããæ¹æ³ãæä¾ãã¾ãã
ãã®ã¡ã«ããºã ã¯PersistentVolumeClaimå
ã®<code>dataSourceRef</code>ãã£ã¼ã«ãã«ä¾åãã¦ãã¾ãã
ãã®ãã£ã¼ã«ãã¯æ¢åã®<code>dataSource</code>ãã£ã¼ã«ããããæè»æ§ãé«ããã«ã¹ã¿ã ãªã½ã¼ã¹ããã¼ã¿ã½ã¼ã¹ã¨ãã¦ä½¿ç¨ãããã¨ãã§ãã¾ãã</p>
<p>ç¹å¥ãªã³ã³ããã¼ã©ã¼ã§ãã<code>volume-data-source-validator</code>ã¯ãVolumePopulatorã¨ããååã®API種å¥ã®ããã®æ°ããå®å®åããCustomResourceDefinition(CRD)ã¨å
±ã«ããããã®ãã¼ã¿ã½ã¼ã¹åç
§ãæ¤è¨¼ãã¾ãã
VolumePopulator APIã«ãããããªã¥ã¼ã ããã¥ã¬ã¼ã¿ã¼ã³ã³ããã¼ã©ã¼ã¯ãµãã¼ããããã¼ã¿ã½ã¼ã¹ã®ã¿ã¤ããç»é²ã§ãã¾ãã
ããªã¥ã¼ã ããã¥ã¬ã¼ã¿ã¼ã使ç¨ããã«ã¯ãé©åãªCRDã§ã¯ã©ã¹ã¿ã¼ãã»ããã¢ããããå¿
è¦ãããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Storageã主å°ãã<a href="https://kep.k8s.io/1495">KEP-1495: Generic data populators</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="persistentvolumeã®åå©ç¨ããªã·ã¼ã常ã«å°éãã">PersistentVolumeã®åå©ç¨ããªã·ã¼ã常ã«å°éãã</h3>
<p>ãã®æ©è½å¼·åã¯Persistent Volume(PV)ã®åå©ç¨ããªã·ã¼ãä¸è²«ãã¦å°éãããªãåé¡ã«å¯¾å¦ãããã®ã§ãã¹ãã¬ã¼ã¸ãªã½ã¼ã¹ã®ãªã¼ã¯ãé²ãã¾ãã
å
·ä½çã«ã¯PVããã®é¢é£ããPersistent Volume Claim(PVC)ããå
ã«åé¤ãããå ´åãåå©ç¨ããªã·ã¼(<code>Delete</code>)ãå®è¡ããããåºç¤ã¨ãªãã¹ãã¬ã¼ã¸ã¢ã»ããããã®ã¾ã¾æ®ã£ã¦ãã¾ãå¯è½æ§ãããã¾ããã
ãããç·©åããããã«ãKubernetesã¯é¢é£ããPVã«ãã¡ã¤ãã©ã¤ã¶ã¼ãè¨å®ããåé¤é åºã«é¢ä¿ãªãåå©ç¨ããªã·ã¼ãé©ç¨ãããããã«ãªãã¾ããã
ãã®æ©è½å¼·åã«ãããã¹ãã¬ã¼ã¸ãªã½ã¼ã¹ã®æå³ããªãä¿æãé²ããPVã©ã¤ããµã¤ã¯ã«ç®¡çã®ä¸è²«æ§ãç¶æãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Storageã主å°ãã<a href="https://kep.k8s.io/2644">KEP-2644: Always Honor PersistentVolume Reclaim Policy</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="ãã¼ã¿ã®æ°æ©è½">ãã¼ã¿ã®æ°æ©è½</h2>
<p><em>ããã¯v1.33ãªãªã¼ã¹å¾ã«ãã¼ã¿ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="windowsã®kube-proxyã«ãããdirect-service-return-dsr-ã®ãµãã¼ã">Windowsã®kube-proxyã«ãããDirect Service Return (DSR)ã®ãµãã¼ã</h3>
<p>DSRã¯ããã¼ããã©ã³ãµã¼ãçµç±ãããªã¿ã¼ã³ãã©ãã£ãã¯ããã¼ããã©ã³ãµã¼ããã¤ãã¹ãã¦ã¯ã©ã¤ã¢ã³ãã«ç´æ¥å¿çã§ããããã«ãããã¨ã§ããã©ã¼ãã³ã¹ãæé©åãã¾ãã
ããã«ãããã¼ããã©ã³ãµã¼ã®è² è·ã軽æ¸ãããå
¨ä½çãªã¬ã¤ãã³ã·ã¼ã使¸ããã¾ãã
Windowsä¸ã®DSRã«é¢ããæ
å ±ã¯ã<a href="https://techcommunity.microsoft.com/blog/networkingblog/direct-server-return-dsr-in-a-nutshell/693710">Direct Server Return (DSR) in a nutshell</a>ããèªã¿ãã ããã</p>
<p>v1.14ã§æåã«å°å
¥ãããDSRã®ãµãã¼ãã¯ã<a href="https://kep.k8s.io/5100">KEP-5100: Support for Direct Service Return (DSR) and overlay networking in Windows kube-proxy</a>ã®ä¸ç°ã¨ãã¦SIG Windowsã«ãããã¼ã¿ã«ææ ¼ãã¾ããã</p>
<h3 id="æ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ã">æ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ã</h3>
<p>æ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ãã¯Kubernetes v1.33ã§ãã¼ã¿æ©è½ã¨ãã¦ç¶ç¶ãããä¸ãDynamic Resource Allocation(DRA)ã®ãã®ä¸æ ¸é¨åã«å¤§å¹
ãªæ¹åãè¦ããã¾ããã
æ°ããv1beta2ãã¼ã¸ã§ã³ã¯<code>resource.k8s.io</code> APIãç°¡ç´ åããåå空éã¯ã©ã¹ã¿ã¼ã®<code>edit</code>ãã¼ã«ãæã¤ä¸è¬ã¦ã¼ã¶ã¼ãç¾å¨DRAã使ç¨ã§ããããã«ãªãã¾ããã</p>
<p><code>kubelet</code>ã¯ç¾å¨ã·ã¼ã ã¬ã¹ãªã¢ããã°ã¬ã¼ããµãã¼ããå«ã¿ãDaemonSetã¨ãã¦ãããã¤ããããã©ã¤ãã¼ããã¼ãªã³ã°ã¢ãããã¼ãã¡ã«ããºã ã使ç¨ã§ããããã«ãªã£ã¦ãã¾ãã
DRAå®è£
ã§ã¯ãããã«ããResourceSliceã®åé¤ã¨å使ã鲿¢ãããã¢ããã°ã¬ã¼ãä¸ã夿´ãããªãã¾ã¾ã«ãããã¨ãã§ãã¾ãã
ããã«ããã©ã¤ãã¼ã®ç»é²è§£é¤å¾ã«<code>kubelet</code>ãã¯ãªã¼ã³ã¢ãããè¡ãåã«30ç§ã®ç¶äºæéãå°å
¥ããããã¼ãªã³ã°ã¢ãããã¼ãã使ç¨ããªããã©ã¤ãã¼ã®ãµãã¼ããåä¸ãã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG NodeãSIG SchedulingãSIG Autoscalingãå«ãæ©è½æ¨ªæãã¼ã ã§ããWG Device Managementã«ãã<a href="https://kep.k8s.io/4381">KEP-4381: DRA: structured parameters</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹åãdynamic-resource-allocation-dra">ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹åãDynamic Resource Allocation(DRA)</h3>
<p>v1.32ã§å°å
¥ãããDRAã«ãããããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ãã¼ã¿ã®æ¨æºåãããå ±åãv1.33ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ããã«ããããããã¤ãã£ããªKubernetesãããã¯ã¼ã¯ã®çµ±åãå¯è½ã«ãªãããããã¯ã¼ã¯ããã¤ã¹ã®éçºã¨ç®¡çãç°¡ç´ åããã¾ãã
ããã«ã¤ãã¦ã¯ä»¥åã«<a href="https://kubernetes.io/ja/blog/2024/12/11/kubernetes-v1-32-release/#dra-resourceclaim%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A8%99%E6%BA%96%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF">v1.32ãªãªã¼ã¹çºè¡¨ããã°</a>ã§èª¬æããã¦ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG NetworkãSIG Nodeãããã³WG Device Managementã主å°ãã<a href="https://kep.k8s.io/4817">KEP-4817: DRA: Resource Claim Status with possible standardized network interface data</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¹ã±ã¸ã¥ã¼ã©ã¼ã-activeq-ã«podãæããªãå ´åã«-ã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãpodãæ©æã«å¦ç">ã¹ã±ã¸ã¥ã¼ã©ã¼ã<code>activeQ</code>ã«Podãæããªãå ´åã«ãã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãPodãæ©æã«å¦ç</h3>
<p>ãã®æ©è½ã¯ãã¥ã¼ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®åä½ãæ¹åãã¾ãã
è£å´ã§ã¯ãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯<code>activeQ</code>ã空ã®å ´åã«ãã¨ã©ã¼ã«ãã£ã¦ããã¯ãªãããã¦ããªãPodã<code>backoffQ</code>ããããããããã¨ã§ãããå®ç¾ãã¦ãã¾ãã
以åã¯ã<code>activeQ</code>ã空ã®å ´åã§ãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ã¢ã¤ãã«ç¶æ
ã«ãªã£ã¦ãã¾ãã¾ãããããã®æ©è½å¼·åã¯ããã鲿¢ãããã¨ã§ã¹ã±ã¸ã¥ã¼ãªã³ã°å¹çãåä¸ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/5142">KEP-5142: Pop pod from backoffQ when activeQ is empty</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã«ãããéåæããªã¨ã³ãã·ã§ã³">Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã«ãããéåæããªã¨ã³ãã·ã§ã³</h3>
<p>ããªã¨ã³ãã·ã§ã³ã¯ãåªå
度ã®ä½ãPodãéé¿ããããã¨ã§ãåªå
度ã®é«ãPodãå¿
è¦ãªãªã½ã¼ã¹ã確ä¿ã§ããããã«ãã¾ãã
v1.32ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããéåæããªã¨ã³ãã·ã§ã³ãv1.33ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ãã®æ©è½å¼·åã«ãããPodãåé¤ããããã®APIã³ã¼ã«ãªã©ã®éãæä½ã並è¡ãã¦å¦çãããããã«ãªããã¹ã±ã¸ã¥ã¼ã©ã¼ã¯é
å»¶ãªãä»ã®Podã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ãç¶ç¶ã§ãã¾ãã
ãã®æ¹åã¯ç¹ã«Podã®å
¥ãæ¿ãããæ¿ããã¯ã©ã¹ã¿ã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã®å¤±æãé »ç¹ã«çºçããã¯ã©ã¹ã¿ã¼ã§æçã§ãããããå¹ççã§å復åã®ããã¹ã±ã¸ã¥ã¼ãªã³ã°ããã»ã¹ã確ä¿ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Schedulingã主å°ãã<a href="https://kep.k8s.io/4832">KEP-4832: Asynchronous preemption in the scheduler</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="clustertrustbundle">ClusterTrustBundle</h3>
<p>X.509ãã©ã¹ãã¢ã³ã«ã¼(ã«ã¼ãè¨¼ææ¸)ãä¿æããããã«è¨è¨ãããã¯ã©ã¹ã¿ã¼ã¹ã³ã¼ããªã½ã¼ã¹ã§ããClusterTrustBundleãv1.33ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ãã®APIã«ãããã¯ã©ã¹ã¿ã¼å
ã®è¨¼ææ¸ç½²åè
ãX.509ãã©ã¹ãã¢ã³ã«ã¼ãã¯ã©ã¹ã¿ã¼ã¯ã¼ã¯ãã¼ãã«å
¬éããã³éä¿¡ãããã¨ã容æã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/3257">KEP-3257: ClusterTrustBundles (previously Trust Anchor Sets)</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ããç´°ããsupplementalgroupsã®å¶å¾¡">ããç´°ããSupplementalGroupsã®å¶å¾¡</h3>
<p>v1.31ã§å°å
¥ããããã®æ©è½ã¯v1.33ã§ãã¼ã¿ã«ææ ¼ããç¾å¨ã¯ããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã
ã¯ã©ã¹ã¿ã¼ã§ãã£ã¼ãã£ã¼ã²ã¼ãã®<code>SupplementalGroupsPolicy</code>ãæå¹ã«ãªã£ã¦ããå ´åãPodã®<code>securityContext</code>å
ã®<code>supplementalGroupsPolicy</code>ãã£ã¼ã«ãã¯2ã¤ã®ããªã·ã¼ããµãã¼ããã¾ã:
ããã©ã«ãã®Mergeããªã·ã¼ã¯ã³ã³ããã¤ã¡ã¼ã¸ã®<code>/etc/group</code>ãã¡ã¤ã«ããã®ã°ã«ã¼ãã¨æå®ãããã°ã«ã¼ããçµåãããã¨ã§å¾æ¹äºææ§ãç¶æããæ°ããStrictããªã·ã¼ã¯æç¤ºçã«å®ç¾©ãããã°ã«ã¼ãã®ã¿ãé©ç¨ãã¾ãã</p>
<p>ãã®æ©è½å¼·åã¯ãã³ã³ããã¤ã¡ã¼ã¸ããã®æé»çãªã°ã«ã¼ãã¡ã³ãã¼ã·ãããæå³ããªããã¡ã¤ã«ã¢ã¯ã»ã¹æ¨©éã«ã¤ãªãããããªã·ã¼å¶å¾¡ããã¤ãã¹ããå¯è½æ§ãããã»ãã¥ãªãã£ä¸ã®æ¸å¿µã«å¯¾å¦ããã®ã«å½¹ç«ã¡ã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/3619">KEP-3619: Fine-grained SupplementalGroups control</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¤ã¡ã¼ã¸ãããªã¥ã¼ã ã¨ãã¦ãã¦ã³ãããæ©è½ããµãã¼ã">ã¤ã¡ã¼ã¸ãããªã¥ã¼ã ã¨ãã¦ãã¦ã³ãããæ©è½ããµãã¼ã</h3>
<p>v1.31ã§å°å
¥ãããPodã§Open Container Initiative(OCI)ã¤ã¡ã¼ã¸ãããªã¥ã¼ã ã¨ãã¦ä½¿ç¨ããæ©è½ã®ãµãã¼ãããã¼ã¿ã«ææ ¼ãã¾ããã
ãã®æ©è½ã«ãããã¦ã¼ã¶ã¼ã¯Podå
ã§ã¤ã¡ã¼ã¸åç
§ãããªã¥ã¼ã ã¨ãã¦æå®ããã³ã³ããå
ã§ããªã¥ã¼ã ãã¦ã³ãã¨ãã¦åå©ç¨ã§ããããã«ãªãã¾ãã
ããã«ãããããªã¥ã¼ã ãã¼ã¿ãå¥ã
ã«ããã±ã¼ã¸åããã¡ã¤ã³ã¤ã¡ã¼ã¸ã«å«ãããã¨ãªãPodå
ã®ã³ã³ããéã§å
±æããå¯è½æ§ãéãããèå¼±æ§ãæ¸ããã¤ã¡ã¼ã¸ä½æãç°¡ç´ åãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã¨SIG Storageã主å°ãã<a href="https://kep.k8s.io/4639">KEP-4639: VolumeSource: OCI Artifact and/or Image</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="linux-podã«ãããã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã">Linux Podã«ãããã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã</h3>
<p>å·çæç¹ã§æãå¤ããªã¼ãã³ãªKEPã®1ã¤ã§ãã<a href="https://kep.k8s.io/127">KEP-127</a>ã¯ãPodç¨ã®Linux<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/user-namespaces/">ã¦ã¼ã¶ã¼åå空é</a>ã使ç¨ããPodã»ãã¥ãªãã£ã®æ¹åã§ãã
ãã®KEPã¯2016å¹´å¾åã«æåã«ææ¡ãããè¤æ°ã®æ¹è¨ãçµã¦ãv1.25ã§ã¢ã«ãã¡ãªãªã¼ã¹ãv1.30ã§åæãã¼ã¿(ããã©ã«ãã§ã¯ç¡å¹)ã¨ãªããv1.33ã®ä¸é¨ã¨ãã¦ããã©ã«ãã§æå¹ãªãã¼ã¿ã«ç§»è¡ãã¾ããã</p>
<p>ãã®ãµãã¼ãã¯ãæåã§<code>pod.spec.hostUsers</code>ãæå®ãã¦ãªããã¤ã³ããªãéããæ¢åã®Podã«å½±é¿ãä¸ãã¾ããã
<a href="https://kubernetes.io/ja/blog/2024/03/12/kubernetes-1-30-upcoming-changes/">v1.30ã®å
è¡ç´¹ä»ããã°</a>ã§å¼·èª¿ããã¦ããããã«ãããã¯èå¼±æ§ã軽æ¸ããããã®éè¦ãªãã¤ã«ã¹ãã¼ã³ã§ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/127">KEP-127: Support User Namespaces in pods</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="podã®-procmount-ãªãã·ã§ã³">Podã®<code>procMount</code>ãªãã·ã§ã³</h3>
<p>v1.12ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããv1.31ã§ããã©ã«ãç¡å¹ã®ãã¼ã¿ã ã£ã<code>procMount</code>ãªãã·ã§ã³ããv1.33ã§ããã©ã«ãæå¹ã®ãã¼ã¿ã«ç§»è¡ãã¾ããã
ãã®æ©è½å¼·åã¯ã¦ã¼ã¶ã¼ã<code>/proc</code>ãã¡ã¤ã«ã·ã¹ãã ã¸ã®ã¢ã¯ã»ã¹ãç´°ãã調æ´ã§ããããã«ãããã¨ã§Podåé¢ãæ¹åãã¾ãã
å
·ä½çã«ã¯ãPodã®<code>securityContext</code>ã«ãã£ã¼ã«ãã追å ããç¹å®ã®<code>/proc</code>ãã¹ããã¹ã¯ãããèªã¿åãå°ç¨ã¨ãã¦ãã¼ã¯ããããã©ã«ãã®åä½ããªã¼ãã¼ã©ã¤ãã§ããããã«ãã¾ãã
ããã¯ç¹ã«ãã¦ã¼ã¶ã¼ãã¦ã¼ã¶ã¼åå空éã使ç¨ãã¦Kubernetes Podå
ã§éç¹æ¨©ã³ã³ãããå®è¡ãããå ´åã«ä¾¿å©ã§ãã
é常ãã³ã³ããã©ã³ã¿ã¤ã (CRIå®è£
ãä»ãã¦)ã¯å³æ ¼ãª<code>/proc</code>ãã¦ã³ãè¨å®ã§å¤é¨ã³ã³ãããèµ·åãã¾ãã
ããããéç¹æ¨©Podå
ã§ãã¹ããããã³ã³ãããæ£å¸¸ã«å®è¡ããã«ã¯ãã¦ã¼ã¶ã¼ã¯ãããã®ããã©ã«ãè¨å®ãç·©åããã¡ã«ããºã ãå¿
è¦ã§ããããã®æ©è½ã¯ã¾ãã«ãããæä¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4265">KEP-4265: add ProcMount option</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="numaãã¼ãéã§cpuã忣ãããcpumanagerããªã·ã¼">NUMAãã¼ãéã§CPUã忣ãããCPUManagerããªã·ã¼</h3>
<p>ãã®æ©è½ã¯CPUManagerã«ãåä¸ãã¼ãã«éä¸ãããã®ã§ã¯ãªãé䏿§ã¡ã¢ãªã¢ã¯ã»ã¹(NUMA)ãã¼ãéã§CPUã忣ãããæ°ããããªã·ã¼ãªãã·ã§ã³ã追å ãã¾ãã
ããã«ããè¤æ°ã®NUMAãã¼ãéã§ã¯ã¼ã¯ãã¼ãã®ãã©ã³ã¹ãåããã¨ã§CPUãªã½ã¼ã¹ã®å²ãå½ã¦ãæé©åãããã«ãNUMAã·ã¹ãã ã«ãããããã©ã¼ãã³ã¹ã¨ãªã½ã¼ã¹ä½¿ç¨çãåä¸ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/2902">KEP-2902: Add CPUManager policy option to distribute CPUs across NUMA nodes instead of packing them</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã³ã³ããã®prestopããã¯ã®ã¼ãç§ã¹ãªã¼ã">ã³ã³ããã®PreStopããã¯ã®ã¼ãç§ã¹ãªã¼ã</h3>
<p>Kubernetes 1.29ã§ã¯Podã®<code>preStop</code>ã©ã¤ããµã¤ã¯ã«ããã¯ã«Sleepã¢ã¯ã·ã§ã³ãå°å
¥ãããã³ã³ãããçµäºããåã«æå®ãããæéã ã䏿忢ã§ããããã«ãªãã¾ããã
ããã«ãããæ¥ç¶ã®ãã¬ã¤ã³(æåº)ãã¯ãªã¼ã³ã¢ããæä½ãªã©ã®ã¿ã¹ã¯ã容æã«ããã³ã³ããã®ã·ã£ãããã¦ã³ãé
ãããããã®ç°¡åãªæ¹æ³ãæä¾ããã¾ãã</p>
<p><code>preStop</code>ããã¯ã®Sleepã¢ã¯ã·ã§ã³ã¯ãç¾å¨ãã¼ã¿æ©è½ã¨ãã¦ã¼ãç§ã®æéãåãä»ãããã¨ãã§ãã¾ãã
ããã«ããã<code>preStop</code>ããã¯ãå¿
è¦ã ãé
å»¶ãä¸è¦ãªå ´åã«ä¾¿å©ãªãç¡æä½(no-op)ã®<code>preStop</code>ããã¯ãå®ç¾©ã§ããããã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/3960">KEP-3960: Introducing Sleep Action for PreStop Hook</a>ããã³<a href="https://kep.k8s.io/4818">KEP-4818: Allow zero value for Sleep Action of PreStop Hook</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubernetesãã¤ãã£ãåã®å®£è¨çæ¤è¨¼ã®ããã®å
é¨ãã¼ã«">Kubernetesãã¤ãã£ãåã®å®£è¨çæ¤è¨¼ã®ããã®å
é¨ãã¼ã«</h3>
<p>ã²ããã«ãKubernetesã®å
é¨ã¯ãªãã¸ã§ã¯ãã¨ãªãã¸ã§ã¯ãã¸ã®å¤æ´ãæ¤è¨¼ããããã®æ°ããã¡ã«ããºã ã®ä½¿ç¨ãéå§ãã¦ãã¾ãã
Kubernetes v1.33ã§ã¯ãKubernetesã³ã³ããªãã¥ã¼ã¿ã¼ã宣è¨çãªæ¤è¨¼ã«ã¼ã«ãçæããããã«ä½¿ç¨ããå
é¨ãã¼ã«<code>validation-gen</code>ãå°å
¥ãã¦ãã¾ãã
å
¨ä½çãªç®æ¨ã¯ãéçºè
ãæ¤è¨¼å¶ç´ã宣è¨çã«æå®ã§ããããã«ãããã¨ã§APIæ¤è¨¼ã®å
ç¢æ§ã¨ä¿å®æ§ãåä¸ãããæåã³ã¼ãã£ã³ã°ã¨ã©ã¼ãæ¸ãããã³ã¼ããã¼ã¹å
¨ä½ã§ã®ä¸è²«æ§ã確ä¿ãããã¨ã§ãã</p>
<p>ãã®ä½æ¥ã¯SIG API Machineryã主å°ãã<a href="https://kep.k8s.io/5073">KEP-5073: Declarative Validation Of Kubernetes Native Types With validation-gen</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="ã¢ã«ãã¡ã®æ°æ©è½">ã¢ã«ãã¡ã®æ°æ©è½</h2>
<p><em>ããã¯v1.33ãªãªã¼ã¹å¾ã«ã¢ã«ãã¡ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="horizontalpodautoscalerã®è¨å®å¯è½ãªè¨±å®¹å¤">HorizontalPodAutoscalerã®è¨å®å¯è½ãªè¨±å®¹å¤</h3>
<p>ãã®æ©è½ã¯ãHorizontalPodAutoscalerè¨å®å¯è½ãªè¨±å®¹å¤ãå°å
¥ããå°ããªã¡ããªã¯ã¹å¤åã«å¯¾ããã¹ã±ã¼ãªã³ã°åå¿ãæå¶ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Autoscalingã主å°ãã<a href="https://kep.k8s.io/4951">KEP-4951: Configurable tolerance for Horizontal Pod Autoscalers</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="è¨å®å¯è½ãªã³ã³ããã®åèµ·åé
å»¶">è¨å®å¯è½ãªã³ã³ããã®åèµ·åé
å»¶</h3>
<p>CrashLoopBackOffã®å¦çæ¹æ³ã微調æ´ã§ããæ©è½ã§ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4603">KEP-4603: Tune CrashLoopBackOff</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã«ã¹ã¿ã ã³ã³ããã®åæ¢ã·ã°ãã«">ã«ã¹ã¿ã ã³ã³ããã®åæ¢ã·ã°ãã«</h3>
<p>Kubernetes v1.33ããåã§ã¯ã忢ã·ã°ãã«ã¯ã³ã³ããã¤ã¡ã¼ã¸å®ç¾©å
ã§ã®ã¿è¨å®å¯è½ã§ãã(ä¾ãã°ãã¤ã¡ã¼ã¸ã¡ã¿ãã¼ã¿ã®<code>StopSignal</code>ãã£ã¼ã«ããä»ãã¦)ã
çµäºåä½ã夿´ãããå ´åã¯ãã«ã¹ã¿ã ã³ã³ããã¤ã¡ã¼ã¸ããã«ãããå¿
è¦ãããã¾ããã
Kubernetes v1.33ã§(ã¢ã«ãã¡ã®)ãã£ã¼ãã£ã¼ã²ã¼ãã§ãã<code>ContainerStopSignals</code>ãæå¹ã«ãããã¨ã§ãPod仿§å
ã§ç´æ¥ã«ã¹ã¿ã 忢ã·ã°ãã«ãå®ç¾©ã§ããããã«ãªãã¾ããã
ããã¯ã³ã³ããã®<code>lifecycle.stopSignal</code>ãã£ã¼ã«ãã§å®ç¾©ãããPodã®<code>spec.os.name</code>ãã£ã¼ã«ããåå¨ããå¿
è¦ãããã¾ãã
æå®ãããªãå ´åãã³ã³ããã¯ã¤ã¡ã¼ã¸ã§å®ç¾©ããã忢ã·ã°ãã«(åå¨ããå ´å)ãã¾ãã¯ã³ã³ããã©ã³ã¿ã¤ã ã®ããã©ã«ã(é常Linuxã®å ´åã¯SIGTERM)ã«ãã©ã¼ã«ããã¯ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4960">KEP-4960: Container Stop Signals</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="è±å¯ãªdraæ©è½å¼·å">è±å¯ãªDRAæ©è½å¼·å</h3>
<p>Kubernetes v1.33ã¯ã仿¥ã®è¤éãªã¤ã³ãã©ã¹ãã©ã¯ãã£åãã«è¨è¨ãããæ©è½ãåããDynamic Resource Allocation (DRA)ã®éçºãç¶ç¶ãã¦ãã¾ãã
DRAã¯Podéããã³Podå
ã®ã³ã³ããéã§ãªã½ã¼ã¹ãè¦æ±ããã³å
±æããããã®APIã§ãã
é常ããããã®ãªã½ã¼ã¹ã¯GPUãFPGAããããã¯ã¼ã¯ã¢ããã¿ã¼ãªã©ã®ããã¤ã¹ã§ãã</p>
<p>以ä¸ã¯v1.33ã§å°å
¥ããããã¹ã¦ã®ã¢ã«ãã¡ã®DRAã®ãã£ã¼ãã£ã¼ã²ã¼ãã§ã:</p>
<ul>
<li>ãã¼ããã¤ã³ãã¨åæ§ã«ããã£ã¼ãã£ã¼ã²ã¼ãã®<code>DRADeviceTaints</code>ãæå¹ã«ãããã¨ã§ãããã¤ã¹ã¯Taintã¨Tolerationããµãã¼ããã¾ãã
管çè
ã¾ãã¯ã³ã³ããã¼ã«ãã¬ã¼ã³ã³ã³ãã¼ãã³ãã¯ããã¤ã¹ã«ãã¤ã³ããä»ãã¦ä½¿ç¨ãå¶éã§ãã¾ãã
ãã¤ã³ããåå¨ããéããããã®ããã¤ã¹ã«ä¾åããPodã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ã䏿忢ãããããã¤ã³ããããããã¤ã¹ã使ç¨ããPodãéé¿ãããããããã¨ãã§ãã¾ãã</li>
<li>ãã£ã¼ãã£ã¼ã²ã¼ãã®<code>DRAPrioritizedList</code>ãæå¹ã«ãããã¨ã§ãDeviceRequestsã¯<code>firstAvailable</code>ã¨ããæ°ãããã£ã¼ã«ããåå¾ãã¾ãã
ãã®ãã£ã¼ã«ãã¯é åºä»ãããããªã¹ãã§ãã¦ã¼ã¶ã¼ãç¹å®ã®ãã¼ãã¦ã§ã¢ãå©ç¨ã§ããªãå ´åã«ä½ãå²ãå½ã¦ãªããã¨ãå«ãããªã¯ã¨ã¹ããç°ãªãæ¹æ³ã§æºããããå¯è½æ§ãæå®ã§ããããã«ãã¾ãã</li>
<li>ãã£ã¼ãã£ã¼ã²ã¼ãã®<code>DRAAdminAccess</code>ãæå¹ã«ããã¨ã<code>resource.k8s.io/admin-access: "true"</code>ã§ã©ãã«ä»ããããåå空éå
ã§ResourceClaimã¾ãã¯ResourceClaimTemplateãªãã¸ã§ã¯ãã使ããæ¨©éãæã¤ã¦ã¼ã¶ã¼ã®ã¿ã<code>adminAccess</code>ãã£ã¼ã«ãã使ç¨ã§ãã¾ãã
ããã«ããã管çè
以å¤ã®ã¦ã¼ã¶ã¼ã<code>adminAccess</code>æ©è½ã誤ç¨ã§ããªãããã«ãªãã¾ãã</li>
<li>v1.31以éãããã¤ã¹ãã¼ãã£ã·ã§ã³ã®ä½¿ç¨ãå¯è½ã§ãããããã³ãã¼ã¯ããã¤ã¹ãäºåã«ãã¼ãã£ã·ã§ã³åå²ããããã«å¿ãã¦éç¥ããå¿
è¦ãããã¾ããã
v1.33ã§ãã£ã¼ãã£ã¼ã²ã¼ãã®<code>DRAPartitionableDevices</code>ãæå¹ã«ãããã¨ã§ãããã¤ã¹ãã³ãã¼ã¯éè¤ãããã®ãå«ãè¤æ°ã®ãã¼ãã£ã·ã§ã³ãéç¥ã§ãã¾ãã
Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ã¯ã¼ã¯ãã¼ãè¦æ±ã«åºã¥ãã¦ãã¼ãã£ã·ã§ã³ã鏿ããç«¶åãããã¼ãã£ã·ã§ã³ã®åæå²ãå½ã¦ã鲿¢ãã¾ãã
ãã®æ©è½ã«ããããã³ãã¼ã¯å²ãå½ã¦æã«åçã«ãã¼ãã£ã·ã§ã³ã使ããæ©è½ãæã¡ã¾ãã
å²ãå½ã¦ã¨åçãã¼ãã£ã·ã§ãã³ã°ã¯èªåçãã¤ã¦ã¼ã¶ã¼ã«ééçã«è¡ããããªã½ã¼ã¹ä½¿ç¨çã®åä¸ãå¯è½ã«ãã¾ãã</li>
</ul>
<p>ãããã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ããã£ã¼ãã£ã¼ã²ã¼ãã®<code>DynamicResourceAllocation</code>ãæå¹ã«ããªãéã广ãããã¾ããã</p>
<p>ãã®ä½æ¥ã¯SIG NodeãSIG SchedulingãSIG Authã主å°ãã
<a href="https://kep.k8s.io/5055">KEP-5055: DRA: device taints and tolerations</a>ã
<a href="https://kep.k8s.io/4816">KEP-4816: DRA: Prioritized Alternatives in Device Requests</a>ã
<a href="https://kep.k8s.io/5018">KEP-5018: DRA: AdminAccess for ResourceClaims and ResourceClaimTemplates</a>ã
ããã³<a href="https://kep.k8s.io/4815">KEP-4815: DRA: Add support for partitionable devices</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ifnotpresent-ã¨-never-ã®ã¤ã¡ã¼ã¸ã«å¯¾ããèªè¨¼ãè¡ãå
ç¢ãªimagepullpolicy"><code>IfNotPresent</code>ã¨<code>Never</code>ã®ã¤ã¡ã¼ã¸ã«å¯¾ããèªè¨¼ãè¡ãå
ç¢ãªimagePullPolicy</h3>
<p>ãã®æ©è½ã«ãããã¦ã¼ã¶ã¼ã¯ã¤ã¡ã¼ã¸ããã¼ãä¸ã«æ¢ã«åå¨ãããã©ããã«é¢ããããæ°ããè³æ ¼æ
å ±ã»ãããã¨ã«kubeletãã¤ã¡ã¼ã¸ãã«èªè¨¼ãã§ãã¯ãè¦æ±ãããã¨ã確å®ã«ã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/2535">KEP-2535: Ensure secret pulled images</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="downward-apiãéãã¦å©ç¨å¯è½ãªãã¼ããããã¸ã¼ã©ãã«">Downward APIãéãã¦å©ç¨å¯è½ãªãã¼ããããã¸ã¼ã©ãã«</h3>
<p>ãã®æ©è½ã«ããããã¼ããããã¸ã¼ã©ãã«ããã¦ã³ã¯ã¼ãAPIãéãã¦å
¬éãããããã«ãªãã¾ãã
Kubernetes v1.33ããåã§ã¯ãåºç¤ã¨ãªããã¼ãã«ã¤ãã¦Kubernetes APIã«åãåãããããã«åæåã³ã³ããã使ç¨ããåé¿çãå¿
è¦ã§ããã
ãã®ã¢ã«ãã¡æ©è½ã«ãããã¯ã¼ã¯ãã¼ãããã¼ããããã¸ã¼æ
å ±ã«ã¢ã¯ã»ã¹ããæ¹æ³ãç°¡ç´ åããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4742">KEP-4742: Expose Node labels via downward API</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="çæçªå·ã¨è¦³æ¸¬ãããçæçªå·ã«ããããè¯ãpodã¹ãã¼ã¿ã¹">çæçªå·ã¨è¦³æ¸¬ãããçæçªå·ã«ããããè¯ãPodã¹ãã¼ã¿ã¹</h3>
<p>ãã®å¤æ´ä»¥åã¯ã<code>metadata.generation</code>ãã£ã¼ã«ãã¯Podã§ã¯ä½¿ç¨ããã¦ãã¾ããã§ããã
<code>metadata.generation</code>ããµãã¼ãããããã®æ¡å¼µã«å ãã¦ããã®æ©è½ã¯<code>status.observedGeneration</code>ãå°å
¥ããããæç¢ºãªPodã¹ãã¼ã¿ã¹ãæä¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/5067">KEP-5067: Pod Generation</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubeletã®cpu-managerã«ããåå²ã¬ãã«3ãã£ãã·ã¥ã¢ã¼ããã¯ãã£ã®ãµãã¼ã">kubeletã®CPU Managerã«ããåå²ã¬ãã«3ãã£ãã·ã¥ã¢ã¼ããã¯ãã£ã®ãµãã¼ã</h3>
<p>ããã¾ã§ã®kubeletã®CPU Managerã¯åå²L3ãã£ãã·ã¥ã¢ã¼ããã¯ãã£(Last Level Cacheãã¾ãã¯LLCã¨ãå¼ã°ãã)ãèªèãããåå²L3ãã£ãã·ã¥ãèæ
®ããã«CPUå²ãå½ã¦ã忣ãããå¯è½æ§ãããããã¤ã¸ã¼ãã¤ãã¼åé¡ãå¼ãèµ·ããå¯è½æ§ãããã¾ããã
ãã®ã¢ã«ãã¡æ©è½ã¯CPU Managerãæ¹åããããè¯ãããã©ã¼ãã³ã¹ã®ããã«CPUã³ã¢ãããé©åã«å²ãå½ã¦ã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/5109">KEP-5109: Split L3 Cache Topology Awareness in CPU Manager</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="ã¹ã±ã¸ã¥ã¼ãªã³ã°æ¹åã®ããã®psi-pressure-stall-information-ã¡ããªã¯ã¹">ã¹ã±ã¸ã¥ã¼ãªã³ã°æ¹åã®ããã®PSI(Pressure Stall Information)ã¡ããªã¯ã¹</h3>
<p>ãã®æ©è½ã¯ãLinuxãã¼ãã«cgroupv2ã使ç¨ãã¦PSIçµ±è¨ã¨ã¡ããªã¯ã¹ãæä¾ãããµãã¼ãã追å ãã¾ãã
ããã«ãããªã½ã¼ã¹ä¸è¶³ãæ¤åºããPodã¹ã±ã¸ã¥ã¼ãªã³ã°ã®ããã®ããç´°ããå¶å¾¡ããã¼ãã«æä¾ã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Nodeã主å°ãã<a href="https://kep.k8s.io/4205">KEP-4205: Support PSI based on cgroupv2</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h3 id="kubeletã«ããã·ã¼ã¯ã¬ããã¬ã¹ã¤ã¡ã¼ã¸pull">kubeletã«ããã·ã¼ã¯ã¬ããã¬ã¹ã¤ã¡ã¼ã¸Pull</h3>
<p>kubeletã®ãªã³ãã£ã¹ã¯èªè¨¼æ
å ±ãããã¤ãã¼ãããªãã·ã§ã³ã§Kubernetes ServiceAccount(SA)ãã¼ã¯ã³ã®åå¾ããµãã¼ãããããã«ãªãã¾ããã
ããã«ãããã¯ã©ã¦ããããã¤ãã¼ã¯OIDCäºæã®ã¢ã¤ãã³ãã£ãã£ã½ãªã¥ã¼ã·ã§ã³ã¨ããé©åã«çµ±åã§ããã¤ã¡ã¼ã¸ã¬ã¸ã¹ããªã¨ã®èªè¨¼ãç°¡ç´ åããã¾ãã</p>
<p>ãã®ä½æ¥ã¯SIG Authã主å°ãã<a href="https://kep.k8s.io/4412">KEP-4412: Projected service account tokens for Kubelet image credential providers</a>ã®ä¸ç°ã¨ãã¦è¡ããã¾ããã</p>
<h2 id="v1-33ã§ã®ææ ¼-鿍奍å-ããã³åé¤">v1.33ã§ã®ææ ¼ã鿍奍åãããã³åé¤</h2>
<h3 id="gaã¸ã®ææ ¼">GAã¸ã®ææ ¼</h3>
<p>ããã¯å®å®ç(ä¸è¬æä¾ãGAã¨ãå¼ã°ãã)ã«ææ ¼ãããã¹ã¦ã®æ©è½ãä¸è¦§ã«ãããã®ã§ãã
ã¢ã«ãã¡ãããã¼ã¿ã¸ã®ææ ¼ãæ°æ©è½ãå«ãæ´æ°ã®å®å
¨ãªãªã¹ãã«ã¤ãã¦ã¯ããªãªã¼ã¹ãã¼ããã覧ãã ããã</p>
<p>ãã®ãªãªã¼ã¹ã«ã¯ãGAã«ææ ¼ããåè¨18ã®æ©è½å¼·åãå«ã¾ãã¦ãã¾ã:</p>
<ul>
<li><a href="https://github.com/kubernetes/enhancements/issues/3094">Take taints/tolerations into consideration when calculating PodTopologySpread skew</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3633">Introduce <code>MatchLabelKeys</code> to Pod Affinity and Pod Anti Affinity</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4193">Bound service account token improvements</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1495">Generic data populators</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1880">Multiple Service CIDRs</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2433">Topology Aware Routing</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2589">Portworx file in-tree to CSI driver migration</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2644">Always Honor PersistentVolume Reclaim Policy</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3866">nftables kube-proxy backend</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4004">Deprecate status.nodeInfo.kubeProxyVersion field</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2590">Add subresource support to kubectl</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3850">Backoff Limit Per Index For Indexed Jobs</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3998">Job success/completion policy</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/753">Sidecar Containers</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4008">CRD Validation Ratcheting</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2625">node: cpumanager: add options to reject non SMT-aligned workload</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4444">Traffic Distribution for Services</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3857">Recursive Read-only (RRO) mounts</a></li>
</ul>
<h3 id="deprecations-and-removals">鿍奍åã¨åé¤</h3>
<p>Kubernetesã®éçºã¨æçã«ä¼´ããããã¸ã§ã¯ãå
¨ä½ã®å¥å
¨æ§ãåä¸ãããããã«æ©è½ã鿍奍åãããããåé¤ãããããããè¯ãæ©è½ã«ç½®ãæããããããããã¨ãããã¾ãã
ãã®ããã»ã¹ã«é¢ãã詳細ã¯ã<a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">Kubernetes鿍奍ããªã·ã¼</a>ãåç
§ãã¦ãã ããã
ãããã®éæ¨å¥¨åãåé¤ã®å¤ãã¯ã<a href="https://kubernetes.io/ja/blog/2025/03/26/kubernetes-v1-33-upcoming-changes">Kubernetes v1.33ã®å
è¡ç´¹ä»ããã°</a>ã§åç¥ããã¾ããã</p>
<h4 id="endpoints-apiã®éæ¨å¥¨å">Endpoints APIã®éæ¨å¥¨å</h4>
<p>v1.21以éGAããã<a href="https://kubernetes.io/ja/docs/concepts/services-networking/endpoint-slices/">EndpointSlice</a> APIã¯ãå
ã®Endpoint APIãäºå®ä¸ç½®ãæãã¾ããã
å
ã®Endpoint APIã¯ã·ã³ãã«ã§åãããããã£ããã®ã®ã夿°ã®ãããã¯ã¼ã¯ã¨ã³ããã¤ã³ãã¸ã¹ã±ã¼ãªã³ã°ããéã«ããã¤ãã®èª²é¡ãããã¾ããã
EndpointSlice APIã«ã¯ãã¥ã¢ã«ã¹ã¿ãã¯ãããã¯ã¼ãã³ã°ãªã©ã®æ°æ©è½ãå°å
¥ãããããã«ããå
ã®Endpoint APIã¯éæ¨å¥¨åããããã¨ã«ãªãã¾ããã</p>
<p>ãã®éæ¨å¥¨åã¯ãã¯ã¼ã¯ãã¼ããã¹ã¯ãªããããEndpoint APIãç´æ¥ä½¿ç¨ãã¦ããã¦ã¼ã¶ã¼ã«ã®ã¿å½±é¿ãã¾ãã
ãããã®ã¦ã¼ã¶ã¼ã¯ä»£ããã«EndpointSliceã使ç¨ããããã«ç§»è¡ããå¿
è¦ãããã¾ãã
鿍奍åã«ããå½±é¿ã¨ç§»è¡è¨ç»ã«é¢ãã詳細ãè¨è¼ããå°ç¨ã®ããã°è¨äºãå
¬éãããäºå®ã§ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/4974">KEP-4974: Deprecate v1.Endpoints</a>ã§ç¢ºèªã§ãã¾ãã</p>
<h4 id="nodeã¹ãã¼ã¿ã¹ã«ãããkube-proxyãã¼ã¸ã§ã³æ
å ±ã®åé¤">Nodeã¹ãã¼ã¿ã¹ã«ãããkube-proxyãã¼ã¸ã§ã³æ
å ±ã®åé¤</h4>
<p>v1.31ã®<a href="https://kubernetes.io/blog/2024/07/19/kubernetes-1-31-upcoming-changes/#deprecation-of-status-nodeinfo-kubeproxyversion-field-for-nodes-kep-4004-https-github-com-kubernetes-enhancements-issues-4004">ãDeprecation of status.nodeInfo.kubeProxyVersion field for Nodesã</a>ã§å¼·èª¿ããã¦ããããã«ãv1.31ã§ã®éæ¨å¥¨åã«ç¶ããNodeã®<code>.status.nodeInfo.kubeProxyVersion</code>ãã£ã¼ã«ããv1.33ã§åé¤ããã¾ããã</p>
<p>ãã®ãã£ã¼ã«ãã¯kubeletã«ãã£ã¦è¨å®ããã¦ãã¾ãããããã®å¤ã¯ä¸è²«ãã¦æ£ç¢ºã§ã¯ããã¾ããã§ããã
v1.31以éããã©ã«ãã§ç¡å¹åããã¦ããããããã®ãã£ã¼ã«ãã¯v1.33ã§å®å
¨ã«åé¤ããã¾ããã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/4004">KEP-4004: Deprecate status.nodeInfo.kubeProxyVersion field</a>ã§ç¢ºèªã§ãã¾ãã</p>
<h4 id="ã¤ã³ããªã¼ã®gitrepoããªã¥ã¼ã ãã©ã¤ãã¼ã®åé¤">ã¤ã³ããªã¼ã®gitRepoããªã¥ã¼ã ãã©ã¤ãã¼ã®åé¤</h4>
<p><code>gitRepo</code>ããªã¥ã¼ã ã¿ã¤ãã¯ãç´7å¹´åã®v1.11ãã鿍奍åããã¦ãã¾ããã
鿍奍åããã¦ä»¥éã<code>gitRepo</code>ããªã¥ã¼ã ã¿ã¤ãããã¼ãä¸ã§rootã¨ãã¦ãªã¢ã¼ãã³ã¼ãå®è¡ãå¾ãããã«ã©ã®ããã«æªç¨ãããããã¨ãã£ããã»ãã¥ãªãã£ä¸ã®æ¸å¿µãããã¾ããã
v1.33ã§ã¯ãã¤ã³ããªã¼ã®ãã©ã¤ãã¼ã³ã¼ããåé¤ããã¾ãã</p>
<p>ä»£æ¿ææ®µã¨ãã¦<code>git-sync</code>ãinitã³ã³ãããããã¾ãã
Kubernetes APIã®<code>gitVolumes</code>ã¯åé¤ãããªãããã<code>gitRepo</code>ããªã¥ã¼ã ãæã¤Podã¯<code>kube-apiserver</code>ã«ãã£ã¦åãå
¥ãããã¾ãã
ãããããã£ã¼ãã£ã¼ã²ã¼ãã®<code>GitRepoVolumeDriver</code>ã<code>false</code>ã«è¨å®ããã¦ãã<code>kubelet</code>ã¯ããããå®è¡ãããã¦ã¼ã¶ã¼ã«é©åãªã¨ã©ã¼ãè¿ãã¾ãã
ããã«ãããã¦ã¼ã¶ã¼ã¯ã¯ã¼ã¯ãã¼ããä¿®æ£ããããã®ååãªæéã確ä¿ããããã«ã3ãã¼ã¸ã§ã³åã®æéããã©ã¤ãã¼ã®åæå¹åããªããã¤ã³ã§ãã¾ãã</p>
<p><code>kubelet</code>ã®ãã£ã¼ãã£ã¼ã²ã¼ãã¨ã¤ã³ããªã¼ã®ãã©ã°ã¤ã³ã³ã¼ãã¯ãv1.39ãªãªã¼ã¹ã§åé¤ãããäºå®ã§ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/5040">KEP-5040: Remove gitRepo volume driver</a>ã§ç¢ºèªã§ãã¾ãã</p>
<h4 id="windows-podã«ããããã¹ããããã¯ã¼ã¯ãµãã¼ãã®åé¤">Windows Podã«ããããã¹ããããã¯ã¼ã¯ãµãã¼ãã®åé¤</h4>
<p>Windows Podã®ãããã¯ã¼ãã³ã°ã¯ãã³ã³ãããNodeã®ãããã¯ã¼ã¯åå空éã使ç¨ã§ããããã«ãããã¨ã§Linuxã¨ã®æ©è½ããªãã£ãéæããã¯ã©ã¹ã¿ã¼å¯åº¦ãåä¸ããããã¨ãç®æãã¦ãã¾ããã
å
ã®å®è£
ã¯v1.26ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ããã¾ããããäºæãã¬<code>containerd</code>ã®æåã«ç´é¢ãã代æ¿ã½ãªã¥ã¼ã·ã§ã³ãåå¨ãããããKubernetesããã¸ã§ã¯ãã¯é¢é£ããKEPãåãä¸ãããã¨ã決å®ãã¾ããã
ãµãã¼ãã¯v1.33ã§å®å
¨ã«åé¤ããã¾ããã</p>
<p>ããã¯ããã¹ããããã¯ã¼ã¯ããã³ãã¹ãã¬ãã«ã®ã¢ã¯ã»ã¹ãæä¾ãã<a href="https://kubernetes.io/docs/tasks/configure-pod-container/create-hostprocess-pod/">HostProcessã³ã³ãã</a>ã«ã¯å½±é¿ããªããã¨ã«æ³¨æãã¦ãã ããã
v1.33ã§åãä¸ããããKEPã¯ããã¹ããããã¯ã¼ã¯ã®ã¿ãæä¾ãããã¨ã«é¢ãããã®ã§ããããWindowsã®ãããã¯ã¼ãã³ã°ãã¸ãã¯ã«ãããæè¡çãªå¶éã®ãããå®å®ãããã¨ã¯ããã¾ããã§ããã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/3503">KEP-3503: Host network support for Windows pods</a>ã§ç¢ºèªã§ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã">ãªãªã¼ã¹ãã¼ã</h2>
<p>Kubernetes v1.33ãªãªã¼ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.33.md">ãªãªã¼ã¹ãã¼ã</a>ãã覧ãã ããã</p>
<h2 id="å
¥ææ¹æ³">å
¥ææ¹æ³</h2>
<p>Kubernetes v1.33ã¯<a href="https://github.com/kubernetes/kubernetes/releases/tag/v1.33.0">GitHub</a>ã¾ãã¯<a href="https://kubernetes.io/releases/download/">Kuberneteså
¬å¼ãµã¤ãã®ãã¦ã³ãã¼ããã¼ã¸</a>ãããã¦ã³ãã¼ãã§ãã¾ãã</p>
<p>Kubernetesãå§ããã«ã¯ã<a href="https://kubernetes.io/ja/docs/tutorials/">ãã¥ã¼ããªã¢ã«</a>ããã§ãã¯ãããã<a href="https://minikube.sigs.k8s.io/">minikube</a>ã使ç¨ãã¦ãã¼ã«ã«Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ãã¦ãã ããã
ã¾ãã<a href="https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/">kubeadm</a>ã使ç¨ãã¦ç°¡åã«v1.33ãã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã ">ãªãªã¼ã¹ãã¼ã </h2>
<p>Kubernetesã¯ãã®ã³ãã¥ããã£ã®ãµãã¼ããã³ãããã¡ã³ããããã¦æ¸å½ãªåãã«ãã£ã¦ã®ã¿å®ç¾å¯è½ã§ãã
ãªãªã¼ã¹ãã¼ã ã¯ãã¦ã¼ã¶ã¼ãä¾åããKubernetesãªãªã¼ã¹ãæ§æããå¤ãã®é¨åãæ§ç¯ããããã«ååãããç®èº«çãªã³ãã¥ããã£ãã©ã³ãã£ã¢ã«ãã£ã¦æ§æããã¦ãã¾ãã
ããã«ã¯ãã³ã¼ãèªä½ããããã¥ã¡ã³ãã¼ã·ã§ã³ãããã¸ã§ã¯ã管çã¾ã§ãã³ãã¥ããã£ã®ããããåéã®äººã
ã®å°éçãªã¹ãã«ãå¿
è¦ã§ãã</p>
<p>ç§ãã¡ã¯ãKubernetes v1.33ãªãªã¼ã¹ãã³ãã¥ããã£ã«æä¾ããããã«ç±å¿ã«åãçµãã æéã«ã¤ãã¦ã<a href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.33/release-team.md">ãªãªã¼ã¹ãã¼ã </a>å
¨ä½ã«æè¬ãã¾ãã
ãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¯ãåãã¦ã®Shadow(è¦ç¿ã)ãããè¤æ°ã®ãªãªã¼ã¹ãµã¤ã¯ã«ã§å¹ãããçµé¨ãæã¡ã復帰ããããã¼ã ãªã¼ãã¾ã§å¹
åºãåå¨ãã¾ãã
ãã®ãªãªã¼ã¹ãµã¤ã¯ã«ã§ã¯ããªãªã¼ã¹ãã¼ãã¨Docsã®ãµããã¼ã ãçµ±åããDocsãµããã¼ã ã«çµ±ä¸ããã¨ããæ°ãããã¼ã æ§é ãæ¡ç¨ããã¾ããã
æ°ããDocsãã¼ã ããé¢é£æ
å ±ã¨ãªã½ã¼ã¹ãæ´çããç¶¿å¯ãªåªåã®ãããã§ããªãªã¼ã¹ãã¼ãã¨Docsã®è¿½è·¡ã¯åæ»ãã¤æåããç§»è¡ãå®ç¾ãã¾ããã
æå¾ã«ãæåãããªãªã¼ã¹ãµã¤ã¯ã«ãéãã¦ã®ãµãã¼ããæ¯æ´ã誰ãã广çã«è²¢ç®ã§ããããã«ããåãçµã¿ãããã¦ãªãªã¼ã¹ããã»ã¹ãæ¹åããããã®èª²é¡ã«å¯¾ãã¦ããªãªã¼ã¹ãªã¼ãã®Nina Polshakovaã«å¿ããæè¬ãã¾ãã</p>
<h2 id="ããã¸ã§ã¯ãã®æ´»åç¶æ³">ããã¸ã§ã¯ãã®æ´»åç¶æ³</h2>
<p>CNCF K8sã®<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStats</a>ããã¸ã§ã¯ãã¯ãKubernetesããã³æ§ã
ãªãµãããã¸ã§ã¯ãã®æ´»åç¶æ³ã«é¢ããè峿·±ããã¼ã¿ãã¤ã³ããéè¨ãã¦ãã¾ãã
ããã«ã¯å人ã®è²¢ç®ããè²¢ç®ä¼æ¥æ°ã¾ã§å«ã¾ãããã®ã¨ã³ã·ã¹ãã ã®çºå±ã«è²»ããããåªåã®æ·±ãã¨åºãã示ãã¦ãã¾ãã</p>
<p>v1.33ãªãªã¼ã¹ãµã¤ã¯ã«(2025å¹´1æ13æ¥ãã4æ23æ¥ã¾ã§ã®15é±é)ã«ããã¦ãKubernetesã«ã¯æå¤§121ã®ç°ãªã伿¥ã¨570人ã®å人ããè²¢ç®ãããã¾ãã(å·çæç¹ã§ã¯ããªãªã¼ã¹æ¥ã®æ°é±éåã®æ°å¤ã§ã)ã
ããåºç¯ãªã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã ã§ã¯ããã®æ°åã¯435社ãåè¨2400人ã®ã³ã³ããªãã¥ã¼ã¿ã¼ã«éãã¦ãã¾ãã
ãã¼ã¿ã½ã¼ã¹ã¯<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=d28&var-repogroup_name=All&var-repo_name=kubernetes%2Fkubernetes&from=1736755200000&to=1745477999000">ãã®ããã·ã¥ãã¼ã</a>ã§ç¢ºèªã§ãã¾ãã
<a href="https://kubernetes.io/blog/2024/12/11/kubernetes-v1-32-release/#project-velocity">ååã®ãªãªã¼ã¹v1.32ã®æ´»åãã¼ã¿</a>ã¨æ¯è¼ããã¨ã伿¥ãå人ããã®è²¢ç®ã¬ãã«ã¯åæ§ã§ãããã³ãã¥ããã£ã®é¢å¿ã¨åå ãå¼ãç¶ãå¼·ããã¨ã示ãã¦ãã¾ãã</p>
<p>ãªãããè²¢ç®ãã¨ã¯ã³ãããã®ä½æãã³ã¼ãã¬ãã¥ã¼ãã³ã¡ã³ããIssueãPRã®ä½æãPRã®ã¬ãã¥ã¼(ããã°ãããã¥ã¡ã³ããå«ã)ãã¾ãã¯IssueãPRã¸ã®ã³ã¡ã³ããè¡ããã¨ãæãã¾ãã
è²¢ç®ã«èå³ãããå ´åã¯ãå
¬å¼ããã¥ã¡ã³ãã®ã³ã³ããªãã¥ã¼ã¿ã¼åãã®<a href="https://www.kubernetes.dev/docs/guide/#getting-started">ã¯ããã«</a>ãã覧ãã ããã</p>
<p>Kubernetesããã¸ã§ã¯ãã¨ã³ãã¥ããã£ã®å
¨ä½çãªæ´»åç¶æ³ã«ã¤ãã¦ããã«è©³ããç¥ãã«ã¯ã<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStatsããã§ãã¯</a>ãã¦ãã ããã</p>
<h2 id="ã¤ãã³ãæ
å ±">ã¤ãã³ãæ
å ±</h2>
<p>ä»å¾éå¬äºå®ã®Kubernetesããã³ã¯ã©ã¦ããã¤ãã£ãã¤ãã³ã(KubeCon + CloudNativeConãKCDãªã©)ããä¸çåå°ã§éå¬ããã主è¦ãªã«ã³ãã¡ã¬ã³ã¹ã«ã¤ãã¦ç´¹ä»ãã¾ãã
Kubernetesã³ãã¥ããã£ã®ææ°æ
å ±ãå
¥æããåå ãã¾ãããï¼</p>
<p><strong>2025å¹´5æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-costa-rica-presents-kcd-costa-rica-2025/"><strong>KCD - Kubernetes Community Days: Costa Rica</strong></a>:
2025å¹´5æ3æ¥ | ã³ã¹ã¿ãªã«ãã¨ã¬ãã£ã¢</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-helsinki-presents-kcd-helsinki-2025/"><strong>KCD - Kubernetes Community Days: Helsinki</strong></a>:
2025å¹´5æ6æ¥ | ãã£ã³ã©ã³ãããã«ã·ã³ã</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-texas-presents-kcd-texas-austin-2025/"><strong>KCD - Kubernetes Community Days: Texas Austin</strong></a>:
2025å¹´5æ15æ¥ | ã¢ã¡ãªã«ããªã¼ã¹ãã£ã³</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-south-korea-presents-kcd-seoul-2025/"><strong>KCD - Kubernetes Community Days: Seoul</strong></a>:
2025å¹´5æ22æ¥ | éå½ãã½ã¦ã«</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-istanbul-presents-kcd-istanbul-2025/"><strong>KCD - Kubernetes Community Days: Istanbul, Turkey</strong></a>:
2025å¹´5æ23æ¥ | ãã«ã³ãã¤ã¹ã¿ã³ãã¼ã«</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-sf-bay-area-presents-kcd-san-francisco-bay-area/"><strong>KCD - Kubernetes Community Days: San Francisco Bay Area</strong></a>:
2025å¹´5æ28æ¥ | ã¢ã¡ãªã«ããµã³ãã©ã³ã·ã¹ã³</li>
</ul>
<p><strong>2025å¹´6æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-new-york-presents-kcd-new-york-2025/"><strong>KCD - Kubernetes Community Days: New York</strong></a>:
2025å¹´6æ4æ¥ | ã¢ã¡ãªã«ããã¥ã¼ã¨ã¼ã¯</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-czech-slovak-presents-kcd-czech-amp-slovak-bratislava-2025/"><strong>KCD - Kubernetes Community Days: Czech & Slovak</strong></a>:
2025å¹´6æ5æ¥ | ã¹ãããã¢ããã©ãã¹ã©ã</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-bengaluru-presents-kubernetes-community-days-bengaluru-2025-in-person/"><strong>KCD - Kubernetes Community Days: Bengaluru</strong></a>:
2025å¹´6æ6æ¥ | ã¤ã³ãããã³ã¬ãã¼ã«</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-china/"><strong>KubeCon + CloudNativeCon China 2025</strong></a>:
2025å¹´6æ10æ¥-11æ¥ | 馿¸¯</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-guatemala-presents-kcd-antigua-guatemala-2025/"><strong>KCD - Kubernetes Community Days: Antigua Guatemala</strong></a>:
2025å¹´6æ14æ¥ | ã°ã¢ããã©ãã¢ã³ãã£ã°ã¢ã»ã°ã¢ããã©</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-japan"><strong>KubeCon + CloudNativeCon Japan 2025</strong></a>:
2025å¹´6æ16æ¥-17æ¥ | æ¥æ¬ãæ±äº¬</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Nigeria, Africa</strong></a>:
2025å¹´6æ19æ¥ | ã¢ããªã«ããã¤ã¸ã§ãªã¢</li>
</ul>
<p><strong>2025å¹´7æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-netherlands-presents-kcd-utrecht-2025/"><strong>KCD - Kubernetes Community Days: Utrecht</strong></a>:
2025å¹´7æ4æ¥ | ãªã©ã³ããã¦ãã¬ãã</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-taiwan-presents-kcd-taipei-2025/"><strong>KCD - Kubernetes Community Days: Taipei</strong></a>:
2025å¹´7æ5æ¥ | å°æ¹¾ãå°å</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-lima-peru-presents-kcd-lima-peru-2025/"><strong>KCD - Kubernetes Community Days: Lima, Peru</strong></a>:
2025å¹´7æ19æ¥ | ãã«ã¼ããªã</li>
</ul>
<p><strong>2025å¹´8æ</strong></p>
<ul>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-india-2025/"><strong>KubeCon + CloudNativeCon India 2025</strong></a>:
2025å¹´8æ6æ¥-7æ¥ | ã¤ã³ãããã¤ãã©ãã¼ã</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-colombia-presents-kcd-colombia-2025/"><strong>KCD - Kubernetes Community Days: Colombia</strong></a>:
2025å¹´8æ29æ¥ | ã³ãã³ãã¢ããã´ã¿</li>
</ul>
<p>ææ°ã®KCDæ
å ±ã¯<a href="https://www.cncf.io/kcds/">ãã¡ã</a>ã§ã確èªããã ãã¾ãã</p>
<h2 id="ã¦ã§ããã¼ã®ãæ¡å
">ã¦ã§ããã¼ã®ãæ¡å
</h2>
<p>Kubernetes v1.33ãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¨ä¸ç·ã« <strong>2025å¹´5æ16æ¥(é)åå¾4æ(UTC)</strong> ããããã®ãªãªã¼ã¹ã®ãã¤ã©ã¤ããã¢ããã°ã¬ã¼ãã®è¨ç»ã«å½¹ç«ã¤éæ¨å¥¨äºé
ãåé¤äºé
ã«ã¤ãã¦å¦ã³ã¾ãããã
詳細ããã³åå ç»é²ã¯ãCNCFãªã³ã©ã¤ã³ããã°ã©ã ã»ãµã¤ãã®<a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-133-release/">ã¤ãã³ããã¼ã¸</a>ãã覧ãã ããã</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p>Kubernetesã«é¢ããæãç°¡åãªæ¹æ³ã¯ãããªãã®èå³ã«åã£ã<a href="https://github.com/kubernetes/community/blob/master/sig-list.md">Special Interest Groups</a> (SIGs)ã®ããããã«åå ãããã¨ã§ãã
Kubernetesã³ãã¥ããã£ã«åãã¦ä½ãçºä¿¡ããããã¨ã¯ããã¾ããï¼
æ¯é±ã®<a href="https://github.com/kubernetes/community/tree/master/communication">ã³ãã¥ããã£ãã¼ãã£ã³ã°</a>ãã以ä¸ã®ãã£ã³ãã«ã§ããªãã®å£°ãå
±æãã¦ãã ããã
ç¶ç¶çãªãã£ã¼ãããã¯ã¨ãµãã¼ãã«æè¬ãããã¾ãã</p>
<ul>
<li>ææ°æ
å ±ã¯BlueSkyã®<a href="https://bsky.app/profile/kubernetes.io">@kubernetes.io</a>ããã©ãã¼ãã¦ãã ãã</li>
<li><a href="https://discuss.kubernetes.io/">Discuss</a>ã§ã³ãã¥ããã£ãã£ã¹ã«ãã·ã§ã³ã«åå ãã¦ãã ãã</li>
<li><a href="http://slack.k8s.io/">Slack</a>ã§ã³ãã¥ããã£ã«åå ãã¦ãã ãã</li>
<li><a href="https://serverfault.com/questions/tagged/kubernetes">Server Fault</a>ã<a href="http://stackoverflow.com/questions/tagged/kubernetes">Stack Overflow</a>ã§è³ªåããããåçããããã¦ãã ãã</li>
<li>ããªãã®Kubernetesã«é¢ãã<a href="https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform">ã¹ãã¼ãªã¼</a>ãå
±æãã¦ãã ãã</li>
<li>Kubernetesã®ææ°æ
å ±ã¯<a href="https://kubernetes.io/blog/">ããã°</a>ã§ããã«è©³ããèªããã¨ãã§ãã¾ã</li>
<li><a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Kubernetes Release Team</a>ã«ã¤ãã¦ã®è©³ç´°ã¯ãã¡ããã覧ãã ãã</li>
</ul>
- Kubernetesã®ãã«ãã³ã³ããPod: æ¦è¦https://kubernetes.io/ja/blog/2025/04/22/multi-container-pods-overview/Tue, 22 Apr 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/04/22/multi-container-pods-overview/
<p>ã¯ã©ã¦ããã¤ãã£ãã¢ã¼ããã¯ãã£ã®é²åãç¶ãä¸ãKubernetesã¯è¤éã§åæ£ããã·ã¹ãã ããããã¤ããããã®å®çªã®ãã©ãããã©ã¼ã ã¨ãªã£ã¦ãã¾ããã
ãã®ã¨ã³ã·ã¹ãã ã«ãããæãå¼·åã§ãããªããç¹ç´°ãªè¨è¨ãã¿ã¼ã³ã®ä¸ã¤ããµã¤ãã«ã¼ãã¿ã¼ã³ã§ããããã¯ãéçºè
ãã½ã¼ã¹ã³ã¼ãã«æ·±ãè¸ã¿è¾¼ããã¨ãªããã¢ããªã±ã¼ã·ã§ã³ã®æ©è½ãæ¡å¼µã§ããææ³ã§ãã</p>
<h2 id="ãµã¤ãã«ã¼ãã¿ã¼ã³ã®èµ·æº">ãµã¤ãã«ã¼ãã¿ã¼ã³ã®èµ·æº</h2>
<p>ãµã¤ãã«ã¼ã¯ããã¤ã¯ã«åãä»ããä¿¡é ¼ã§ããè£å©åº§å¸ã®ãããªãã®ã ã¨èãã¦ã¿ã¦ãã ããã
ITã¤ã³ãã©ã¹ãã©ã¯ãã£ã§ã¯ãéè¦ãªå¦çãæ
ãããã«ãè£å©çãªãµã¼ãã¹ã徿¥ããå©ç¨ããã¦ãã¾ããã
ã³ã³ãããç»å ´ãã以åã¯ããã®ã³ã°ãã¢ãã¿ãªã³ã°ããããã¯ã¼ã¯å¦çã管çããããã«ãããã¯ã°ã©ã¦ã³ãããã»ã¹ããã«ãã¼ãã¼ã¢ã³ã«ä¾åãã¦ãã¾ããã
ãã¤ã¯ããµã¼ãã¹ã®é©å½ã«ããããã®ã¢ããã¼ãã¯å¤é©ããããµã¤ãã«ã¼ã¯ä½ç³»çãã¤æå³çãªã¢ã¼ããã¯ãã£ã®é¸æè¢ã¨ãªãã¾ããã
ãã¤ã¯ããµã¼ãã¹ã®å°é ã«ä¼´ãããµã¤ãã«ã¼ãã¿ã¼ã³ã¯ããæç¢ºã«å®ç¾©ãããããã«ãªããéçºè
ã¯ã¡ã¤ã³ãµã¼ãã¹ã®ã³ã¼ãã夿´ãããã¨ãªããç¹å®ã®è²¬åãåãé¢ããããã«ãªãã¾ããã
IstioãLinkerdã®ãããªãµã¼ãã¹ã¡ãã·ã¥ã¯ããµã¤ãã«ã¼ãããã·ãæ®åããããããã®è£å©çãªã³ã³ããã忣ã·ã¹ãã ã«ãããå¯è¦³æ¸¬æ§ãã»ãã¥ãªãã£ããã©ãã£ãã¯ç®¡çãæ´ç·´ãããæ¹æ³ã§å¦çã§ãããã¨ã示ãã¾ããã</p>
<h2 id="kubernetesã«ãããå®è£
">Kubernetesã«ãããå®è£
</h2>
<p>Kubernetesã§ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/sidecar-containers/">ãµã¤ãã«ã¼ã³ã³ãã</a>ã¯ã¡ã¤ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã¨åãPodå
ã§åä½ããéä¿¡ããªã½ã¼ã¹ã®å
±æãå¯è½ã«ãã¾ãã
ããã¯ãåã«Podå
ã«è¤æ°ã®ã³ã³ããã並åã«å®ç¾©ãããã¨ã®ããã«èãããããããã¾ããã
å®éããã®éãã§ãããKubernetes v1.29.0ã§ãµã¤ãã«ã¼ã®ãã¤ãã£ããµãã¼ããå°å
¥ãããã¾ã§ã¯ããã®ããã«å®è£
ããå¿
è¦ãããã¾ããã
ç¾å¨ã§ã¯ãPodãããã§ã¹ãå
ã§<code>spec.initContainers</code>ãã£ã¼ã«ãã使ç¨ãã¦ãµã¤ãã«ã¼ã³ã³ãããå®ç¾©ãããã¨ãã§ãã¾ãã
ããããµã¤ãã«ã¼ã³ã³ããã¨ãã¦æ©è½ããããã¤ã³ãã¯ã<code>restartPolicy: Always</code>ãæå®ãããã¨ã§ãã
以ä¸ã¯ãã®ä¸ä¾ã§ãKubernetesãããã§ã¹ãå
¨ä½ã®ä¸é¨ãæç²ãããã®ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">initContainers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>logshipper<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>alpine:latest<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">restartPolicy</span>:<span style="color:#bbb"> </span>Always<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">command</span>:<span style="color:#bbb"> </span>[<span style="color:#b44">'sh'</span>,<span style="color:#bbb"> </span><span style="color:#b44">'-c'</span>,<span style="color:#bbb"> </span><span style="color:#b44">'tail -F /opt/logs.txt'</span>]<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">volumeMounts</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>data<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">mountPath</span>:<span style="color:#bbb"> </span>/opt<span style="color:#bbb">
</span></span></span></code></pre></div><p><code>spec.initContainers</code>ã¨ãããã£ã¼ã«ãåã¯ãæ··ä¹±ãæãããããã¾ããã
ãµã¤ãã«ã¼ã³ã³ãããå®ç¾©ãããã®ã«ããªã<code>spec.initContainers</code>é
åã«ã¨ã³ããªã追å ããªããã°ãªããªãã®ã§ããããï¼
<code>spec.initContainers</code>ã«å®ç¾©ãããã³ã³ããã¯ãã¡ã¤ã³ã¢ããªã±ã¼ã·ã§ã³ãèµ·åããç´åã«ä¸åº¦ã ãå®è¡ãããå®äºããã¨çµäºãã¾ãã
䏿¹ããµã¤ãã«ã¼ã³ã³ããã¯é常ãã¡ã¤ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨ä¸¦è¡ãã¦åä½ãç¶ãã¾ãã
Kubernetesã«ããããã¤ãã£ããªãµã¤ãã«ã¼ã³ã³ããã¯ã<code>spec.initContainers</code>ã«<code>restartPolicy:Always</code>ãæå®ãããã¨ã§ã徿¥ã®<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/init-containers/">Initã³ã³ãã</a>ã¨ã¯ç°ãªãæåãæã¡ã常ã«ç¨¼åãç¶ãããã¨ãä¿è¨¼ããã¾ãã</p>
<h2 id="ãµã¤ãã«ã¼ãæ¡ç¨ãã¹ãå ´åã¨é¿ããã¹ãå ´å">ãµã¤ãã«ã¼ãæ¡ç¨ãã¹ãå ´åã¨é¿ããã¹ãå ´å</h2>
<p>ãµã¤ãã«ã¼ãã¿ã¼ã³ã¯å¤ãã®ã±ã¼ã¹ã§æç¨ã§ãããæ£å½åããããããªã¦ã¼ã¹ã±ã¼ã¹ããªãéããä¸è¬çã«ã¯æ¨å¥¨ãããææ³ã§ã¯ããã¾ããã
ãµã¤ãã«ã¼ã追å ããã¨ãè¤éæ§ããªã½ã¼ã¹æ¶è²»ããããã¯ã¼ã¯é
å»¶ã®å¯è½æ§ãå¢å¤§ãã¾ãã
ãã®ä»£ããã«ãã¾ãã¯çµã¿è¾¼ã¿ã©ã¤ãã©ãªãå
±éã¤ã³ãã©ãªã©ãããåç´ãªä»£æ¿ææ®µãæ¤è¨ãã¹ãã§ãã</p>
<p><strong>ãµã¤ãã«ã¼ã®å°å
¥ãé©ãã¦ããã®ã¯æ¬¡ã®ãããªå ´åã§ã:</strong></p>
<ol>
<li>å
ã®ã³ã¼ãã«æãå ãããã¨ãªãã¢ããªã±ã¼ã·ã§ã³ã®æ©è½ãæ¡å¼µããå¿
è¦ãããå ´å</li>
<li>ãã®ã³ã°ãã¢ãã¿ãªã³ã°ãã»ãã¥ãªãã£ãªã©ã®æ¨ªæçãªèæ
®ãå¿
è¦ãªå®è£
ãããå ´å</li>
<li>ã¢ãã³ãªãããã¯ã¼ã¯æ©è½ãå¿
è¦ã¨ããã¬ã¬ã·ã¼ã¢ããªã±ã¼ã·ã§ã³ãæ±ãå ´å</li>
<li>ç¬ç«ããã¹ã±ã¼ãªã³ã°ãæ´æ°ãæ±ãããããã¤ã¯ããµã¼ãã¹ãè¨è¨ããå ´å</li>
</ol>
<p><strong>次ã®ãããªå ´åã¯æ
éã«æ¤è¨ãã¦ãã ãã:</strong></p>
<ol>
<li>ãªã½ã¼ã¹å¹çãæåªå
ãããå ´å</li>
<li>æå°éã®ãããã¯ã¼ã¯é
å»¶ãéè¦ãªå ´å</li>
<li>ããåç´ãªä»£æ¿ææ®µãåå¨ããå ´å</li>
<li>ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ã®è¤éããæå°éã«æãããå ´å</li>
</ol>
<h2 id="4ã¤ã®éè¦ãªãã«ãã³ã³ãããã¿ã¼ã³">4ã¤ã®éè¦ãªãã«ãã³ã³ãããã¿ã¼ã³</h2>
<h3 id="initã³ã³ãããã¿ã¼ã³">Initã³ã³ãããã¿ã¼ã³</h3>
<p><strong>Initã³ã³ãã</strong>ãã¿ã¼ã³ã¯ãã¡ã¤ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã³ã³ãããèµ·åããåã«(ãã°ãã°éè¦ãª)åæåå¦çãå®è¡ããããã«ä½¿ç¨ããã¾ãã
é常ã®ã³ã³ããã¨ç°ãªããInitã³ã³ããã¯å¦çãå®äºããã¨çµäºããã¡ã¤ã³ã¢ããªã±ã¼ã·ã§ã³ã®åææ¡ä»¶ãæºãããããã¨ãä¿è¨¼ãã¾ãã</p>
<p><strong>ãã®ãã¿ã¼ã³ãé©ãã¦ããã±ã¼ã¹:</strong></p>
<ol>
<li>å種è¨å®ã®æºå</li>
<li>ã·ã¼ã¯ã¬ããã®èªã¿è¾¼ã¿</li>
<li>ä¾åé¢ä¿ã®å©ç¨å¯è½æ§ã®ç¢ºèª</li>
<li>ãã¼ã¿ãã¼ã¹ãã¤ã°ã¬ã¼ã·ã§ã³ã®å®è¡</li>
</ol>
<p>Initã³ã³ããã使ç¨ãããã¨ã§ãã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ãã夿´ãããã¨ãªããäºæ¸¬å¯è½ã§å¶å¾¡ãããç°å¢ä¸ã§ã®èµ·åãå®ç¾ã§ãã¾ãã</p>
<h3 id="ambassadorãã¿ã¼ã³">Ambassadorãã¿ã¼ã³</h3>
<p>Ambassadorã³ã³ããã¯ãPodå
ã§åä½ããè£å©çãªãµã¼ãã¹ãæä¾ãããããã¯ã¼ã¯ãµã¼ãã¹ã¸ã®ã¢ã¯ã»ã¹ãç°¡æåãã¾ãã
ä¸è¬çã«ãAmbassadorã³ã³ããã¯ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã«ä»£ãã£ã¦ãããã¯ã¼ã¯ãªã¯ã¨ã¹ããéä¿¡ãããµã¼ãã¹æ¤åºããã¢ã®è奿¤è¨¼ãéä¿¡ã®æå·åã¨ãã£ãå¦çãæ
ãã¾ãã</p>
<p><strong>ãã®ãã¿ã¼ã³ãç¹ã«æå¹ãªã®ã¯æ¬¡ã®ãããªå ´åã§ã:</strong></p>
<ol>
<li>ã¯ã©ã¤ã¢ã³ãæ¥ç¶ã«é¢ããå¦çãåãé¢ãå ´å</li>
<li>è¨èªã«ä¾åããªããããã¯ã¼ã¯æ©è½ãå®è£
ããå ´å</li>
<li>TLSãªã©ã®ã»ãã¥ãªãã£å±¤ã追å ããå ´å</li>
<li>å
ç¢ãªãµã¼ããããã¬ã¼ã«ã¼ããªãã©ã¤æ©æ§ãæ§ç¯ããå ´å</li>
</ol>
<h3 id="configuration-helper">Configuration helper</h3>
<p><em>configuration helper</em> ãµã¤ãã«ã¼ã¯ãã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦è¨å®ã®æ´æ°ãåçã«æä¾ãããµã¼ãã¹ã䏿ããããã¨ãªãå¸¸ã«ææ°ã®è¨å®ã«ã¢ã¯ã»ã¹ã§ããããã«ãã¾ãã
å¤ãã®å ´åãã¢ããªã±ã¼ã·ã§ã³ãæ£å¸¸ã«èµ·åããããã«ã¯ãäºåã«åæè¨å®ãæä¾ããå¿
è¦ãããã¾ãã</p>
<p><strong>ã¦ã¼ã¹ã±ã¼ã¹:</strong></p>
<ol>
<li>ç°å¢å¤æ°ãã·ã¼ã¯ã¬ããã®åå¾</li>
<li>è¨å®å¤æ´ã®ãã¼ãªã³ã°</li>
<li>è¨å®ç®¡çã¨ã¢ããªã±ã¼ã·ã§ã³ãã¸ãã¯ã®åé¢</li>
</ol>
<h3 id="adapterãã¿ã¼ã³">Adapterãã¿ã¼ã³</h3>
<p><em>adapter</em>(ã¾ã㯠<em>façade</em>)ã³ã³ããã¯ãã¡ã¤ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨å¤é¨ãµã¼ãã¹ã¨ã®éã®ç¸äºéç¨æ§ãå®ç¾ãã¾ãã
ããã¯ããã¼ã¿å½¢å¼ããããã³ã«ãã¾ãã¯APIã®å¤æãè¡ããã¨ã§å®ç¾ããã¾ãã</p>
<p><strong>ãã®ãã¿ã¼ã³ã®å¼·ã¿:</strong></p>
<ol>
<li>ã¬ã¬ã·ã¼ãªãã¼ã¿å½¢å¼ã®å¤æ</li>
<li>éä¿¡ãããã³ã«éã®æ©æ¸¡ã</li>
<li>äºææ§ã®ãªããµã¼ãã¹éã®çµ±åä¿é²</li>
</ol>
<h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>ãµã¤ãã«ã¼ãã¿ã¼ã³ã¯é常ã«é«ãæè»æ§ãæä¾ãã¦ããã¾ãããéã®å¼¾ä¸¸ã§ã¯ããã¾ããã
ãµã¤ãã«ã¼ã追å ãããã³ã«ãè¤éæ§ãå¢ãããªã½ã¼ã¹ãæ¶è²»ããéç¨è² è·ãé«ã¾ãå¯è½æ§ãããã¾ãã
ã¾ãã¯ãããåç´ãªä»£æ¿ææ®µãæ¤è¨ããããã«ãã¦ãã ããã
éµã¨ãªãã®ã¯ãæ¦ç¥çãªå®è£
ã§ãã
ãµã¤ãã«ã¼ã¯ãããããå ´é¢ã§ä½¿ãããã©ã«ãã®æ¹æ³ã§ã¯ãªããç¹å®ã®ã¢ã¼ããã¯ãã£ä¸ã®èª²é¡ã解決ããããã®ç²¾å¯ãªãã¼ã«ã¨ãã¦æ´»ç¨ãã¹ãã§ãã
é©åã«ä½¿ç¨ããã°ãã³ã³ããåãããç°å¢ã«ããã¦ãã»ãã¥ãªãã£ããããã¯ã¼ãã³ã°ãè¨å®ç®¡çã®åä¸ã«è²¢ç®ã§ãã¾ãã
è³¢æã«é¸ã³ãæ³¨ææ·±ãå®è£
ãããµã¤ãã«ã¼ãæ´»ç¨ãã¦ã³ã³ããã¨ã³ã·ã¹ãã ãããã«é«ãã¾ãããã</p>
- kube-scheduler-simulatorã®ç´¹ä»https://kubernetes.io/ja/blog/2025/04/07/introducing-kube-scheduler-simulator/Mon, 07 Apr 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/04/07/introducing-kube-scheduler-simulator/
<p>Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãPodãã©ã®ãã¼ãã§å®è¡ãããããæ±ºå®ãããé常ã«éè¦ãªã³ã³ããã¼ã«ãã¬ã¼ã³ã³ã³ãã¼ãã³ãã§ãã
ãã®ãããKubernetesãå©ç¨ãããã¹ã¦ã®ã¦ã¼ã¶ã¼ã¯ãã¹ã±ã¸ã¥ã¼ã©ã¼ã«ä¾åãã¦ãã¾ãã</p>
<p><a href="https://github.com/kubernetes-sigs/kube-scheduler-simulator">kube-scheduler-simulator</a>ã¯ãKubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã® <em>ã·ãã¥ã¬ã¼ã¿ã¼</em> ã§ããã<a href="https://summerofcode.withgoogle.com/">Google Summer of Code 2021</a>ã«ããã¦ç§(Kensei Nakada)ãéçºãéå§ãããã®å¾å¤ãã®ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãã¦ããããã¸ã§ã¯ãã§ãã
ãã®ãã¼ã«ã使ç¨ããã¨ãã¹ã±ã¸ã¥ã¼ã©ã¼ã®åä½ãæææ±ºå®ã詳細ã«è¦³å¯ãããã¨ãã§ãã¾ãã</p>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ã¯ãã¹ã±ã¸ã¥ã¼ãªã³ã°å¶ç´(ãã¨ãã°ã<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity/%23affinity-and-anti-affinity">Podéã®ã¢ãã£ããã£</a>)ãå©ç¨ããä¸è¬ã¦ã¼ã¶ã¼ã«ã¨ã£ã¦ãæç¨ã§ãããã«ã¹ã¿ã ãã©ã°ã¤ã³ã«ãã£ã¦ã¹ã±ã¸ã¥ã¼ã©ã¼ãæ¡å¼µããã¨ãã¹ãã¼ãã«ã¨ã£ã¦ãæç¨ã§ãã</p>
<h2 id="åæ©">åæ©</h2>
<p>ã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãå¤ãã®ãã©ã°ã¤ã³ã§æ§æããã¦ããããããããç¬èªã®è¦³ç¹ã§ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®æææ±ºå®ã«å¯ä¸ãã¦ããããããã°ãã°ãã©ãã¯ããã¯ã¹ã®ããã«è¦ãã¾ãã
ãã®åä½ãçè§£ãããã¨ã¯ãèæ
®ãããè¦ç´ ãé常ã«å¤ãããå°é£ã§ãã</p>
<p>ãã¨ãã·ã³ãã«ãªãã¹ãã¯ã©ã¹ã¿ã¼ã«ããã¦Podãæ£ããã¹ã±ã¸ã¥ã¼ãªã³ã°ããã¦ããããã«è¦ãã¦ããæ³å®ã¨ã¯ç°ãªãè¨ç®ã«åºã¥ãã¦ã¹ã±ã¸ã¥ã¼ãªã³ã°ããã¦ããå¯è½æ§ãããã¾ãã
ãã®ãããªããã¯ãæ¬çªã®å¤§è¦æ¨¡ãªç°å¢ã«ããã¦ãäºæããªãã¹ã±ã¸ã¥ã¼ãªã³ã°çµæãå¼ãèµ·ãããã¨ã«ã¤ãªããããã¾ããã</p>
<p>ã¾ããã¹ã±ã¸ã¥ã¼ã©ã¼ããã¹ããããã¨ã¯é常ã«è¤éãªèª²é¡ã§ãã
å®éã®ã¯ã©ã¹ã¿ã¼å
ã§ã¯ç¡æ°ã®æä½ãã¿ã¼ã³ãåå¨ããæéãªæ°ã®ãã¹ãã§ããããã·ããªãªãäºæ¸¬ãããã¨ã¯ç¾å®çã§ã¯ããã¾ããã
å¤ãã®å ´åãã¹ã±ã¸ã¥ã¼ã©ã¼ãå®éã®ã¯ã©ã¹ã¿ã¼ã«ãããã¤ãã¦åãã¦ãã°ãçºè¦ããã¾ãã
å®éãã¢ããã¹ããªã¼ã ã®kube-schedulerã§ãã£ã¦ãããªãªã¼ã¹å¾ã«ã¦ã¼ã¶ã¼ã«ãã£ã¦å¤ãã®ãã°ãçºè¦ããã¦ãã¾ãã</p>
<p>ã¹ã±ã¸ã¥ã¼ã©ã¼ããããã¯ã©ããªKubernetesã³ã³ããã¼ã©ã¼ã§ãã£ã¦ãããããããã¹ãããããã®éçºç°å¢ããµã³ãããã¯ã¹ç°å¢ãç¨æãããã¨ã¯ãä¸è¬çãªãã©ã¯ãã£ã¹ã§ãã
ãããããã®æ¹æ³ã§ã¯ãæ¬çªã¯ã©ã¹ã¿ã¼ã§çºçãå¾ããã¹ã¦ã®ã·ããªãªãç¶²ç¾
ããã«ã¯ä¸ååã§ãã
ã¨ããã®ããéçºã¯ã©ã¹ã¿ã¼ã¯éå¸¸ãæ¬çªã«æ¯ã¹ã¦ã¯ããã«å°è¦æ¨¡ã§ãããã¯ã¼ã¯ãã¼ãã®è¦æ¨¡ãã¹ã±ã¼ãªã³ã°ã®ç¹æ§ã«ã大ããªéããããããã§ãã
éçºã¯ã©ã¹ã¿ã¼ã¯æ¬çªç°å¢ã¨ã¾ã£ããåã使ããæ¹ããããã¨ã¯ãªããåãæåã示ããã¨ãããã¾ããã</p>
<p>kube-scheduler-simulatorã¯ããããã®åé¡ã解決ãããã¨ãç®çã¨ãã¦ãã¾ãã
ã¦ã¼ã¶ã¼ã¯ããã®ãã¼ã«ãç¨ãã¦ã¹ã±ã¸ã¥ã¼ãªã³ã°å¶ç´ãã¹ã±ã¸ã¥ã¼ã©ã¼ã®è¨å®ãã«ã¹ã¿ã ãã©ã°ã¤ã³ããã¹ããã¤ã¤ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã®æææ±ºå®ã«ããããããã詳細ãªé¨åã確èªãããã¨ãã§ãã¾ãã
ã¾ããã¦ã¼ã¶ã¼ã¯æ¬çªã¯ã©ã¹ã¿ã¼ã¨åããªã½ã¼ã¹ã使ããªãããå®éã®ã¯ã¼ã¯ãã¼ãã«å½±é¿ãä¸ãããã¨ãªããã¹ã±ã¸ã¥ã¼ã©ã¼ããã¹ãã§ããã·ãã¥ã¬ã¼ããããã¯ã©ã¹ã¿ã¼ç°å¢ã使ãããã¨ãå¯è½ã§ãã</p>
<h2 id="kube-scheduler-simulatorã®æ©è½">kube-scheduler-simulatorã®æ©è½</h2>
<p>kube-scheduler-simulatorã®ã³ã¢æ©è½ã¯ãã¹ã±ã¸ã¥ã¼ã©ã¼ã®å
é¨çãªæææ±ºå®ãå¯è¦åã§ããç¹ã«ããã¾ãã
ã¹ã±ã¸ã¥ã¼ã©ã¼ã¯<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/scheduling-framework/">ã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¬ã¼ã ã¯ã¼ã¯</a>ã«åºã¥ãã¦åä½ãã¦ããããã¾ãã¾ãªæ¡å¼µãã¤ã³ãã§è¤æ°ã®ãã©ã°ã¤ã³ãå©ç¨ãããã¼ãã®ãã£ã«ã¿ãªã³ã°(Filterãã§ã¼ãº)ãã¹ã³ã¢ä»ã(Scoreãã§ã¼ãº)ãçµã¦ãæçµçã«Podã«æé©ãªãã¼ããæ±ºå®ãã¾ãã</p>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ãç¨ãããã¨ã§ãã¦ã¼ã¶ã¼ã¯Kubernetesãªã½ã¼ã¹ã使ããåãã©ã°ã¤ã³ãPodã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ã«ã©ã®ããã«å½±é¿ãä¸ãã¦ãããã観å¯ã§ãã¾ãã
ããã«ãããã¹ã±ã¸ã¥ã¼ã©ã¼ã®ä»çµã¿ãçè§£ããé©åãªã¹ã±ã¸ã¥ã¼ãªã³ã°å¶ç´ãå®ç¾©ããå©ãã¨ãªãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/images/blog/2025-04-07-kube-scheduler-simulator/simulator.png"
alt="ãã¼ããã¨ããã³æ¡å¼µãã¤ã³ããã¨ã®è©³ç´°ãªã¹ã±ã¸ã¥ã¼ãªã³ã°çµæã表示ãããã·ãã¥ã¬ã¼ã¿ã¼ã®Webããã³ãã¨ã³ãã®ã¹ã¯ãªã¼ã³ã·ã§ãã"/> <figcaption>
<h4>ã·ãã¥ã¬ã¼ã¿ã¼ã®webããã³ãã¨ã³ã</h4>
</figcaption>
</figure>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ã®å
é¨ã§ã¯ãé常ã®ã¹ã±ã¸ã¥ã¼ã©ã¼(vanilla scheduler)ã§ã¯ãªããDebuggable Schedulerã¨å¼ã°ãããããã°ã容æã«ããã¹ã±ã¸ã¥ã¼ã©ã¼ãåä½ãã¾ãã
ãã®Debuggable Schedulerã¯ã忡張ãã¤ã³ãã«ãããåã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³ã®çµæãã以ä¸ã®ãããã§ã¹ãã«ç¤ºãããã«Podã®ã¢ããã¼ã·ã§ã³ã¨ãã¦åºåãã¾ãã
webããã³ãã¨ã³ãã¯ãããã®ã¢ããã¼ã·ã§ã³ã«åºã¥ãã¦ã¹ã±ã¸ã¥ã¼ãªã³ã°çµæãæ´å½¢ã»å¯è¦åãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic"># ãã®ããã°æç¨¿ã§ã¯ãã¢ããã¼ã·ã§ã³å
ã®JSONã¯è¦ãããã®ããã«æåã§æ´å½¢ããã¦ãã¾ãã</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">annotations</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/bind-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{"DefaultBinder":"success"}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/filter-result</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-jjfg5":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeName":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeUnschedulable":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"passed"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> },
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-mtb5x":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeName":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeUnschedulable":"passed",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"passed"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/finalscore-result</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-jjfg5":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "ImageLocality":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesBalancedAllocation":"52",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"47",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"300",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeBinding":"0"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> },
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-mtb5x":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "ImageLocality":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesBalancedAllocation":"76",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"73",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"300",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeBinding":"0"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/permit-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/permit-result-timeout</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/postfilter-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/prebind-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{"VolumeBinding":"success"}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/prefilter-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/prefilter-result-status</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "AzureDiskLimits":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "EBSLimits":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "GCEPDLimits":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "InterPodAffinity":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodePorts":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"success",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeVolumeLimits":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "PodTopologySpread":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeBinding":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeRestrictions":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeZone":""
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/prescore-result</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "InterPodAffinity":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"success",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesBalancedAllocation":"success",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"success",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "PodTopologySpread":"",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"success"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/reserve-result</span>:<span style="color:#bbb"> </span><span style="color:#b44">'{"VolumeBinding":"success"}'</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/result-history</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> [
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/bind-result":"{\"DefaultBinder\":\"success\"}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/filter-result":"{\"node-jjfg5\":{\"NodeName\":\"passed\",\"NodeResourcesFit\":\"passed\",\"NodeUnschedulable\":\"passed\",\"TaintToleration\":\"passed\"},\"node-mtb5x\":{\"NodeName\":\"passed\",\"NodeResourcesFit\":\"passed\",\"NodeUnschedulable\":\"passed\",\"TaintToleration\":\"passed\"}}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/finalscore-result":"{\"node-jjfg5\":{\"ImageLocality\":\"0\",\"NodeAffinity\":\"0\",\"NodeResourcesBalancedAllocation\":\"52\",\"NodeResourcesFit\":\"47\",\"TaintToleration\":\"300\",\"VolumeBinding\":\"0\"},\"node-mtb5x\":{\"ImageLocality\":\"0\",\"NodeAffinity\":\"0\",\"NodeResourcesBalancedAllocation\":\"76\",\"NodeResourcesFit\":\"73\",\"TaintToleration\":\"300\",\"VolumeBinding\":\"0\"}}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/permit-result":"{}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/permit-result-timeout":"{}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/postfilter-result":"{}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/prebind-result":"{\"VolumeBinding\":\"success\"}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/prefilter-result":"{}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/prefilter-result-status":"{\"AzureDiskLimits\":\"\",\"EBSLimits\":\"\",\"GCEPDLimits\":\"\",\"InterPodAffinity\":\"\",\"NodeAffinity\":\"\",\"NodePorts\":\"\",\"NodeResourcesFit\":\"success\",\"NodeVolumeLimits\":\"\",\"PodTopologySpread\":\"\",\"VolumeBinding\":\"\",\"VolumeRestrictions\":\"\",\"VolumeZone\":\"\"}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/prescore-result":"{\"InterPodAffinity\":\"\",\"NodeAffinity\":\"success\",\"NodeResourcesBalancedAllocation\":\"success\",\"NodeResourcesFit\":\"success\",\"PodTopologySpread\":\"\",\"TaintToleration\":\"success\"}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/reserve-result":"{\"VolumeBinding\":\"success\"}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/score-result":"{\"node-jjfg5\":{\"ImageLocality\":\"0\",\"NodeAffinity\":\"0\",\"NodeResourcesBalancedAllocation\":\"52\",\"NodeResourcesFit\":\"47\",\"TaintToleration\":\"0\",\"VolumeBinding\":\"0\"},\"node-mtb5x\":{\"ImageLocality\":\"0\",\"NodeAffinity\":\"0\",\"NodeResourcesBalancedAllocation\":\"76\",\"NodeResourcesFit\":\"73\",\"TaintToleration\":\"0\",\"VolumeBinding\":\"0\"}}",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "kube-scheduler-simulator.sigs.k8s.io/selected-node":"node-mtb5x"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> ]</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/score-result</span>:<span style="color:#bbb"> </span>>-<span style="color:#b44;font-style:italic">
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> {
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-jjfg5":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "ImageLocality":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesBalancedAllocation":"52",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"47",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeBinding":"0"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> },
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "node-mtb5x":{
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "ImageLocality":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeAffinity":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesBalancedAllocation":"76",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "NodeResourcesFit":"73",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "TaintToleration":"0",
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> "VolumeBinding":"0"
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }
</span></span></span><span style="display:flex;"><span><span style="color:#b44;font-style:italic"> }</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kube-scheduler-simulator.sigs.k8s.io/selected-node</span>:<span style="color:#bbb"> </span>node-mtb5x<span style="color:#bbb">
</span></span></span></code></pre></div><p>ã¦ã¼ã¶ã¼ã¯ã¾ãã<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/scheduling-framework/">èªèº«ã®ã«ã¹ã¿ã ãã©ã°ã¤ã³</a>ã<a href="https://github.com/kubernetes/design-proposals-archive/blob/main/scheduling/scheduler_extender.md">extender</a>ããã®Debuggable Schedulerã«çµ±åãããã®çµæãå¯è¦åãããã¨ãã§ãã¾ãã</p>
<p>ãã®Debuggable Schedulerã¯ããã¨ãã°ä»»æã®Kubernetesã¯ã©ã¹ã¿ã¼ä¸ãçµ±åãã¹ãå
ãªã©ãã¹ã¿ã³ãã¢ãã¼ã³ã§å®è¡ãããã¨ãå¯è½ã§ããããã¯ãèªèº«ã®ãã©ã°ã¤ã³ããã¹ãããããå®ã¯ã©ã¹ã¿ã¼ä¸ã§ã«ã¹ã¿ã ã¹ã±ã¸ã¥ã¼ã©ã¼ããããããã°ãããããããã¨èããã«ã¹ã¿ã ãã©ã°ã¤ã³éçºè
ã«ã¨ã£ã¦æç¨ã§ãã</p>
<h2 id="ããåªããéçºã¯ã©ã¹ã¿ã¼ã¨ãã¦ã®ã·ãã¥ã¬ã¼ã¿ã¼">ããåªããéçºã¯ã©ã¹ã¿ã¼ã¨ãã¦ã®ã·ãã¥ã¬ã¼ã¿ã¼</h2>
<p>åè¿°ã®ã¨ãããéããããã¹ãã ãã§ã¯å®ä¸çã®ã¯ã©ã¹ã¿ã¼ã§èµ·ããå¾ããã¹ã¦ã®ã·ããªãªãäºæ¸¬ãããã¨ã¯ä¸å¯è½ã§ãã
ã¦ã¼ã¶ã¼ã¯ã¹ã±ã¸ã¥ã¼ã©ã¼ãæ¬çªç°å¢ã«ãããã¤ããåã«ãå°è¦æ¨¡ãªéçºã¯ã©ã¹ã¿ã¼ã§ãã¹ãããåé¡ãçºçããªããã¨ãé¡ããã¨ããã§ãã¾ããã</p>
<p>ããã§ã<a href="https://github.com/kubernetes-sigs/kube-scheduler-simulator/blob/master/simulator/docs/import-cluster-resources.md">ã·ãã¥ã¬ã¼ã¿ã¼ã®ã¤ã³ãã¼ãæ©è½</a>ã使ããã¨ã§ãæ¬çªç°å¢ã«è¿ãç°å¢ã§ã稼åä¸ã®ã¯ã¼ã¯ãã¼ãã«å½±é¿ãä¸ãããã¨ãªãã¹ã±ã¸ã¥ã¼ã©ã¼ã®ã·ãã¥ã¬ã¼ã·ã§ã³ããããã¨ãã§ãã¾ãã</p>
<p>æ¬çªã¯ã©ã¹ã¿ã¼ã¨ã·ãã¥ã¬ã¼ã¿ã¼ã®éã§ç¶ç¶çã«åæãè¡ããã¨ã§ãã¦ã¼ã¶ã¼ã¯æ¬çªã¯ã©ã¹ã¿ã¼ã対å¿ãããªã½ã¼ã¹ã¨åããªã½ã¼ã¹ãç¨ãã¦ãæ°ãããã¼ã¸ã§ã³ã®ã¹ã±ã¸ã¥ã¼ã©ã¼ãå®å
¨ã«ãã¹ããããã¨ãã§ãã¾ãã
ãã®åä½ã«ç¢ºä¿¡ãæã¦ã段éã§æ¬çªç°å¢ã¸ã®ãããã¤ã«é²ããã¨ãã§ããäºæããªãåé¡ã®ãªã¹ã¯ã使¸ã§ãã¾ãã</p>
<h2 id="ã¦ã¼ã¹ã±ã¼ã¹ã¯">ã¦ã¼ã¹ã±ã¼ã¹ã¯ï¼</h2>
<ol>
<li><strong>ã¯ã©ã¹ã¿ã¼ã¦ã¼ã¶ã¼</strong>: ã¹ã±ã¸ã¥ã¼ãªã³ã°å¶ç´(ãã¨ãã°ãPodAffinityãPodTopologySpreadãªã©)ãæå³ããéãã«æ©è½ãã¦ããããæ¤è¨¼ããã</li>
<li><strong>ã¯ã©ã¹ã¿ã¼ç®¡çè
</strong>: ã¹ã±ã¸ã¥ã¼ã©ã¼ã®è¨å®ã夿´ããå ´åã«ãã¯ã©ã¹ã¿ã¼ãã©ã®ããã«åä½ããããè©ä¾¡ããã</li>
<li><strong>ã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³éçºè
</strong>: ã«ã¹ã¿ã ã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³ãã¹ã±ã¸ã¥ã¼ã©ã¼æ¡å¼µããã¹ããããDebuggable Schedulerãçµ±åãã¹ããéçºã¯ã©ã¹ã¿ã¼ã§ä½¿ç¨ããããæ¬çªç°å¢ã«è¿ãç°å¢ã§ã®ãã¹ãã®ããã«<a href="https://github.com/kubernetes-sigs/kube-scheduler-simulator/blob/simulator/v0.3.0/simulator/docs/import-cluster-resources.md">åæ</a>æ©è½ãæ´»ç¨ãããããã</li>
</ol>
<h2 id="å©ç¨éå§ã®æé ">å©ç¨éå§ã®æé </h2>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ã使ç¨ããã«ã¯ããã·ã³ã«Dockerãã¤ã³ã¹ãã¼ã«ããã¦ããã°ååã§ãKubernetesã¯ã©ã¹ã¿ã¼ã¯å¿
è¦ããã¾ããã</p>
<pre tabindex="0"><code>git clone [email protected]:kubernetes-sigs/kube-scheduler-simulator.git
cd kube-scheduler-simulator
make docker_up
</code></pre><p><code>http://localhost:3000</code>ã§ã·ãã¥ã¬ã¼ã¿ã¼ã®web UIã«ã¢ã¯ã»ã¹ã§ãã¾ãã</p>
<p>詳ããã¯ã<a href="https://github.com/kubernetes/community/blob/master/sig-scheduling/README.md#kube-scheduler-simulator">kube-scheduler-simulatorã®ãªãã¸ããª</a>ãã覧ãã ããï¼</p>
<h2 id="è²¢ç®ããã«ã¯">è²¢ç®ããã«ã¯</h2>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ã¯ã<a href="https://github.com/kubernetes/community/blob/master/sig-scheduling/README.md#kube-scheduler-simulator">Kubernetes SIG Scheduling</a>ã«ãã£ã¦éçºããã¦ãã¾ãã
ãã£ã¼ãããã¯ãã³ã³ããªãã¥ã¼ã·ã§ã³ã¯å¤§æè¿ã§ãï¼</p>
<p>åé¡ã®å ±åããã«ãªã¯ã¨ã¹ãã¯ã<a href="https://sigs.k8s.io/kube-scheduler-simulator">kube-scheduler-simulatorã®ãªãã¸ããª</a>ã§è¡ã£ã¦ãã ããã
ã¾ããSlackã®<a href="https://kubernetes.slack.com/messages/sig-scheduling">#sig-scheduling</a>ãã£ã³ãã«ã«ããã²ãåå ãã ããã</p>
<h2 id="è¬è¾">è¬è¾</h2>
<p>ãã®ã·ãã¥ã¬ã¼ã¿ã¼ã®ããã¸ã§ã¯ãã¯ãç±æãããã©ã³ãã£ã¢ã®ã¨ã³ã¸ãã¢ãã¡ã«ãã£ã¦ã¡ã³ããã³ã¹ãããå¤ãã®èª²é¡ãä¹ãè¶ãã¦ç¾å¨ã®å½¢ã«è³ãã¾ããã</p>
<p><a href="https://github.com/kubernetes-sigs/kube-scheduler-simulator/graphs/contributors">ç´ æ´ãããã³ã³ããªãã¥ã¼ã¿ã¼ã®çãã</a>ã«å¿ããæè¬ãããã¾ãï¼</p>
- Kubernetes v1.33ã®å
è¡ç´¹ä»https://kubernetes.io/ja/blog/2025/03/26/kubernetes-v1-33-upcoming-changes/Wed, 26 Mar 2025 10:30:00 -0800https://kubernetes.io/ja/blog/2025/03/26/kubernetes-v1-33-upcoming-changes/
<p>Kubernetes v1.33ã®ãªãªã¼ã¹ãè¿ã¥ãä¸ã§ãKubernetesããã¸ã§ã¯ãã¯é²åãç¶ãã¦ãã¾ãã
ããã¸ã§ã¯ãå
¨ä½ã®å¥å
¨æ§ãé«ããããã«ãä¸é¨ã®æ©è½ã鿍奍ã¨ãªã£ãããåé¤ã¾ãã¯ç½®ãæãããããããå¯è½æ§ãããã¾ãã
æ¬ããã°è¨äºã§ã¯ãv1.33ãªãªã¼ã¹ã«åãã¦è¨ç»ããã¦ãã夿´ã®ä¸é¨ãç´¹ä»ãã¾ãã
ãããã¯ãKubernetesç°å¢ãå®å®ãã¦éç¨ããææ°ã®éçºååãææ¡ãç¶ããããã«ããªãªã¼ã¹ãã¼ã ãç¹ã«ç¥ã£ã¦ããã¹ãã§ããã¨èãã¦ããæ
å ±ã§ãã
以ä¸ã®æ
å ±ã¯ãv1.33ãªãªã¼ã¹ã®ç¾æç¹ã®ç¶æ³ã«åºã¥ãã¦ãããæ£å¼ãªãªã¼ã¹ã¾ã§ã«å¤æ´ãããå¯è½æ§ãããã¾ãã</p>
<h2 id="kubernetes-apiã®åé¤ããã³éæ¨å¥¨ããã»ã¹">Kubernetes APIã®åé¤ããã³éæ¨å¥¨ããã»ã¹</h2>
<p>Kubernetesããã¸ã§ã¯ãã§ã¯ãæ©è½ã®<a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">鿍奍ããªã·ã¼</a>ãæç¢ºã«ææ¸åããã¦ãã¾ãã
ãã®ããªã·ã¼ã§ã¯ãå®å®çã®APIã鿍奍ã¨ããã«ã¯åãAPIã®æ°ããªå®å®çãåå¨ãã¦ãããã¨ãæ¡ä»¶ã¨ããã¦ãã¾ãã
ã¾ããAPIã®å®å®æ§ã¬ãã«ãã¨ã«æä½éã®ãµãã¼ãæéãå®ãããã¦ãã¾ãã
鿍奍ã¨ãªã£ãAPIã¯ãå°æ¥ã®Kubernetesãªãªã¼ã¹ã§åé¤ãããäºå®ã§ãããã¨ã示ãã¦ãã¾ãã
åé¤ã¾ã§ã¯å¼ãç¶ãåä½ãã¾ãã(鿍奍ããå°ãªãã¨ã1å¹´éã¯å©ç¨å¯è½ã§ã)ãå©ç¨æã«ã¯è¦åã¡ãã»ã¼ã¸ã表示ããã¾ãã
åé¤ãããAPIã¯ç¾å¨ã®ãã¼ã¸ã§ã³ã§ã¯å©ç¨ã§ããªããªãããã®æç¹ã§ä»£æ¿ææ®µã¸ã®ç§»è¡ãå¿
é ã¨ãªãã¾ãã</p>
<ul>
<li>
<p>ä¸è¬å
¬éç(GA)ã¾ãã¯å®å®çã®APIãã¼ã¸ã§ã³ã鿍奍ã¨ãªãå¯è½æ§ã¯ããã¾ãããKubernetesã®åä¸ã®ã¡ã¸ã£ã¼ãã¼ã¸ã§ã³å
ã§åé¤ããã¦ã¯ãªãã¾ããã</p>
</li>
<li>
<p>ãã¼ã¿çããã¬ãªãªã¼ã¹ã®APIãã¼ã¸ã§ã³ã¯ã鿍奍ã¨ãªã£ã¦ãã3ã¤ã®ãªãªã¼ã¹åã¯ãµãã¼ããããªããã°ãªãã¾ããã</p>
</li>
<li>
<p>ã¢ã«ãã¡çã¾ãã¯å®é¨çãªAPIãã¼ã¸ã§ã³ã¯ãäºåã®éæ¨å¥¨éç¥ãªãã«ä»»æã®ãªãªã¼ã¹ã§åé¤ãããå¯è½æ§ãããã¾ãããã§ã«åä¸ã®æ©è½ã«å¯¾ãã¦å¥ã®å®è£
ãåå¨ããå ´åããã®ããã»ã¹ã¯ãæ¤åãã¨è¦ãªããããã¨ãããã¾ãã</p>
</li>
</ul>
<p>æ©è½ããã¼ã¿çããå®å®çã¸ææ ¼ããçµæã¨ãã¦APIãåé¤ãããå ´åã§ããåã«ãã®APIãå®çããªãã£ãå ´åã§ãããã¹ã¦ã®åé¤ã¯ãã®éæ¨å¥¨ããªã·ã¼ã«æºæ ãã¦å®æ½ããã¾ãã
APIãåé¤ãããéã«ã¯ãç§»è¡ææ®µã<a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/">鿍奍ã¬ã¤ã</a>å
ã§æ¡å
ããã¾ãã</p>
<h2 id="kubernetes-v1-33ã«ããã鿍奍ã¨åé¤">Kubernetes v1.33ã«ããã鿍奍ã¨åé¤</h2>
<h3 id="å®å®çendpoints-apiã®éæ¨å¥¨å">å®å®çEndpoints APIã®éæ¨å¥¨å</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/services-networking/endpoint-slices/">EndpointSlices</a> APIã¯v1.21ããå®å®çã¨ãªã£ã¦ãããå®è³ªçã«å¾æ¥ã®Endpoints APIãç½®ãæããåå¨ã¨ãªã£ã¦ãã¾ãã
å
ã®Endpoints APIã¯ã·ã³ãã«ã§åãããããè¨è¨ã§ããããå¤§è¦æ¨¡ãªãããã¯ã¼ã¯ã¨ã³ããã¤ã³ãã«ã¹ã±ã¼ã«ããéã«èª²é¡ãããã¾ããã
EndpointSlices APIã¯ãã¥ã¢ã«ã¹ã¿ãã¯ãããã¯ã¼ã¯å¯¾å¿ãªã©ã®æ°æ©è½ãå°å
¥ãã¦ãããããã«ãã徿¥ã®Endpoints APIã¯éæ¨å¥¨ã¨ããæºåãæ´ãã¾ããã</p>
<p>ä»åã®éæ¨å¥¨ã¯ãã¯ã¼ã¯ãã¼ããã¹ã¯ãªããããEndpoints APIãç´æ¥ä½¿ç¨ãã¦ããã¦ã¼ã¶ã¼ã®ã¿ã«å½±é¿ãã¾ãã
ãããã®ã¦ã¼ã¶ã¼ã¯ã代ããã«EndpointSliceã®ä½¿ç¨ã¸ç§»è¡ããå¿
è¦ãããã¾ãã
鿍奍ã«ããå½±é¿ã¨ç§»è¡è¨ç»ã®è©³ç´°ã«ã¤ãã¦ã¯ãä»å¾æ°é±é以å
ã«å°ç¨ã®ããã°è¨äºãå
¬éãããäºå®ã§ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/4974">KEP-4974: Deprecate v1.Endpoints</a>ãã覧ãã ããã</p>
<h3 id="ãã¼ãã¹ãã¼ã¿ã¹ããã®kube-proxyãã¼ã¸ã§ã³æ
å ±ã®åé¤">ãã¼ãã¹ãã¼ã¿ã¹ããã®kube-proxyãã¼ã¸ã§ã³æ
å ±ã®åé¤</h3>
<p><a href="https://kubernetes.io/blog/2024/07/19/kubernetes-1-31-upcoming-changes/#deprecation-of-status-nodeinfo-kubeproxyversion-field-for-nodes-kep-4004-https-github-com-kubernetes-enhancements-issues-4004">ãªãªã¼ã¹ã¢ãã¦ã³ã¹</a>ã§ç¤ºãããã¨ãããv1.31ã§éæ¨å¥¨ã¨ãªã£ã<code>status.nodeInfo.kubeProxyVersion</code>ãã£ã¼ã«ãã¯ãv1.33ã§åé¤ããã¾ãã
ãã®ãã£ã¼ã«ãã¯kubeletã«ãã£ã¦è¨å®ããã¦ãã¾ãããããã®å¤ã¯ä¸è²«ãã¦æ£ç¢ºã¨ã¯éãã¾ããã§ããã
v1.31以éããã®ãã£ã¼ã«ãã¯ããã©ã«ãã§ç¡å¹åããã¦ãããããv1.33ã§ã¯å®å
¨ã«åé¤ããã¾ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/4004">KEP-4004: Deprecate status.nodeInfo.kubeProxyVersion field</a>ãã覧ãã ããã</p>
<h3 id="windows-podã«ããããã¹ããããã¯ã¼ã¯å¯¾å¿ã®åé¤">Windows Podã«ããããã¹ããããã¯ã¼ã¯å¯¾å¿ã®åé¤</h3>
<p>Windows Podã®ãããã¯ã¼ã¯æ©è½ã¯ãLinuxã¨åçã®æ©è½ãæä¾ããã³ã³ããããã¼ãã®ãããã¯ã¼ã¯åå空éã使ç¨ã§ããããã«ãããã¨ã§ãã¯ã©ã¹ã¿ã¼å¯åº¦ã®åä¸ãç®æãã¦ãã¾ããã
ãã®æ©è½ã®åæå®è£
ã¯v1.26ã§ã¢ã«ãã¡çã¨ãã¦å°å
¥ããã¾ããããcontainerdã«é¢ããäºæãã¬æåã確èªãããã¾ãä»£æ¿ææ®µãåå¨ãã¦ãããã¨ãããKubernetesããã¸ã§ã¯ãã¯é¢é£ããKEPã®æ¤åãæ±ºå®ãã¾ããã
v1.33ã«ããã¦ããã®æ©è½ã®ãµãã¼ãã¯å®å
¨ã«åé¤ãããè¦è¾¼ã¿ã§ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/3503">KEP-3503: Host network support for Windows pods</a>ãã覧ãã ããã</p>
<h2 id="kubernetes-v1-33ã®æ³¨ç®ãã¹ã夿´ç¹">Kubernetes v1.33ã®æ³¨ç®ãã¹ã夿´ç¹</h2>
<p>æ¬è¨äºã®å·çè
ã¨ãã¦ãç§ãã¡ã¯ç¹ã«æ³¨ç®ãã¹ãéè¦ãªæ¹åç¹ã1ã¤é¸ã³ã¾ããï¼</p>
<h3 id="linux-podã«ãããã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã">Linux Podã«ãããã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã</h3>
<p>ç¾å¨ããªã¼ãã³ãªKEPã®ä¸ã§æãå¤ããã®ã®ä¸ã¤ãã<a href="https://kep.k8s.io/127">KEP-127</a>ãPodã«å¯¾ãã¦Linux<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/user-namespaces/">ã¦ã¼ã¶ã¼åå空é</a>ã使ç¨ãããã¨ã«ããã»ãã¥ãªãã£ã®æ¹åãã§ãããã®KEPã¯2016å¹´å¾åã«åãã¦ææ¡ãããè¤æ°åã®æ¹è¨ãçµã¦v1.25ã§ã¢ã«ãã¡çã¨ãã¦ç»å ´ããv1.30ã§åãã¦ãã¼ã¿çãæä¾ããã¾ãã(ãã®æç¹ã§ã¯ããã©ã«ãã§ç¡å¹)ãããã¦v1.33ã§ã¯ããã®æ©è½ãããã©ã«ãã§æå¹ãªç¶æ
ã§æä¾ãããäºå®ã§ãã</p>
<p>ãã®æ©è½ã¯ãæç¤ºçã«<code>pod.spec.hostUsers</code>ãæå®ãã¦æå¹åããªãéããæ¢åã®Podã«ã¯å½±é¿ãã¾ããã
<a href="https://kubernetes.io/ja/blog/2024/03/12/kubernetes-1-30-upcoming-changes/">Kubernetes v1.30ããã£ã¨è¦ã</a>ã§ã触ãããã¦ããããã«ããã®æ©è½ã¯èå¼±æ§ã®è»½æ¸ã«åããéè¦ãªãã¤ã«ã¹ãã¼ã³ã¨ãªãã¾ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/127">KEP-127: Support User Namespaces in pods</a>ãã覧ãã ããã</p>
<h2 id="ãã®ä»ã®æ³¨ç®ãã¹ãkubernetes-v1-33ã®æ¹åç¹">ãã®ä»ã®æ³¨ç®ãã¹ãKubernetes v1.33ã®æ¹åç¹</h2>
<p>以ä¸ã«æããæ¹åé
ç®ã¯ãä»å¾ãªãªã¼ã¹äºå®ã®v1.33ã«å«ã¾ããè¦è¾¼ã¿ã®ãã®ã§ãã
ãã ãããããã¯ç¢ºå®äºé
ã§ã¯ãªãããªãªã¼ã¹å
容ã¯å¤æ´ãããå¯è½æ§ãããã¾ãã</p>
<h3 id="podã®åç´ã¹ã±ã¼ãªã³ã°ã«å¯¾å¿ãããªã½ã¼ã¹ã®åçãªãµã¤ãº">Podã®åç´ã¹ã±ã¼ãªã³ã°ã«å¯¾å¿ãããªã½ã¼ã¹ã®åçãªãµã¤ãº</h3>
<p>Podããããã¸ã§ãã³ã°ããéã«ã¯ãDeploymentãStatefulSetãªã©ããã¾ãã¾ãªãªã½ã¼ã¹ãå©ç¨ã§ãã¾ãã
ã¹ã±ã¼ã©ããªãã£ã®è¦ä»¶ã«ãã£ã¦ã¯ãPodã®ã¬ããªã«æ°ãæ´æ°ããæ°´å¹³ã¹ã±ã¼ãªã³ã°ããããã¯Podå
ã®ã³ã³ããã«å²ãå½ã¦ããªã½ã¼ã¹ãæ´æ°ããåç´ã¹ã±ã¼ãªã³ã°ãå¿
è¦ã«ãªãå ´åãããã¾ãã
ãã®æ¹åãå°å
¥ããã以åã¯ãPodã®<code>spec</code>ã«å®ç¾©ãããã³ã³ãããªã½ã¼ã¹ã¯å¤æ´ã§ãããPodãã³ãã¬ã¼ãå
ã®ãªã½ã¼ã¹ãæ´æ°ããã¨Podã®ç½®ãæããçºçãã¦ãã¾ããã</p>
<p>ããããæ¢åã®Podãåèµ·åããã«ãåçã«ãªã½ã¼ã¹è¨å®ãæ´æ°ã§ãããã©ãã§ããããï¼</p>
<p><a href="https://kep.k8s.io/1287">KEP-1287</a>ã¯ãã¾ãã«ãã®ãããªPodã®ã¤ã³ãã¬ã¼ã¹æ´æ°ãå¯è½ã«ããããã®ãã®ã§ãã
ããã«ãããã¹ãã¼ããã«ãªããã»ã¹ã«å¯¾ãã¦ãã¦ã³ã¿ã¤ã ãªãã§ã®åç´ã¹ã±ã¼ã«ã¢ãããããã©ãã£ãã¯ãå°ãªãã¨ãã®ã·ã¼ã ã¬ã¹ãªã¹ã±ã¼ã«ãã¦ã³ãããã«ã¯èµ·åæã«ä¸æçã«å¤§ããªãªã½ã¼ã¹ãå²ãå½ã¦ãåæå¦çãå®äºããå¾ã«ããã縮å°ããã¨ãã£ããã¨ãå¯è½ã«ãªãã¾ãã
ãã®æ©è½ã¯v1.27ã§ã¢ã«ãã¡çã¨ãã¦ãªãªã¼ã¹ããã¦ãããv1.33ã§ã¯ãã¼ã¿çã¨ãã¦æä¾ãããäºå®ã§ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/1287">KEP-1287: In-Place Update of Pod Resources</a>ãã覧ãã ããã</p>
<h3 id="draã®resourceclaimã«ãããããã¤ã¹ã¹ãã¼ã¿ã¹ããã¼ã¿ã«ææ ¼">DRAã®ResourceClaimã«ãããããã¤ã¹ã¹ãã¼ã¿ã¹ããã¼ã¿ã«ææ ¼</h3>
<p>ResourceClaimã®<code>status</code>å
ã«ãã<code>devices</code>ãã£ã¼ã«ãã¯ãv1.32ãªãªã¼ã¹ã§å°å
¥ãããæ©è½ã§ãããv1.33ã§ãã¼ã¿ã«ææ ¼ããè¦è¾¼ã¿ã§ãã
ãã®ãã£ã¼ã«ãã¯ããã©ã¤ãã¼ãããã¤ã¹ã®ç¶æ
æ
å ±ãå ±åã§ããããã«ãããã®ã§ãå¯è¦³æ¸¬æ§ã¨ãã©ãã«ã·ã¥ã¼ãã£ã³ã°è½åã®åä¸ã«è²¢ç®ãã¾ãã</p>
<p>ä¾ãã°ãResourceClaimã®ã¹ãã¼ã¿ã¹ã«ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ååãMACã¢ãã¬ã¹ãIPã¢ãã¬ã¹ãå ±åãããã¨ã¯ããããã¯ã¼ã¯ãµã¼ãã¹ã®è¨å®ã管çããªãã³ã«ãããã¯ã¼ã¯é¢é£ã®åé¡ã®ãããã°ã«å¤§ãã«å½¹ç«ã¡ã¾ãããã®æ©è½ã®è©³ç´°ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#resourceclaim-device-status">åçãªã½ã¼ã¹å²ãå½ã¦</a>ã®ããã¥ã¡ã³ããã覧ãã ããã</p>
<p>ã¾ããè¨ç»ä¸ã®æ¡å¼µã«ã¤ãã¦ã¯<a href="https://kep.k8s.io/4817">KEP-4817: DRA: Resource Claim Status with possible standardized network interface data</a>ã«è¨è¼ããã¦ãã¾ãã</p>
<h3 id="åå空éã®é åºä»ãåé¤">åå空éã®é åºä»ãåé¤</h3>
<p>ãã®KEPã¯ãKubernetesã®åå空éã«å¯¾ãã¦ãããæ§é åãããåé¤ããã»ã¹ãå°å
¥ãããã¨ã§ããªã½ã¼ã¹ã®å®å
¨ãã¤æ±ºå®è«çãªåé¤ãå®ç¾ãããã¨ãç®çã¨ãã¦ãã¾ãã
ç¾å¨ã®åé¤å¦çã¯ã»ã¼ã©ã³ãã ãªé åºã§è¡ãããããããã¨ãã°NetworkPolicyãå
ã«åé¤ããã¦Podãæ®ãã¨ãã£ããã»ãã¥ãªãã£ä¸ã®åé¡ãæå³ããªãåä½ãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
è«ççããã³ã»ãã¥ãªãã£ä¸ã®ä¾åé¢ä¿ãèæ
®ããæ§é åãããåé¤é åºãå¼·å¶ãããã¨ã§ããã®ã¢ããã¼ãã¯Podãä»ã®ãªã½ã¼ã¹ããå
ã«åé¤ããããã¨ãä¿è¨¼ãã¾ãã
ãã®è¨è¨ã¯ãéæ±ºå®çãªåé¤ã«é¢é£ãããªã¹ã¯ã軽æ¸ãããã¨ã§ãKubernetesã®ã»ãã¥ãªãã£ã¨ä¿¡é ¼æ§ãåä¸ããã¾ãã</p>
<p>詳細ã¯<a href="https://kep.k8s.io/5080">KEP-5080: Ordered namespace deletion</a>ãã覧ãã ããã</p>
<h3 id="indexed-job管çã®å¼·å">Indexed Job管çã®å¼·å</h3>
<p>ããã2ã¤ã®KEPã¯ãã¸ã§ãã®å¦çãç¹ã«Indexed Jobã®ä¿¡é ¼æ§ãåä¸ãããããã«GAã«ææ ¼ããäºå®ã§ãã
<a href="https://kep.k8s.io/3850">KEP-3850</a>ã§ã¯ãIndexed Jobã«å¯¾ãã¦ã¤ã³ããã¯ã¹ãã¨ã®ããã¯ãªãå¶éãæä¾ãã¦ãããåã¤ã³ããã¯ã¹ãä»ã®ã¤ã³ããã¯ã¹ã¨å®å
¨ã«ç¬ç«ãã¦åä½ã§ããããã«ãªãã¾ãã
ã¾ãã<a href="https://kep.k8s.io/3998">KEP-3998</a>ã¯Job APIãæ¡å¼µãããã¹ã¦ã®ã¤ã³ããã¯ã¹ãæåãã¦ããªãå ´åã§ãIndexed Jobãæåã¨è¦ãªãããã®æ¡ä»¶ãå®ç¾©ã§ããããã«ãã¾ãã</p>
<p>詳細ã¯ã<a href="https://kep.k8s.io/3850">KEP-3850: Backoff Limit Per Index For Indexed Jobs</a>ããã³<a href="https://kep.k8s.io/3998">KEP-3998: Job success/completion policy</a>ãã覧ãã ããã</p>
<h2 id="ããã«è©³ããç¥ãããæ¹ã¸">ããã«è©³ããç¥ãããæ¹ã¸</h2>
<p>æ°æ©è½ã鿍奍ã®é
ç®ã«ã¤ãã¦ã¯ãKubernetesã®ãªãªã¼ã¹ãã¼ãã§ãã¢ãã¦ã³ã¹ããã¦ãã¾ãã
<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.33.md">Kubernetes v1.33</a>ã®æ°æ©è½ã«ã¤ãã¦ã¯ã該å½ãªãªã¼ã¹ã®CHANGELOGã«ã¦æ£å¼ã«çºè¡¨ãããäºå®ã§ãã</p>
<p>Kubernetes v1.33ã®ãªãªã¼ã¹ã¯ <strong>2025å¹´4æ23æ¥(æ°´)</strong> ãäºå®ãã¦ãã¾ãã
ä»å¾ã®æ´æ°æ
å ±ã«ããã²ã注ç®ãã ããï¼</p>
<p>以ä¸ã®ãªãªã¼ã¹ãã¼ãã§ããåãã¼ã¸ã§ã³ã«ããã夿´ç¹ã®ã¢ãã¦ã³ã¹ã確èªã§ãã¾ãã</p>
<ul>
<li>
<p><a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md">Kubernetes v1.32</a></p>
</li>
<li>
<p><a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.31.md">Kubernetes v1.31</a></p>
</li>
<li>
<p><a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.30.md">Kubernetes v1.30</a></p>
</li>
</ul>
<h2 id="ã³ãã¥ããã£ã¸ã®åå æ¹æ³">ã³ãã¥ããã£ã¸ã®åå æ¹æ³</h2>
<p>Kubernetesã«é¢ããããã®æãç°¡åãªæ¹æ³ã¯ãé¢å¿ã®ããåéã«é¢é£ãã<a href="https://github.com/kubernetes/community/blob/master/sig-list.md">Special Interest Groups</a>(SIGs)ã®ããããã«åå ãããã¨ã§ãã
Kubernetesã³ãã¥ããã£ã«åãã¦çºä¿¡ãããå
容ãããã¾ããï¼
ããããã°ãæ¯é±éå¬ããã¦ãã<a href="https://github.com/kubernetes/community/tree/master/communication">ã³ãã¥ããã£ãã¼ãã£ã³ã°</a>ããä¸è¨ã®å種ãã£ãã«ãéãã¦ããã²å£°ãå±ãã¦ãã ããã
çãã¾ããã®ç¶ç¶çãªãæè¦ã¨ãæ¯æ´ã«ãå¿ããæè¬ç³ãä¸ãã¾ãã</p>
<ul>
<li>ææ°æ
å ±ã¯Blueskyã®<a href="https://bsky.app/profile/kubernetes.io">@kubernetes.io</a>ã§ã確èªãã ãã</li>
<li><a href="https://discuss.kubernetes.io/">Discuss</a>ã§ã³ãã¥ããã£ã®ãã£ã¹ã«ãã·ã§ã³ã«åå ãã¾ããã</li>
<li><a href="http://slack.k8s.io/">Slack</a>ã®ã³ãã¥ããã£ã«åå ãã¾ããã</li>
<li><a href="https://serverfault.com/questions/tagged/kubernetes">Server Fault</a>ã<a href="http://stackoverflow.com/questions/tagged/kubernetes">Stack Overflow</a>ã«è³ªåãæç¨¿ããããä»ã®è³ªåã«åçããããã¾ããã</li>
<li>ããªãã®Kubernetes<a href="https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform">ã¹ãã¼ãªã¼</a>ãå
±æãã¾ããã</li>
<li>Kubernetesã«é¢ããææ°æ
å ±ã¯<a href="https://kubernetes.io/blog/">ããã°</a>ãã覧ãã ãã</li>
<li><a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Kubernetesãªãªã¼ã¹ãã¼ã </a>ã«ã¤ãã¦å¦ã³ã¾ããã</li>
</ul>
- Ingress-nginxã®èå¼±æ§CVE-2025-1974: ç¥ã£ã¦ããã¹ããã¨https://kubernetes.io/ja/blog/2025/03/24/ingress-nginx-cve-2025-1974/Mon, 24 Mar 2025 12:00:00 -0800https://kubernetes.io/ja/blog/2025/03/24/ingress-nginx-cve-2025-1974/
<p>æ¬æ¥ãingress-nginxã®ã¡ã³ããã¼ã¯ãæ»æè
ãKubernetesã¯ã©ã¹ã¿ã¼ãä¹ã£åããã¨ã容æã«ããå¯è½æ§ã®ãããä¸é£ã®é大ãªèå¼±æ§ã«å¯¾ãããããããªãªã¼ã¹ãã¾ãã: <a href="https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.12.1">ingress-nginx v1.12.1</a>ããã³<a href="https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.11.5">ingress-nginx v1.11.5</a>ã
<a href="https://github.com/kubernetes/ingress-nginx/">ingress-nginx</a>ã¯ãKubernetes管çè
ã®40%è¶
ãå©ç¨ãã¦ãã¾ãã
ããããªããããã«è©²å½ããå ´åã¯ãã¦ã¼ã¶ã¼ã¨ãã¼ã¿ãä¿è·ããããã«ç´ã¡ã«å¯¾å¿ãè¡ã£ã¦ãã ããã</p>
<h2 id="èæ¯">èæ¯</h2>
<p><a href="https://kubernetes.io/ja/docs/concepts/services-networking/ingress/">Ingress</a>ã¯ãã¯ã¼ã¯ãã¼ãPodãå¤é¨ã«å
¬éãã¦æ´»ç¨ã§ããããã«ãããKubernetesã«ããã徿¥ã®æ©è½ã§ãã
å®è£
ã«ä¾åããªãæ¹æ³ã§ãKubernetesã¦ã¼ã¶ã¼ã¯ã¢ããªã±ã¼ã·ã§ã³ããããã¯ã¼ã¯ä¸ã«ã©ã®ããã«å
¬éããããå®ç¾©ã§ãã¾ãã
次ã«ã<a href="https://kubernetes.io/ja/docs/concepts/services-networking/ingress-controllers/">Ingressã³ã³ããã¼ã©ã¼</a>ããã®å®ç¾©ã«å¾ããã¦ã¼ã¶ã¼ã®ç¶æ³ããã¼ãºã«å¿ãã¦ãã¼ã«ã«ã¾ãã¯ã¯ã©ã¦ãã®ãªã½ã¼ã¹ãæ§æãã¾ãã</p>
<p>ãã¾ãã¾ãªã¯ã©ã¦ããããã¤ãã¼ããã¼ããã©ã³ãµã¼è£½åã«å¯¾å¿ããããã«ãå¤ãã®Ingressã³ã³ããã¼ã©ã¼ãå©ç¨å¯è½ã§ãã
Ingress-nginxã¯ãKubernetesããã¸ã§ã¯ããæä¾ããã½ããã¦ã§ã¢ãã¼ã¹ã®Ingressã³ã³ããã¼ã©ã¼ã§ãã
ãã®æè»æ§ã¨ä½¿ãããããããingress-nginxã¯é常ã«äººæ°ããããKubernetesã¯ã©ã¹ã¿ã¼ã®40%è¶
ã§å°å
¥ããã¦ãã¾ãï¼</p>
<p>Ingress-nginxã¯ãIngressãªãã¸ã§ã¯ãã®è¦ä»¶ããå¼·åãªãªã¼ãã³ã½ã¼ã¹ã®Webãµã¼ãã¼ãã¼ã¢ã³ã§ããnginxã®è¨å®ã«å¤æãã¾ãã
ãã®å¾ãnginxã¯ãã®è¨å®ãç¨ãã¦ãKubernetesã¯ã©ã¹ã¿ã¼å
ã§ç¨¼åãã¦ãããã¾ãã¾ãªã¢ããªã±ã¼ã·ã§ã³ã¸ã®ãªã¯ã¨ã¹ããåãä»ããã«ã¼ãã£ã³ã°ãã¾ãã
ãããã®nginxè¨å®ãã©ã¡ã¼ã¿ã¼ãé©åã«åãæ±ããã¨ã¯æ¥µãã¦éè¦ã§ãã
ãªããªããingress-nginxã¯ã¦ã¼ã¶ã¼ã«å¯¾ãã¦é«ãæè»æ§ãæä¾ããå¿
è¦ããã䏿¹ã§ãnginxã«å¯¾ãã¦ä¸é©åãªåä½ãæå³çã¾ãã¯é失ã«ããèªçºãããªãããã«ããªããã°ãªããªãããã§ãã</p>
<h2 id="æ¬æ¥ä¿®æ£ãããèå¼±æ§">æ¬æ¥ä¿®æ£ãããèå¼±æ§</h2>
<p>æ¬æ¥ä¿®æ£ãããingress-nginxã®èå¼±æ§ã®ãã¡4ä»¶ã¯ãç¹å®ã®nginxè¨å®ã®åãæ±ãã«é¢ããæ¹åã§ãã
ãããã®ä¿®æ£ããªãå ´åãç¹å¥ã«ç´°å·¥ãããIngressãªãã¸ã§ã¯ãã«ãã£ã¦nginxã䏿£ãªåä½ãå¼ãèµ·ããå¯è½æ§ãããããã¨ãã°ãingress-nginxã«ã¨ã£ã¦ã¢ã¯ã»ã¹å¯è½ãª<a href="https://kubernetes.io/ja/docs/concepts/configuration/secret/">Secret</a>ã®å¤ãæ¼æ´©ãããªã©ã®äºæ
ãçºçãã¾ãã
ããã©ã«ãã§ã¯ãingress-nginxã¯ã¯ã©ã¹ã¿ã¼å
¨ä½ã®Secretã«ã¢ã¯ã»ã¹ã§ãããããIngressã使ããæ¨©éãæã¤ã¦ã¼ã¶ã¼ãã¨ã³ãã£ãã£ãã¯ã©ã¹ã¿ã¼å
¨ä½ãä¹ã£åãäºæ
ã«ã¤ãªããããããããã¾ãã</p>
<p>æ¬æ¥å
¬éãããèå¼±æ§ã®ãã¡æãæ·±å»ãªãã®ã¯ã<a href="https://github.com/kubernetes/kubernetes/issues/131009">CVE-2025-1974</a>ã§ãã
ãã®èå¼±æ§ã¯<a href="https://www.first.org/cvss/calculator/3-1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H">9.8 CVSS</a>ã¨è©ä¾¡ããã¦ãããingress-nginxã®Validating Admission Controlleræ©è½ãéãã¦ãPodãããã¯ã¼ã¯ä¸ã®ä»»æã®ã¨ã³ãã£ãã£ãè¨å®ã¤ã³ã¸ã§ã¯ã·ã§ã³ã®èå¼±æ§ãæªç¨ã§ããã¨ãããã®ã§ãã
ãã®ãããé常ã§ããã°ã¯ã©ã¹ã¿ã¼å
ã«Ingressãªãã¸ã§ã¯ãã使ãã(æ¯è¼çé«ã権éãå¿
è¦ãª)æä½ãåæã¨ãªãæ»æãã大å¹
ã«å®¹æãã¤å±éºãªãã®ã«ãªãã¾ãã
ããã«ãä»åã®ä»ã®èå¼±æ§ã¨çµã¿åããããã¨ã§ã<strong>CVE-2025-1974ã«ãããPodãããã¯ã¼ã¯ä¸ã«åå¨ããä»»æã®ãã®ããèªè¨¼æ
å ±ãç®¡çæ¨©éãªãã«Kubernetesã¯ã©ã¹ã¿ã¼ãä¹ã£åãå¯è½æ§ãé«ã¾ãã¾ãã</strong>
å¤ãã®ä¸è¬çãªã·ããªãªã§ã¯ãPodãããã¯ã¼ã¯ã¯ã¯ã©ã¦ãVPCå
ã®ãã¹ã¦ã®ã¯ã¼ã¯ãã¼ãããããã¯ä¼æ¥ãããã¯ã¼ã¯ã«æ¥ç¶ãã¦ãããã¹ã¦ã®ã¦ã¼ã¶ã¼ããã¢ã¯ã»ã¹å¯è½ã§ãï¼
ããã¯ãéå¸¸ã«æ·±å»ãªç¶æ³ã§ãã</p>
<p>æ¬æ¥ãããã5ä»¶ã®èå¼±æ§ãã¹ã¦ã«å¯¾ããä¿®æ£ãå«ã<a href="https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.12.1">ingress-nginx v1.12.1</a>ããã³<a href="https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.11.5">ingress-nginx v1.11.5</a>ããªãªã¼ã¹ãã¾ããã</p>
<h2 id="次ã®ã¹ããã">次ã®ã¹ããã</h2>
<p>ã¾ãã¯ãã¯ã©ã¹ã¿ã¼ã§ingress-nginxã使ç¨ããã¦ãããã©ããã確èªãã¦ãã ããã
å¤ãã®å ´åãã¯ã©ã¹ã¿ã¼ç®¡çè
権éãç¨ãã¦<code>kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx</code>ãå®è¡ãããã¨ã§ç¢ºèªã§ãã¾ãã</p>
<p><strong>ingress-nginxã使ç¨ãã¦ããå ´åã¯ãç´ã¡ã«ãããã®èå¼±æ§ã¸ã®å¯¾å¿ãè¨ç»ãã¦ãã ããã</strong></p>
<p><strong>æã广çãã¤ç°¡åãªå¯¾å¦æ¹æ³ã¯ã<a href="https://kubernetes.github.io/ingress-nginx/deploy/upgrade/">ingress-nginxã®æ°ããããããªãªã¼ã¹ã«ã¢ããã°ã¬ã¼ããããã¨</a></strong> ã§ãã
æ¬æ¥ãªãªã¼ã¹ãããããããé©ç¨ãããã¨ã§ã5ä»¶ãã¹ã¦ã®èå¼±æ§ãä¿®æ£ããã¾ãã</p>
<p>ããã«ã¢ããã°ã¬ã¼ãã§ããªãå ´åã¯ãingress-nginxã®Validating Admission Controlleræ©è½ãç¡å¹åãããã¨ã§ããªã¹ã¯ã大å¹
ã«è»½æ¸ãããã¨ãå¯è½ã§ãã</p>
<ul>
<li>
<p>ingress-nginxãHelmã§ã¤ã³ã¹ãã¼ã«ãã¦ããå ´å</p>
<ul>
<li>Helmã®è¨å®å¤<code>controller.admissionWebhooks.enabled=false</code>ãè¨å®ãã¦åã¤ã³ã¹ãã¼ã«ãã¦ãã ããã</li>
</ul>
</li>
<li>
<p>ingress-nginxãæåã§ã¤ã³ã¹ãã¼ã«ãã¦ããå ´å</p>
<ul>
<li><code>ingress-nginx-admission</code>ã¨ããååã®ValidatingWebhookConfigurationãåé¤ãã¦ãã ããã</li>
<li><code>ingress-nginx-controller</code>ã®Deploymentã¾ãã¯DaemonSetãç·¨éããcontrollerã³ã³ããã®å¼æ°ãã<code>--validating-webhook</code>ãåé¤ãã¦ãã ããã</li>
</ul>
</li>
</ul>
<p>CVE-2025-1974ã«å¯¾ããç·©åçã¨ãã¦Validating Admission Controlleræ©è½ãç¡å¹åããå ´åã¯ãã¢ããã°ã¬ã¼ãå¾ã«å¿
ãåã³æå¹åãããã¨ãå¿ããªãã§ãã ããã
ãã®æ©è½ã¯ã䏿£ãªIngressè¨å®ãé©ç¨ãããåã«è¦åãåºããã¨ã§ãã¦ã¼ã¶ã¼ä½é¨ãåä¸ãããéè¦ãªå½¹å²ãæ
ã£ã¦ãã¾ãã</p>
<h2 id="çµè«-è¬è¾-ããã³ãããªãæ
å ±">çµè«ãè¬è¾ãããã³ãããªãæ
å ±</h2>
<p>æ¬æ¥çºè¡¨ãããCVE-2025-1974ãå«ãingress-nginxã®èå¼±æ§ã¯ãå¤ãã®Kubernetesã¦ã¼ã¶ã¼ã¨ãã®ãã¼ã¿ã«å¯¾ãã¦é大ãªãªã¹ã¯ã¨ãªãã¾ãã
ingress-nginxãå©ç¨ãã¦ããå ´åã¯ãèªèº«ã®å®å
¨ãå®ãããã«ç´ã¡ã«å¯¾çãè¬ãã¦ãã ããã</p>
<p>ä»åã®èå¼±æ§ãé©åã«å ±åããKubernetesã»ãã¥ãªãã£å¯¾å¿ãã¼ã (SRC)ããã³ingress-nginxã¡ã³ããã¼(Marco Ebertæ°ãJames Strongæ°)ã¨é£æºãã¦å¹æçãªä¿®æ£ã«å°½åããã ããWizã®Nir Ohfeldæ°ãSagi Tzadikæ°ãRonen Shustinæ°ãHillai Ben-Sassonæ°ã«æè¬ãããã¾ãã</p>
<p>ingress-nginxã®ä»å¾ã®ä¿å®ããã³å°æ¥ã«é¢ãã詳細ã¯ããã®<a href="https://github.com/kubernetes/ingress-nginx/issues/13002">GitHub issue</a>ãã覧ããã ããã<a href="https://kccnceu2025.sched.com/event/1tcyc/">Jamesæ°ããã³Marcoæ°ã«ããKubeCon/CloudNativeCon EU 2025ã®è¬æ¼</a>ã«ãåå ãã ããã</p>
<p>æ¬è¨äºã§åãä¸ããåèå¼±æ§ã®è©³ç´°ã«ã¤ãã¦ã¯ã以ä¸ã®ç¶ãã¹ãGitHub Issueããåç
§ãã ãã:
<a href="https://github.com/kubernetes/kubernetes/issues/131005">CVE-2025-24513</a>ã<a href="https://github.com/kubernetes/kubernetes/issues/131006">CVE-2025-24514</a>ã<a href="https://github.com/kubernetes/kubernetes/issues/131007">CVE-2025-1097</a>ã<a href="https://github.com/kubernetes/kubernetes/issues/131008">CVE-2025-1098</a>ã<a href="https://github.com/kubernetes/kubernetes/issues/131009">CVE-2025-1974</a>ã</p>
<p><em>ãã®ããã°è¨äºã¯ããã¤ãã¼ãªã³ã¯ãæ´æ°ããããã«2025å¹´5æã«æ¹è¨ããã¾ããã</em></p>
- SIG Appsã®åãçµã¿ã®ç´¹ä»https://kubernetes.io/ja/blog/2025/03/12/sig-apps-spotlight-2025/Wed, 12 Mar 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/03/12/sig-apps-spotlight-2025/
<p>SIG Spotlightã·ãªã¼ãºã§ã¯ããã¾ãã¾ãªSpecial Interest Group(SIG)ã®ãªã¼ãã¼ã¸ã®ã¤ã³ã¿ãã¥ã¼ãéãã¦ãKubernetesããã¸ã§ã¯ãã®æ ¸å¿ã«è¿«ãã¾ãã
ä»åã¯ãKubernetesä¸ã«ãããã¢ããªã±ã¼ã·ã§ã³ã®éçºããããã¤ãéç¨ã«é¢é£ãããã¹ã¦ãæ
å½ããã°ã«ã¼ãã§ãã <strong><a href="https://github.com/kubernetes/community/tree/master/sig-apps#apps-special-interest-group">SIG Apps</a></strong> ãåãä¸ãã¾ãã
<a href="https://www.linkedin.com/in/sandipanpanda">Sandipan Panda</a>(<a href="https://www.devzero.io/">DevZero</a>)ã¯ãSIG Appsã®ãã§ã¢ããã³ããã¯ãªã¼ãã§ãã<a href="https://github.com/soltysh">Maciej
Szulik</a>(<a href="https://defenseunicorns.com/">Defense Unicorns</a>)ã¨<a href="https://github.com/janetkuo">Janet
Kuo</a>(<a href="https://about.google/">Google</a>)ã«ã¤ã³ã¿ãã¥ã¼ããæ©ä¼ãå¾ããã¨ãã§ãã¾ããã
å½¼ãã¯ãKubernetesã¨ã³ã·ã¹ãã ã«ãããã¢ããªã±ã¼ã·ã§ã³ç®¡çã®çµé¨ã課é¡ãããã¦å°æ¥ã®ãã¸ã§ã³ã«ã¤ãã¦å
±æãã¦ããã¾ããã</p>
<h2 id="ã¯ããã«">ã¯ããã«</h2>
<p><strong>Sandipan: ããã«ã¡ã¯ãã¾ãã¯ãèªèº«ã«ã¤ãã¦ãç¾å¨ã®å½¹å²ããSIG Appsã«ãããç¾å¨ã®å½¹è·ã«è³ãã¾ã§ã®Kubernetesã³ãã¥ããã£ã§ã®æ©ã¿ã«ã¤ãã¦æãã¦ããã ãã¾ããï¼</strong></p>
<p><strong>Maciej</strong>: ããã«ã¡ã¯ãSIG Appsã®ãªã¼ããåããMaciejã§ãããã®å½¹å²ã«å ãã¦ã<a href="https://github.com/kubernetes/community/tree/master/sig-cli#readme">SIG CLI</a>ã§ãæ´»åãã¦ãããSteering Committeeã¡ã³ãã¼ã®ã²ã¨ãã§ãããã¾ããç§ã¯2014å¹´å¾åãããã³ã³ããã¼ã©ã¼ãapiserverãkubectlãå«ããã¾ãã¾ãªé åã§Kubernetesã«è²¢ç®ãã¦ãã¾ããã</p>
<p><strong>Janet</strong>: ãã¡ããã§ãï¼ç§ã¯Janetã§ããGoogleã§ã¹ã¿ããã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ãåãã¦ãããKubernetesããã¸ã§ã¯ãã«ã¯åæã®æ®µéã2015å¹´ã®ãã¼ã¸ã§ã³1.0ã®ãªãªã¼ã¹ä»¥åããæ·±ãé¢ãã£ã¦ãã¾ãããããã¾ã§ã®éã®ãã¯æ¬å½ã«ç´ æ´ããããã®ã§ããï¼</p>
<p>Kubernetesã³ãã¥ããã£ã«ãããç§ã®ç¾å¨ã®å½¹å²ã¯ãSIG Appsã®ãã§ã¢å
¼ããã¯ãªã¼ãã®ä¸äººã§ããSIG Appsã¨ã®é¢ããã¯èªç¶ãªæµãã§å§ã¾ãã¾ããã
ç§ã¯ã¾ããDeployment APIã®æ§ç¯ããã¼ãªã³ã°ã¢ãããã¼ãæ©è½ã®è¿½å ã«åãçµã¿ã¾ããã
ãã®ä¸ã§èªç¶ã¨SIG Appsã«å¼ãå¯ããããæ¬¡ç¬¬ã«é¢ä¸ãæ·±ãã¦ããã¾ããã
æãçµã¤ã«ã¤ãã¦ãããå¤ãã®è²¬ä»»ãæ
ãããã«ãªããç¾å¨ã®ãªã¼ãã¼ã·ããã®å½¹å²ãåããã«è³ãã¾ããã</p>
<h2 id="sig-appsã«ã¤ãã¦">SIG Appsã«ã¤ãã¦</h2>
<p><em>以ä¸ã®åçã¯ãã¹ã¦Maciejã¨Janetã®å
±åã«ãããã®ã§ãã</em></p>
<p><strong>Sandipan: ãåããªãæ¹ã®ããã«ãSIG Appsã®ä½¿å½ã¨ç®çã«ã¤ãã¦æ¦è¦ãæãã¦ããã ãã¾ããï¼Kubernetesã¨ã³ã·ã¹ãã ã®ä¸ã§ãã©ã®ãããªä¸»è¦ãªèª²é¡ã®è§£æ±ºãç®æãã¦ããã®ã§ããããï¼</strong></p>
<p><a href="https://github.com/kubernetes/community/blob/master/sig-apps/charter.md#scope">charter</a>ã«è¨è¼ããã¦ããã¨ãããç§ãã¡ã¯Kubernetesä¸ã§ã¢ããªã±ã¼ã·ã§ã³ãéçºããããã¤ãéç¨ãããã¨ã«é¢é£ããå¹
åºãé åãã«ãã¼ãã¦ãã¾ãã
ç°¡åã«è¨ãã°ãéé±ã§éå¬ãã¦ãããã¼ãã£ã³ã°ã«ã¯èª°ã§ãèªç±ã«åå ã§ããKubernetesä¸ã§ã¢ããªã±ã¼ã·ã§ã³ãè¨è¿°ã»ãããã¤ããéã®è¯ãã£ãç¹ãå°ã£ãç¹ã«ã¤ãã¦è°è«ãããã¨ãã§ãã¾ãã</p>
<p><strong>Sandipan: ç¾å¨ãSIG Appsãåãçµãã§ããæãéè¦ãªããã¸ã§ã¯ããã¤ãã·ã¢ããã«ã¯ã©ã®ãããªãã®ãããã¾ããï¼</strong></p>
<p>ç¾æç¹ã«ããã¦ãç§ãã¡ã®ã³ã³ããã¼ã©ã¼éçºãæ¨é²ãã¦ãã主ãªè¦ç´ ã¯ããã¾ãã¾ãªAIé¢é£ã®ã¯ã¼ã¯ãã¼ããå®è¡ããéã«çãã課é¡ã§ãã
ããã§ãç§ãã¡ãé廿°å¹´éã«æ¸¡ã£ã¦æ¯æ´ãã¦ãã2ã¤ã®ã¯ã¼ãã³ã°ã°ã«ã¼ãã«ã¤ãã¦è¨åãã価å¤ãããã¾ãã</p>
<ol>
<li>
<p><a href="https://github.com/kubernetes/community/tree/master/wg-batch">The Batch Working Group</a>: Kubernetesä¸ã§HPCãAI/MLããã¼ã¿åæã¸ã§ããå®è¡ãããã¨ã«åãçµãã§ãã¾ãã</p>
</li>
<li>
<p><a href="https://github.com/kubernetes/community/tree/master/wg-serving">The Serving Working Group</a>: ãã¼ãã¦ã§ã¢ã¢ã¯ã»ã©ã¬ã¼ã·ã§ã³ãç¨ããAI/MLæ¨è«ã«ç¦ç¹ãå½ã¦ã¦ãã¾ãã</p>
</li>
</ol>
<h2 id="ãã¹ããã©ã¯ãã£ã¹ã¨èª²é¡">ãã¹ããã©ã¯ãã£ã¹ã¨èª²é¡</h2>
<p><strong>Sandipan: SIG Appsã¯ãKubernetesã«ãããã¢ããªã±ã¼ã·ã§ã³ç®¡çã®ãã¹ããã©ã¯ãã£ã¹ã®çå®ã«ããã¦éè¦ãªå½¹å²ãæ
ã£ã¦ãã¾ãããããã®ãã¹ããã©ã¯ãã£ã¹ã®ä¸é¨ã¨ããããã¢ããªã±ã¼ã·ã§ã³ã®ã©ã¤ããµã¤ã¯ã«ç®¡çã«ã©ã®ããã«å½¹ç«ã¤ããæãã¦ããã ãã¾ããï¼</strong></p>
<ol>
<li>
<p><a href="https://kubernetes.io/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/">ãã«ã¹ãã§ãã¯ã¨Readiness Probe</a>ãå®è£
ãããã¨ã§ãã¢ããªã±ã¼ã·ã§ã³ãæ£å¸¸ã§ããããã©ãã£ãã¯ãå¦çããæºåãã§ãã¦ãããã¨ã確èªã§ãã¾ããããã«ãããä¿¡é ¼æ§ã¨ç¨¼åæéãåä¸ãã¾ãããããã«å ãã¦ãå
æ¬çãªãã°åºåãã¢ãã¿ãªã³ã°ããã¬ã¼ã·ã³ã°ã®ã½ãªã¥ã¼ã·ã§ã³ãçµã¿åããããã¨ã§ãã¢ããªã±ã¼ã·ã§ã³ã®åä½ã«é¢ããã¤ã³ãµã¤ããå¾ããã¨ãã§ããåé¡ã®ç¹å®ã¨è§£æ±ºãè¿
éã«è¡ããã¨ãå¯è½ã«ãªãã¾ãã</p>
</li>
<li>
<p>ãªã½ã¼ã¹ä½¿ç¨éãã«ã¹ã¿ã ã¡ããªã¯ã¹ã«åºã¥ãã¦<a href="https://kubernetes.io/ja/docs/concepts/workloads/autoscaling/">ã¢ããªã±ã¼ã·ã§ã³ããªã¼ãã¹ã±ã¼ã«</a>ãããã¨ã§ããªã½ã¼ã¹ã®ä½¿ç¨ãæé©åããå¤åããè² è·ã«å¯¾å¿ã§ããããã«ãã¾ãã</p>
</li>
<li>
<p>ã¹ãã¼ãã¬ã¹ãªã¢ããªã±ã¼ã·ã§ã³ã«ã¯Deploymentããã¹ãã¼ããã«ãªã¢ããªã±ã¼ã·ã§ã³ã«ã¯StatefulSetãããããã¯ã¼ã¯ãã¼ãã«ã¯JobãCronJobããåãã¼ãã§ãã¼ã¢ã³ãå®è¡ããã«ã¯DaemonSetã使ç¨ãã¦ãã ãããã¾ããOperatorãCRDãæ´»ç¨ãã¦Kubernetes APIãæ¡å¼µãããã¨ã§ãè¤éãªã¢ããªã±ã¼ã·ã§ã³ã®ãããã¤ã»ç®¡çã»ã©ã¤ããµã¤ã¯ã«ãèªååã§ããéç¨ã容æã«ãªããæåã«ããä»å
¥ãæ¸ãããã¨ãã§ãã¾ãã</p>
</li>
</ol>
<p><strong>Sandipan: SIG Appsãç´é¢ãã¦ããä¸è¬çãªèª²é¡ã«ã¯ã©ã®ãããªãã®ãããã¾ããï¼ã¾ããããã«å¯¾ãã¦ã©ã®ããã«å¯¾å¦ãã¦ãã¾ããï¼</strong></p>
<p>ç§ãã¡ã常ã«ç´é¢ãã¦ããæå¤§ã®èª²é¡ã¯ãå¤ãã®æ©è½ãã¢ã¤ãã¢ãæ¹åææ¡ãå´ä¸ããªããã°ãªããªãã¨ããç¹ã§ãããããã夿ã®èæ¯ã«ããçç±ã説æããã«ã¯ãå¤ãã®è¦å¾ã¨å¿èãå¿
è¦ã¨ãªãã¾ãã</p>
<p><strong>Sandipan: Kubernetesã®é²åã¯SIG Appsã®æ´»åã«ã©ã®ãããªå½±é¿ãä¸ãã¾ãããï¼æè¿ã®å¤æ´ãä»å¾ã®æ©è½ã®ä¸ã§ãSIG Appsã«ã¨ã£ã¦ç¹ã«é¢é£æ§ãé«ãããããã¯æçã ã¨èãããã®ã¯ããã¾ããï¼</strong></p>
<p>SIG Appsã«é¢ããç§ãã¡èªèº«ãããã¦ã³ãã¥ããã£å
¨ä½ã«ã¨ã£ã¦ã®ä¸»ãªå©ç¹ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/">ã«ã¹ã¿ã ãªã½ã¼ã¹</a>ã«ãã£ã¦Kubernetesãæ¡å¼µã§ãããã¨ã§ãã
ã¾ããã¦ã¼ã¶ã¼ãçµã¿è¾¼ã¿ã®ã³ã³ããã¼ã©ã¼ãæ´»ç¨ãã¦ç¬èªã®ã«ã¹ã¿ã ã³ã³ããã¼ã©ã¼ãæ§ç¯ããç§ãã¡ã³ã¢ã¡ã³ããã¼ãèæ
®ãã¦ããªãã£ãããããã¯Kuberneteså
ã§å¹ççã«å¯¾å¿ã§ããªãã£ãé«åº¦ãªã¦ã¼ã¹ã±ã¼ã¹ãå®ç¾ã§ããç¹ãéè¦ã§ãã</p>
<h2 id="sig-appsã¸ã®è²¢ç®">SIG Appsã¸ã®è²¢ç®</h2>
<p><strong>Sandipan: SIG Appsã«é¢ããããã¨èãã¦ããæ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã«ã¯ãã©ã®ãããªæ©ä¼ãããã¾ããï¼ã¾ããã©ã®ãããªã¢ããã¤ã¹ãããã¾ããï¼</strong></p>
<p>ãæåã«åãçµãã®ã«ããããã®issueã¯ããã¾ããï¼ãã¨ãã質åã¯ã¨ã¦ãããå¯ãããã¾ã:-)
ããããæ®å¿µãªããç°¡åã«çãããããã®ã§ã¯ããã¾ããã
ç§ãã¡ã¯ãã¤ãããã³ã¢ã³ã³ããã¼ã©ã¼ã¸ã®è²¢ç®ãå§ããæåã®æ¹æ³ã¯ããã°ããæéãããã¦åãçµã¿ããã¨æããã³ã³ããã¼ã©ã¼ãè¦ã¤ãããã¨ã§ããã¨çããã«ä¼ãã¦ãã¾ãã
ãã®ã³ã³ããã¼ã©ã¼ã®ã³ã¼ããèªã¿ãã¦ããããã¹ããçµ±åãã¹ããå®è¡ãã¦ã¿ã¦ãã ããã
ä¸åº¦ãå
¨ä½ã®ä»çµã¿ãçè§£ã§ããããããã¦å£ãã¦ã¿ã¦ããã¹ãã失æãããã¨ã確èªããã®ãããã§ãããã
ãã®ç¹å®ã®ã³ã³ããã¼ã©ã¼ã«ã¤ãã¦çè§£ãæ·±ã¾ããèªä¿¡ãã¤ãã¦ãããããã®ã³ã³ããã¼ã©ã¼ã«é¢é£ãããªã¼ãã³ãªissueãæ¢ãã¦ã¿ãã¨ããã§ããããã¦ã¼ã¶ã¼ãç´é¢ãã¦ããåé¡ã«ã¤ãã¦èª¬æãå ããããæ¹åæ¡ãææ¡ãããããããã¯æåã®ä¿®æ£ã«ææ¦ãã¦ã¿ãã®ãè¯ãããããã¾ããã</p>
<p>å
ã»ã©è¿°ã¹ãã¨ããããã®éã«è¿éã¯ããã¾ããã
ç§ãã¡ãç¾å¨ã®ç¶æ
ã«è³ãã¾ã§ã«å¾ã
ã«ç©ã¿éãã¦ãããã¹ã¦ã®ã¨ãã¸ã±ã¼ã¹ãçè§£ããããã«ã¯ãã³ã¼ããã¼ã¹ã¨åãåã£ã¦æéããããå¿
è¦ãããã¾ãã
1ã¤ã®ã³ã³ããã¼ã©ã¼ã§ãã¾ããã£ããããã®ããã»ã¹ãä»ã®ã³ã³ããã¼ã©ã¼ã§ãåã³ç¹°ãè¿ãå¿
è¦ãããã¾ãã</p>
<p><strong>Sandipan: SIG Appsã¯ã³ãã¥ããã£ããã©ã®ããã«ãã£ã¼ãããã¯ãåéãã¦ããããããã©ã®ããã«æ´»åã¸åæ ãã¦ããã®ã§ããããï¼</strong></p>
<p>ç§ãã¡ã¯å¸¸ã«ãéé±ã§éå¬ãã¦ãã<a href="https://github.com/kubernetes/community/tree/master/sig-apps#meetings">ãã¼ãã£ã³ã°</a>ã«åå ãããèªèº«ã®èª²é¡ã解決çãçºè¡¨ãã¦ããã ããããçããã«å¥¨å±ãã¦ãã¾ãã
Kubernetesä¸ã§è峿·±ãåé¡ã«åãçµãã§ãããã³ã¢ã³ã³ããã¼ã©ã¼ã«é¢ããæç¨ãªãã£ã¼ãããã¯ãæä¾ã§ããã®ã§ããã°ãã©ãªãããã®å£°ã§ãå¸¸ã«æè¿ãã¦ãã¾ãã</p>
<h2 id="ä»å¾ã®å±æ">ä»å¾ã®å±æ</h2>
<p><strong>Sandipan: ä»å¾ãè¦æ®ããã¨ããKubernetesã«ãããã¢ããªã±ã¼ã·ã§ã³ç®¡çã«é¢ãã¦ãSIG Appsãæ³¨ç®ãã¦ãã主è¦ãªæ³¨åé åãä»å¾ã®ãã¬ã³ãã«ã¯ã©ã®ãããªãã®ãããã¾ããï¼SIGã¯ãããã®ãã¬ã³ãã«ã©ã®ããã«é©å¿ãã¦ããã®ã§ããããï¼</strong></p>
<p>ééããªããç¾å¨ã®AIãã¼ã ãæå¤§ã®æ¨é²è¦å ã§ãã
åè¿°ã®ã¨ãããç§ãã¡ã¯ããããç°ãªãå´é¢ãæ±ã2ã¤ã®ã¯ã¼ãã³ã°ã°ã«ã¼ããæãã¦ãã¾ãã</p>
<p><strong>Sandipan: ãã®SIGã«é¢ãã¦ãæ°ã«å
¥ã£ã¦ããç¹ãããã°æãã¦ãã ããã</strong></p>
<p>ééããªãããã¼ãã£ã³ã°ã<a href="https://kubernetes.slack.com/messages/sig-apps">Slack</a>ã«åå ãã¦ããã¦ãã人ã
ã§ãã
å½¼ãã¯ã課é¡ã®ããªã¢ã¼ã¸ããã«ãªã¯ã¨ã¹ãã«çµ¶ãéãªãè²¢ç®ããKubernetesãç´ æ´ããããã®ã«ããããã«(é常ã«é »ç¹ã«ç§çãªæéã使ã£ã¦)å¤ãã®æéãè²»ããã¦ããã¦ãã¾ãï¼</p>
<hr>
<p>SIG Appsã¯ãKubernetesã³ãã¥ããã£ã«ãããå¿
è¦ä¸å¯æ¬ ãªæ§æè¦ç´ ã§ãããå¤§è¦æ¨¡ãªã¢ããªã±ã¼ã·ã§ã³ã®ãããã¤ã¨ç®¡çã®ããæ¹ãå½¢æããå½¹å²ãæ
ã£ã¦ãã¾ãã
Kubernetesã®ã¯ã¼ã¯ãã¼ãAPIã®æ¹åãããAI/MLã¢ããªã±ã¼ã·ã§ã³ç®¡çã«ãããã¤ããã¼ã·ã§ã³ã®æ¨é²ã¾ã§ãSIG Appsã¯çµ¶ãéãªãç¾ä»£ã®ã¢ããªã±ã¼ã·ã§ã³éçºè
ããã³éç¨è
ã®ãã¼ãºã«å¿ãç¶ãã¦ãã¾ãã
æ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã§ãã£ã¦ããçµé¨è±å¯ãªéçºè
ã§ãã£ã¦ããé¢ä¸ããè²¢ç®ããæ©ä¼ã¯å¸¸ã«åå¨ãã¾ãã</p>
<p>SIG Appsã«ã¤ãã¦ããã«å¦ã³ããæ¹ããè²¢ç®ã«é¢å¿ã®ããæ¹ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-apps">SIG README</a>ãã確èªã®ãããéé±ã§éå¬ããã¦ãã<a href="https://github.com/kubernetes/community/tree/master/sig-apps#meetings">ãã¼ãã£ã³ã°</a>ã«ãã²ãåå ãã ããã</p>
<ul>
<li><a href="https://groups.google.com/a/kubernetes.io/g/sig-apps">SIG Appsã¡ã¼ãªã³ã°ãªã¹ã</a></li>
<li><a href="https://kubernetes.slack.com/messages/sig-apps">SIG Appsã®Slackãã£ã³ãã«</a></li>
</ul>
- SIG etcdã®åãçµã¿ã®ç´¹ä»https://kubernetes.io/ja/blog/2025/03/04/sig-etcd-spotlight/Tue, 04 Mar 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/03/04/sig-etcd-spotlight/
<p>ä»åã®SIG etcd spotlightã§ã¯ããã®Kubernetesã®Special Interest Groupã«ã¤ãã¦ããã«çè§£ãæ·±ããããã<a href="https://github.com/jmhbnz">James Blair</a>æ°ã<a href="https://github.com/serathius">Marek Siarkowicz</a>æ°ã<a href="https://github.com/wenjiaswe">Wenjia Zhang</a>æ°ã<a href="https://github.com/ahrtr">Benjamin Wang</a>æ°ã«ã話ã伺ãã¾ããã</p>
<h2 id="sig-etcdã®ç´¹ä»">SIG etcdã®ç´¹ä»</h2>
<p><strong>Frederico: ããã«ã¡ã¯ããæéãããã ããããã¨ããããã¾ãï¼ã¾ãã¯èªå·±ç´¹ä»ããå§ãã¾ãããããèªèº«ã®ãã¨ãç¾å¨ã®å½¹å²ãããã¦Kubernetesã«é¢ããããã«ãªã£ãçµç·¯ã«ã¤ãã¦æãã¦ãã ããã</strong></p>
<p><strong>Benjamin</strong>: ããã«ã¡ã¯ãBenjaminã¨ç³ãã¾ããç§ã¯SIG etcdã®ããã¯ãªã¼ãã§ãããetcdã®ã¡ã³ããã¼ã®ã²ã¨ãã§ããç§ã¯Broadcomã°ã«ã¼ãã®ä¸é¨ã§ããVMwareã«å¤ãã¦ãã¾ããKubernetesãetcdãããã¦CSI(<a href="https://github.com/container-storage-interface/spec/blob/master/spec.md">Container Storage Interface</a>)ã«ã¯ãä»äºãéãã¦ãã¾ããªã¼ãã³ã½ã¼ã¹ã¸ã®å¤§ããªæ
ç±ããé¢ããããã«ãªãã¾ããã2020å¹´ããKubernetesãetcdã(ããã³CSI)ã«åãçµãã§ãã¾ãã</p>
<p><strong>James</strong>: ããã«ã¡ã¯ããã¼ã ã®çãããç§ã¯Jamesã§ããSIG etcdã®å
±åãã§ã¢ã§ãããetcdã®ã¡ã³ããã¼ãåãã¦ãã¾ããRed Hatã«å¤ãã¦ãããã¹ãã·ã£ãªã¹ãã¢ã¼ããã¯ãã¨ãã¦ã¯ã©ã¦ããã¤ãã£ãæè¡ã®å°å
¥æ¯æ´ãè¡ã£ã¦ãã¾ããKubernetesã¨ã³ã·ã¹ãã ã«ã¯2019å¹´ããé¢ããããã«ãªãã¾ããã2022å¹´æ«é ãetcdã³ãã¥ããã£ã¨ããã¸ã§ã¯ããæ¯æ´ãå¿
è¦ã¨ãã¦ãããã¨ã«æ°ä»ããã§ããéãé »ç¹ã«è²¢ç®ãå§ãã¾ããã
ç§ãã¡ã®ã³ãã¥ããã£ã«ã¯ãæè¡ããã£ããã§åå ãã人ã¨ã®ã¤ãªããã§çã¾ããã¨ããè¨èãããã¾ãããç§ã«ã¨ã£ã¦ããã¯ã¾ãã«ãã®éãã§ãã
ããã¾ã§ç´ æ´ãããæ
è·¯ã§ããããããããã³ãã¥ããã£ãæ¯ãã¦ããããã¨ã楽ãã¿ã«ãã¦ãã¾ãã</p>
<p><strong>Marek</strong>: çããããã«ã¡ã¯ãç§ã¯Marekã§ããSIG etcdã®ãªã¼ããåãã¦ãã¾ããGoogleã§ã¯ãGKEã®etcdãã¼ã ãçãã¦ããããã¹ã¦ã®GKEã¦ã¼ã¶ã¼ã«å¯¾ãã¦å®å®ãã¤ä¿¡é ¼æ§ã®é«ãä½é¨ãæä¾ãããã¨ãç®æãã¦ãã¾ãã
ç§ã®Kubernetesã¨ã®é¢ããã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-instrumentation">SIG Instrumentation</a>ããå§ã¾ãã¾ããã
ããã§ã¯ã<a href="https://kubernetes.io/blog/2020/09/04/kubernetes-1-19-introducing-structured-logs/">Kubernetes Structured Logging effort</a>ãç«ã¡ä¸ãã主å°ãã¾ããã
ç¾å¨ãã<a href="https://kubernetes-sigs.github.io/metrics-server/">Kubernetes Metrics Server</a>ã®ä¸»è¦ãªããã¸ã§ã¯ããªã¼ããåãã¦ãããKubernetesã«ããããªã¼ãã¹ã±ã¼ãªã³ã°ã«å¿
è¦ãªéè¦ãªã·ã°ãã«ãæä¾ãã¦ãã¾ãã
etcdã«ã¯3å¹´åããã¼ã¸ã§ã³3.5ã®ãªãªã¼ã¹ææããé¢ããå§ãã¾ããã
å½åã¯ããã¤ãã®èª²é¡ã«ç´é¢ãã¾ããããä»ã§ã¯etcdã¯ããã¾ã§ã§æãã¹ã±ã¼ã©ãã«ã§ä¿¡é ¼æ§ã®é«ãç¶æ
ã«ãããããã¸ã§ã¯ãå²ä¸æå¤ã®ã³ã³ããªãã¥ã¼ã·ã§ã³æ°ãè¨é²ãã¦ãã¾ãã
ãã®ãã¨ã«é常ã«è奮ãã¦ãã¾ãã
ç§ã¯åæ£ã·ã¹ãã ãã¨ã¯ã¹ããªã¼ã ã»ããã°ã©ãã³ã°ããã¹ãã«æ
ç±ãæã£ã¦ãã¾ãã</p>
<p><strong>Wenjia</strong>: ããã«ã¡ã¯ãWenjiaã¨ç³ãã¾ããSIG etcdã®å
±åãã§ã¢ã§ãããetcdã®ã¡ã³ããã¼ã®ã²ã¨ãã§ããGoogleã§ã¨ã³ã¸ãã¢ãªã³ã°ããã¼ã¸ã£ã¼ã¨ãã¦ãGKE(Google Kubernetes Engine)ããã³GDC(Google Distributed Cloud)ã«åãçµãã§ãã¾ãã
Kubernetes v1.10ããã³etcd v3.1ã®ãªãªã¼ã¹ææããããªã¼ãã³ã½ã¼ã¹ã®Kubernetesããã³etcdã®åéã§æ´»åãã¦ãã¾ãã
Kubernetesã«é¢ããããã«ãªã£ããã£ããã¯ä»äºã§ããããç§ããã®åéã«ã¨ã©ãã¦ããã®ã¯ãã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³æè¡ã®é
åãããã¦ããã«éè¦ãªãã¨ã«ãç´ æ´ããããªã¼ãã³ã½ã¼ã¹ã³ãã¥ããã£ã®åå¨ã§ãã</p>
<h2 id="kubernetesã®special-interest-group-sig-ã«ãªãã¾ã§">Kubernetesã®Special Interest Group(SIG)ã«ãªãã¾ã§</h2>
<p><strong>Frederico: ç´ æ´ãããã§ãããããã¨ããããã¾ããã¾ãã¯SIGèªä½ã®èµ·æºã«ã¤ãã¦ãèããããã¨æãã¾ããSIG etcdã¯éå¸¸ã«æ°ããSIGã§ããããã®è¨ç«ã®çµç·¯ã¨èæ¯ã«ã¤ãã¦ç°¡åã«æãã¦ããã ãã¾ããï¼</strong></p>
<p>Marek: ãã¡ããã§ãï¼SIG etcdã¯ãetcdãKubernetesã®ãã¼ã¿ã¹ãã¢ã¨ãã¦éè¦ãªã³ã³ãã¼ãã³ãã§ãããã¨ããè¨ç«ããã¾ãããããã彿ãetcdã¯ã¡ã³ããã¼ã®å
¥ãæ¿ãããä¿¡é ¼æ§ã®åé¡ãªã©ãããã¤ãã®èª²é¡ãæ±ãã¦ãã¾ããã<a href="https://etcd.io/blog/2023/introducing-sig-etcd/">å°ç¨ã®SIGãè¨ç«ãã</a>ãã¨ã§ããããã®åé¡ã«éä¸ãã¦åãçµã¿ãéçºã»ä¿å®ããã»ã¹ãæ¹åããã¯ã©ã¦ããã¤ãã£ãã®ç°å¢ã¨é£åãã¦etcdãçºå±ããã¦ããä½å¶ãæ´ãã¾ããã</p>
<p><strong>Frederico: SIGã«ãªã£ããã¨ã§ãæå¾
ã©ããã®ææã¯å¾ããã¾ãããï¼ããã«è¨ãã°ãå
ã»ã©æããããåæ©ã¯å®éã«è§£æ¶ããã¤ã¤ããã¾ããï¼ãã®éæåº¦ã«ã¤ãã¦ãæãã¦ãã ããã</strong></p>
<p><strong>Marek</strong>: å
¨ä½çã«è¦ã¦é常ã«ãã¸ãã£ããªå¤åã§ãããSIGã«ãªããã¨ã§ãetcdã®éçºã«ããæç¢ºãªæ§é ã¨éææ§ããããããã¾ãããç§ãã¡ã¯ãKEP(<a href="https://github.com/kubernetes/enhancements/blob/master/keps/README.md">Kubernetes Enhancement Proposals</a>)ãPRR(<a href="https://github.com/kubernetes/community/blob/master/sig-architecture/production-readiness.md">Production Readiness Reviews</a>)ã¨ãã£ãKubernetesã®ããã»ã¹ãåãå
¥ããããã«ããæ©è½éçºããªãªã¼ã¹ãµã¤ã¯ã«ãæ¹åããã¦ãã¾ãã</p>
<p><strong>Frederico: ãããã«å ãã¦ãSIGã«ãªã£ããã¨ã«ãã£ã¦å¾ãããæå¤§ã®ã¡ãªãããä¸ã¤é¸ã¶ãªããªãã§ããããï¼</strong></p>
<p><strong>Marek</strong>: ç§ã«ã¨ã£ã¦æå¤§ã®å©ç¹ã¯ã<a href="https://docs.prow.k8s.io/">Prow</a>ã<a href="https://testgrid.k8s.io/">TestGrid</a>ã¨ãã£ããã¼ã«ã®ãããªKubernetesã®ãã¹ãåºç¤ãæ¡ç¨ã§ãããã¨ã§ããetcdã®ãããªå¤§è¦æ¨¡ããã¸ã§ã¯ãã®å ´åãGitHubæ¨æºã®ãã¼ã«ã¨ã¯å°åºæ¯è¼ã«ãªãã¾ããã使ãæ
£ãããæç¢ºã§æ±ãããããã¼ã«ããããã¨ã¯ãetcdã«ã¨ã£ã¦å¤§ããªå¼·åã¨ãªããKubernetesã®ã³ã³ããªãã¥ã¼ã¿ã¼ãetcdã«ãè²¢ç®ãããããªãã¾ãã</p>
<p><strong>Wenjia</strong>: ã¾ã£ããåæã§ãã課é¡ã¯ä¾ç¶ã¨ãã¦æ®ã£ã¦ãã¾ãããSIGã¨ããæ çµã¿ããããã«åãçµãããã®ç¢ºããªåºç¤ãæä¾ãã¦ãããetcdãKubernetesã¨ã³ã·ã¹ãã ã®éè¦ãªã³ã³ãã¼ãã³ãã¨ãã¦ä»å¾ãæåãç¶ãããã¨ã確ããªãã®ã«ãã¦ããã¦ãã¾ãã</p>
<p>ã³ãã¥ããã£ã¸ã®ãã¸ãã£ããªå½±é¿ãã¾ããSIG etcdã®æåã«ããã¦å¼·èª¿ãã¦ããããéè¦ãªå´é¢ã§ãã
Kubernetesã®SIGã¨ããæ çµã¿ã«ãã£ã¦ãetcdã®ã³ã³ããªãã¥ã¼ã¿ã¼ãåãå
¥ããããç°å¢ãæ´ããããåºãKubernetesã³ãã¥ããã£ããã®åå ãå¢å ãã¾ããã
ã¾ãã<a href="https://github.com/kubernetes/community/blob/master/sig-api-machinery/README.md">SIG API Machinery</a>ã<a href="https://github.com/kubernetes/community/tree/master/sig-scalability">SIG Scalability</a>ã<a href="https://github.com/kubernetes/community/tree/master/sig-scalability">SIG Testing</a>ã<a href="https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle">SIG Cluster Lifecycle</a>ãªã©ãä»ã®SIGã¨ã®é£æºãå¼·åããã¦ãã¾ãã</p>
<p>ãã®ãããªé£æºã®ãããã§ãetcdã®éçºããããåºãKubernetesã¨ã³ã·ã¹ãã ã®ãã¼ãºã¨ç¢ºå®ã«æ´åããããã«ãªã£ã¦ãã¾ããSIG etcdã¨SIG Cluster Lifecycleã®å
±åã®åãçµã¿ã«ããè¨ç«ããã<a href="https://github.com/kubernetes/community/blob/master/wg-etcd-operator/README.md">etcd Operator Working Group</a>ã¯ããã®ãããªæåãã飿ºã®å¥½ä¾ã§ãããKubernetesã«ãããetcdã®éç¨é¢ãæ¹åãããã¨ããå
±éã®åãçµã¿å§¿å¢ã示ãã¦ãã¾ãã</p>
<p><strong>Frederico: ã³ã©ãã¬ã¼ã·ã§ã³ã«ã¤ãã¦è¨åãããã¾ããããããæ°ãæã§ã³ã³ããªãã¥ã¼ã¿ã¼ãã³ãã¥ããã£ã®é¢ä¸ã«å¤åã¯è¦ããã¾ãããï¼</strong></p>
<p><strong>James</strong>: ã¯ãã<a href="https://etcd.devstats.cncf.io/d/23/prs-authors-repository-groups?orgId=1&var-period=m&var-repogroup_name=All&from=1422748800000&to=1738454399000">ã¦ãã¼ã¯ãªPR使è
ã®ãã¼ã¿</a>ã«ã示ããã¦ããã¨ãããç§ãã¡ã¯æè¿3æã«é廿é«ãè¨é²ãããã¸ãã£ããªå¾åãç¶ãã¦ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2025/03/04/sig-etcd-spotlight/stats.png"
alt="Unique PR author data stats"/>
</figure>
<p>ããã«ã<a href="https://etcd.devstats.cncf.io/d/74/contributions-chart?orgId=1&from=1422748800000&to=1738454399000&var-period=m&var-metric=contributions&var-repogroup_name=All&var-country_name=All&var-company_name=All&var-company=all">etcdããã¸ã§ã¯ãã®å
¨ãªãã¸ããªã«ãããå
¨ä½çãªã³ã³ããªãã¥ã¼ã·ã§ã³</a>ãè¦ã¦ããetcdããã¸ã§ã¯ãã®æ´»åãåã³æ´»çºåãã¦ãããã¨ã示ããã¸ãã£ããªå¾åã確èªãã¦ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2025/03/04/sig-etcd-spotlight/stats2.png"
alt="Overall contributions stats"/>
</figure>
<h2 id="ä»å¾ã®å±æ">ä»å¾ã®å±æ</h2>
<p><strong>Frederico: 大å¤è峿·±ã話ã§ããããããã¨ããããã¾ããç´è¿ã®è©±ã¨ãã¦ãSIG etcdã®ç¾å¨ã®åªå
äºé
ã«ã¯ã©ã®ãããªãã®ãããã¾ããï¼</strong></p>
<p><strong>Marek</strong>: ä¿¡é ¼æ§ã¯å¸¸ã«æéè¦èª²é¡ã§ããetcdãå
ç¢ã§ãããã¨ã確å®ã«ããªããã°ãªãã¾ãããã¾ãããªãã¬ã¼ã¿ã¼ã«ã¨ã£ã¦etcdããã使ããããã管çããããããããã®åãçµã¿ãé²ãã¦ãã¾ããããã«ãetcdãKubernetesã«éãããã¤ã³ãã©ç®¡çã®ããã®ç¾å®çã«å©ç¨å¯è½ãªã¹ã¿ã³ãã¢ãã³ã®é¸æè¢ã¨ãããã¨ãè¦éã«å
¥ãã¦ãã¾ããããã¦ãã¡ãããã¹ã±ã¼ã©ããªãã£ãéè¦ã§ããã¯ã©ã¦ããã¤ãã£ãã®ä¸çã§æ¡å¤§ãç¶ããè¦æ±ã«å¯¾å¿ã§ããããã«ããå¿
è¦ãããã¾ãã</p>
<p><strong>Benjamin</strong>: ä¿¡é ¼æ§ãæåªå
ã®ååã¨ãã¹ãã ã¨ããç¹ã«ã¯ç§ãåæãã¾ããæ£ç¢ºæ§ã ãã§ãªããäºææ§ã確ä¿ããå¿
è¦ãããã¾ããå ãã¦ãetcdã®çè§£ããããã¨ä¿å®æ§ãç¶ç¶çã«æ¹åãã¦ããã¹ãã§ããç§ãã¡ã注åãã¹ãã¯ãã³ãã¥ããã£ãæãé¢å¿ãå¯ãã¦ãããã¤ã³ãã¤ã³ãã®è§£æ¶ã§ãã</p>
<p><strong>Frederico: ç¹ã«ç·å¯ã«é£æºãã¦ããSIGã¯ããã¾ããï¼</strong></p>
<p><strong>Marek</strong>: SIG API Machineryã¯ééããªãç·å¯ã«é£æºãã¦ããç¸æã§ããå½¼ãã¯etcdãä¿åãããã¼ã¿ã®æ§é ãä¿æãã¦ãããããç§ãã¡ã¯å¸¸ã«é£æºãã¦åãçµãã§ãã¾ããã¾ããSIG Cluster Lifecycleãéè¦ã§ããetcdã¯Kubernetesã¯ã©ã¹ã¿ã¼ã®éè¦ãªæ§æè¦ç´ ã§ãããããæ°ãã«è¨ç«ãããetcd operator Working groupã§ãååãã¦ãã¾ãã</p>
<p><strong>Wenjia</strong>: MarekãæããSIG API Machineryã¨SIG Cluster Lifecycle以å¤ã«ããSIG ScalabilityãSIG Testingã¨ã坿¥ã«é£æºãã¦ãã¾ãã</p>
<p><strong>Frederico: ããä¸è¬çãªè¦³ç¹ã§ãèããã¾ãããã¯ã©ã¦ããã¤ãã£ãç°å¢ãé²åããä¸ã§ãSIG etcdã«ã¨ã£ã¦ã®ä¸»ãªèª²é¡ã¯ä½ã ã¨ãèãã§ããï¼</strong></p>
<p><strong>Marek</strong>: ããã§ãããéè¦ãªãã¼ã¿ãæ±ã£ã¦ãã以ä¸ãä¿¡é ¼æ§ã¯å¸¸ã«èª²é¡ã§ããã¯ã©ã¦ããã¤ãã£ãã®ä¸çã¯é常ã«éããã¼ã¹ã§é²åãã¦ããããã®è¦æ±ã«å¿ãããããããªã¹ã±ã¼ã©ããªãã£ã確ä¿ããã«ã¯ç¶ç¶çãªåªåãå¿
è¦ã§ãã</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p><strong>Frederico: ããããã話ãçµããã«è¿ã¥ãã¦ãã¾ããããetcdã«é¢å¿ã®ããæ¹ã¯ã©ã®ããã«é¢ãããã¨ãã§ãã¾ããï¼</strong></p>
<p><strong>Marek</strong>: ãã²åå ãã¦ããã ãããã§ãï¼æãè¯ãå§ãæ¹ã¯ã<a href="https://github.com/kubernetes/community/blob/master/sig-etcd/README.md#meetings">SIG etcdãã¼ãã£ã³ã°</a>ã«åå ãã<a href="https://groups.google.com/g/etcd-dev">etcd-devã¡ã¼ãªã³ã°ãªã¹ã</a>ã§ã®è°è«ã追ãã<a href="https://github.com/etcd-io/etcd/issues">GitHubã®Issue</a>ã確èªãããã¨ã§ããææ¡ã®ã¬ãã¥ã¼ãã³ã¼ãã®ãã¹ããããã¥ã¡ã³ãã®è²¢ç®ãªã©ã常ã«ååãã¦ãã ããæ¹ãæè¿ãã¦ãã¾ãã</p>
<p><strong>Wenjia</strong>: ãã®è³ªåã¯ã¨ã¦ãå¬ããã§ããðãSIG etcdã¸ã®è²¢ç®ã«é¢å¿ã®ããæ¹ãé¢ãããå½±é¿ãä¸ããæ¹æ³ã¯æ°å¤ãããã¾ãã以ä¸ã¯ãçãããè²¢ç®ã§ãã主ãªåéã®ä¸é¨ã§ãã</p>
<p><strong>ã³ã¼ãã§ã®è²¢ç®</strong>:</p>
<ul>
<li><em>ãã°ä¿®æ£</em>: etcdã®ã³ã¼ããã¼ã¹ã®æ¢ç¥ã®åé¡ã«åãçµã¿ã¾ããåå¿è
ã«é©ããã¿ã¹ã¯ãè¦ã¤ããã«ã¯ããgood first issueãããhelp wantedãã¨ã©ãã«ä»ããããIssueããå§ããã®ãè¯ãã§ãããã</li>
<li><em>æ©è½éçº</em>: æ°æ©è½ãæ©è½å¼·åã®éçºã«è²¢ç®ãã¾ããetcdã®ãã¼ããããããã£ã¹ã«ãã·ã§ã³ã確èªããè¨ç»ä¸ã®å
容ãèªèº«ã®ã¹ãã«ãæ´»ãããé åãæ¢ãã¦ãã ããã</li>
<li><em>ãã¹ãã¨ã³ã¼ãã¬ãã¥ã¼</em>: ãã¹ãã®ä½æãã³ã¼ã夿´ã®ã¬ãã¥ã¼ããã£ã¼ãããã¯ã®æä¾ãéãã¦ãetcdã®å質確ä¿ã«è²¢ç®ãã¾ãã</li>
<li><em>ããã¥ã¡ã³ã</em>: æ°ããã³ã³ãã³ãã®è¿½å ãæ¢åæ
å ±ã®æç¢ºåã誤è¨ã®ä¿®æ£ãªã©ãéãã¦ã<a href="https://etcd.io/docs/">etcdã®ããã¥ã¡ã³ã</a>ãæ¹åãã¾ããæç¢ºã§å
æ¬çãªããã¥ã¡ã³ãã¯ãã¦ã¼ã¶ã¼ããã³ã³ã³ããªãã¥ã¼ã¿ã¼ã®åæ¹ã«ã¨ã£ã¦ä¸å¯æ¬ ã§ãã</li>
<li><em>ã³ãã¥ããã£ãµãã¼ã</em>: ãã©ã¼ã©ã ãã¡ã¼ãªã³ã°ãªã¹ããã¾ãã¯<a href="https://kubernetes.slack.com/archives/C3HD8ARJ5">Slackãã£ã³ãã«</a>ã§è³ªåã«åçãã¾ããetcdã®çè§£ã¨å©ç¨ãæ¯æ´ãããã¨ãã価å¤ã®ããè²¢ç®ã§ãã</li>
</ul>
<p><strong>åå æ¹æ³</strong>:</p>
<ul>
<li><em>ã³ãã¥ããã£ã«åå ãã</em>: ã¾ãã¯Slackä¸ã®etcdã³ãã¥ããã£ã«åå ããSIGã®ãã¼ãã£ã³ã°ã«åºå¸ããã¡ã¼ãªã³ã°ãªã¹ãããã©ãã¼ãã¾ããããããã¸ã§ã¯ãããã®ããã»ã¹ãé¢ãã£ã¦ãã人ã
ã«ã¤ãã¦çè§£ãæ·±ãããã¨ãã§ãã¾ãã</li>
<li><em>ã¡ã³ã¿ã¼ãè¦ã¤ãã</em>: ãªã¼ãã³ã½ã¼ã¹ãetcdã«ä¸æ
£ããªå ´åã¯ãã¬ã¤ãå½¹ã¨ãã¦æ¯æ´ãã¦ãããã¡ã³ã¿ã¼ãè¦ã¤ãããã¨ãæ¤è¨ãã¦ãã ãããç¶å ±ã«ã注ç®ãã ããï¼ç¬¬1æã®ã¡ã³ã¿ã¼ããã°ã©ã ã¯å¤§å¤æåãåãã¾ãããæ¬¡åã®ã¡ã³ã¿ã¼ããã°ã©ã ãè¿æ¥éå§äºå®ã§ãã</li>
<li><em>å°ããå§ãã</em>: å°ããªè²¢ç®ããå§ãããã¨ãæããªãã§ãã ããããã¨ãã°ãããã¥ã¡ã³ãã®èª¤åãä¿®æ£ããããç°¡åãªãã°ä¿®æ£ãææ¡ãããããã ãã§ããããã¸ã§ã¯ãã«åå ããããã®ç´ æ´ãããç¬¬ä¸æ©ã¨ãªãã¾ãã</li>
</ul>
<p>etcdã«è²¢ç®ãããã¨ã§ãã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã ã®éè¦ãªè¦ç´ ãæ¹åããæå©ãã¨ãªãã ãã§ãªããè²´éãªçµé¨ã¨ã¹ãã«ãå¾ããã¨ãã§ãã¾ãã
ãã²é£ã³è¾¼ãã§ãè²¢ç®ãå§ãã¦ã¿ã¦ãã ããï¼</p>
<p><strong>Frederico: ç´ æ´ãããã話ããããã¨ããããã¾ãããæå¾ã«ãè¨ç«ãããã°ããã®ä»ã®SIGã«åãã¦ãã¢ããã¤ã¹ãã²ã¨ã¤ããã ãã¾ããï¼</strong></p>
<p><strong>Marek</strong>: ãã¡ããã§ãï¼ç§ããã®ã¢ããã¤ã¹ã¯ãKuberneteså
¨ä½ã®ã³ãã¥ããã£ã§ç¢ºç«ããã¦ããããã»ã¹ãç©æ¥µçã«åãå
¥ããä»ã®SIGã¨ã®é£æºãåªå
ããå¼·åºãªã³ãã¥ããã£ã®æ§ç¯ã«æ³¨åãããã¨ã§ãã</p>
<p><strong>Wenjia</strong>: ç§èªèº«ã®OSSæ´»åã®ä¸ã§ã¨ã¦ãå½¹ç«ã£ããã¤ã³ããããã¤ãç´¹ä»ãã¾ãã</p>
<ul>
<li><em>å¿èå¼·ããããã¨</em>: ãªã¼ãã³ã½ã¼ã¹éçºã«ã¯æéãããããã¨ãããã¾ããè²¢ç®ãããã«åãå
¥ããããªãã£ãããå°é£ã«ç´é¢ãã¦ãæ°è½ã¡ããªãã§ãã ããã</li>
<li><em>æ¬æãæã¤ãã¨</em>: etcdã³ãã¥ããã£ã§ã¯åèª¿ã¨æ¬æãéè¦ããã¦ãã¾ããä»ã®äººã®æè¦ã«é
æ
®ããå
±éã®ç®æ¨ã«åãã£ã¦ååãã¾ãããã</li>
<li><em>楽ãããã¨</em>: ãªã¼ãã³ã½ã¼ã¹ã¸ã®è²¢ç®ã¯æ¥½ãããã®ã§ããã¹ãã§ããèªåã®èå³ã®ããåéãè¦ã¤ãã¦ããããããæããããæ¹æ³ã§è²¢ç®ãã¦ãã ããã</li>
</ul>
<p><strong>Frederico: ç´ æ´ãããç· ããããã§ãããçãããæ¬æ¥ã¯ãããã¨ããããã¾ããï¼</strong></p>
<hr>
<p>詳細æ
å ±ãå種ãªã½ã¼ã¹ã«ã¤ãã¦ã¯ã以ä¸ãã覧ãã ããã</p>
<ol>
<li>etcdã®å
¬å¼ã¦ã§ããµã¤ã: <a href="https://etcd.io/">https://etcd.io/</a></li>
<li>etcdã®GitHubãªãã¸ããª: <a href="https://github.com/etcd-io/etcd">https://github.com/etcd-io/etcd</a></li>
<li>etcdã³ãã¥ããã£ãã¼ã¸: <a href="https://etcd.io/community/">https://etcd.io/community/</a></li>
</ol>
- ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã«é¢ãããé¶ãå
ãåµãå
ããåé¡https://kubernetes.io/ja/blog/2025/02/14/cloud-controller-manager-chicken-egg-problem/Fri, 14 Feb 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/02/14/cloud-controller-manager-chicken-egg-problem/
<p>Kubernetes 1.31ã«ããã¦ã<a href="https://kubernetes.io/ja/blog/2024/05/20/completing-cloud-provider-migration/">Kuberneteså²ä¸æå¤§ã®ç§»è¡ä½æ¥ãå®äº</a>ããin-treeã®ã¯ã©ã¦ããããã¤ãã¼ãåé¤ããã¾ããã
ã³ã³ãã¼ãã³ãã®ç§»è¡èªä½ã¯å®äºãããã®ã®ãã¦ã¼ã¶ã¼ãã¤ã³ã¹ãã¼ã©ã¼ããã¸ã§ã¯ã(ä¾ãã°ãkOpsãCluster API)ã«ã¨ã£ã¦ã¯ãããã¤ãã®è¿½å çãªè¤éããæ®ããã¨ã«ãªãã¾ããã
ãããã®è¿½å æé ãé害ãã¤ã³ãã«ã¤ãã¦èª¬æããã¯ã©ã¹ã¿ã¼ç®¡çè
åãã«æ¨å¥¨äºé
ã示ãã¾ãã
ãã®ç§»è¡ä½æ¥ã¯é常ã«è¤éã§ãããã¤ãã®ãã¸ãã¯ã¯ã³ã¢ã³ã³ãã¼ãã³ãããåé¢ããå¿
è¦ãããã4ã¤ã®æ°ãããµãã·ã¹ãã ãæ§ç¯ããã¾ããã</p>
<ol>
<li><strong>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼</strong>(<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md">KEP-2392</a>)</li>
<li><strong>APIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·</strong>(<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy">KEP-1281</a>)</li>
<li><strong>kubeletã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³</strong>(<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers">KEP-2133</a>)</li>
<li><strong><a href="https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-">CSI</a>ã使ç¨ããã¹ãã¬ã¼ã¸ã®ç§»è¡</strong>(<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md">KEP-625</a>)</li>
</ol>
<p><a href="https://kubernetes.io/ja/docs/concepts/architecture/cloud-controller/">ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã¯ã³ã³ããã¼ã«ãã¬ã¼ã³ã®ä¸é¨ã§ã</a>ã
kube-controller-managerãkubeletã«å¾æ¥åå¨ãã¦ããæ©è½ã®ä¸é¨ãç½®ãæããéè¦ãªã³ã³ãã¼ãã³ãã§ãã</p>
<figure>
<img src="https://kubernetes.io/images/docs/components-of-kubernetes.svg"
alt="Kubernetesã®ã³ã³ãã¼ãã³ã"/> <figcaption>
<p>Kubernetesã®ã³ã³ãã¼ãã³ã</p>
</figcaption>
</figure>
<p>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®ä¸ã§ãæãéè¦ãªæ©è½ã®ã²ã¨ã¤ããã¼ãã³ã³ããã¼ã©ã¼ã§ããã¼ãã®åæåãæ
å½ãã¦ãã¾ãã</p>
<p>以ä¸ã®å³ã«ç¤ºãããã«ã<strong>kubelet</strong>ãèµ·åããã¨ãNodeãªãã¸ã§ã¯ããAPIãµã¼ãã¼ã«ç»é²ãããã®ãã¼ãã«Taintãä»ä¸ãããã¨ã§ãæåã«cloud-controller-managerã«ãã£ã¦å¦çãããããã«ãã¾ãã
åæç¶æ
ã®Nodeã«ã¯ããã¼ãã¢ãã¬ã¹ãããã¼ãããªã¼ã¸ã§ã³ãã¤ã³ã¹ã¿ã³ã¹ã¿ã¤ããªã©ã®ã¯ã©ã¦ããããã¤ãã¼åºæã®æ
å ±ãå«ãã©ãã«ã¨ãã£ããã¯ã©ã¦ããããã¤ãã¼åºæã®æ
å ±ãæ¬ ãã¦ãã¾ãã</p>
<figure class="diagram-medium ">
<img src="https://kubernetes.io/ja/blog/2025/02/14/cloud-controller-manager-chicken-egg-problem/ccm-chicken-egg-problem-sequence-diagram.svg"
alt="ãé¶ãå
ãåµãå
ããåé¡ã®ã·ã¼ã±ã³ã¹å³"/> <figcaption>
<p>ãé¶ãå
ãåµãå
ããåé¡ã®ã·ã¼ã±ã³ã¹å³</p>
</figcaption>
</figure>
<p>ãã®æ°ããåæåããã»ã¹ã«ããããã¼ããæºåå®äºã¨ãªãã¾ã§ã«è¥å¹²ã®é
å»¶ãçºçãã¾ãã
徿¥ã¯ãkubeletããã¼ãã使ããéãåæã«ãã¼ãã®åæåãè¡ããã¨ãå¯è½ã§ããã
ãããããã®å¦çãcloud-controller-managerã«ç§»è¡ããããã¨ã§ãã¯ã©ã¹ã¿ã¼ã®ãã¼ãã¹ãã©ããæã«<a href="https://kubernetes.io/ja/docs/tasks/administer-cluster/running-cloud-controller/#chicken-and-egg">ãé¶ãå
ãåµãå
ããåé¡</a>ãçºçããå¯è½æ§ãããã¾ãã
ããã¯ãcloud-controller-managerãä»ã®ã³ã³ããã¼ã«ãã¬ã¼ã³ã³ã³ãã¼ãã³ãã¨åæ§ã«ãããã¤ãã¦ããªãKubernetesã¢ã¼ããã¯ãã£(ãã¨ãã°ãstatic Podãã¹ã¿ã³ãã¢ãã³ãã¤ããªãã¾ãã¯Taintã許容ã<code>hostNetwork</code>ã使ç¨ããDaemonSetãDeploymentãªã©)ã«ããã¦ç¹ã«åé¡ã¨ãªãã¾ã(ãã®ç¹ã«ã¤ãã¦ã¯å¾è¿°ãã¾ã)ã</p>
<h2 id="ä¾åé¢ä¿ã®åé¡ã®å
·ä½ä¾">ä¾åé¢ä¿ã®åé¡ã®å
·ä½ä¾</h2>
<p>åè¿°ã®ã¨ããããã¼ãã¹ãã©ããæã«cloud-controller-managerãã¹ã±ã¸ã¥ã¼ãªã³ã°ä¸å¯ã¨ãªããã¯ã©ã¹ã¿ã¼ãæ£å¸¸ã«åæåãããªãå¯è½æ§ãããã¾ãã
以ä¸ã«ããã®åé¡ãã©ã®ããã«è¡¨é¢åããããã¾ããã®åå ã¨ãªãå¾ãæ ¹æ¬çãªè¦å ã®å
·ä½ä¾ã示ãã¾ãã</p>
<p>ãããã®ä¾ã§ã¯ãcloud-controller-managerãKubernetesãªã½ã¼ã¹(ãã¨ãã°ãDeploymentãDaemonSetãªã©)ã¨ãã¦å®è¡ãããã®ã©ã¤ããµã¤ã¯ã«ã管çãã¦ãããã¨ãåæã¨ãã¦ãã¾ãã
ãããã®æ¹æ³ã§ã¯ãcloud-controller-managerã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ãKubernetesã«ä¾åããããã確å®ã«ã¹ã±ã¸ã¥ã¼ãªã³ã°ãããããã«æ³¨æãå¿
è¦ã§ãã</p>
<h3 id="ä¾-æªåæåã®taintã«ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãããªã">ä¾: æªåæåã®Taintã«ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãããªã</h3>
<p><a href="https://kubernetes.io/ja/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager">Kubernetesã®ããã¥ã¡ã³ãã«è¨è¼</a>ããã¦ããã¨ããã<code>--cloud-provider=external</code>ãã©ã°ãä»ãã¦kubeletãèµ·åããå ´åã対å¿ãã<code>Node</code>ãªãã¸ã§ã¯ãã«ã¯<code>node.cloudprovider.kubernetes.io/uninitialized</code>ã¨ããNo Schedule Taintã追å ããã¾ãã
ãã®No Schedule Taintãé¤å»ããã®ã¯cloud-controller-managerã®è²¬ä»»ã§ãããããcloud-controller-managerã<code>Deployment</code>ã<code>DaemonSet</code>ãªã©ã®Kubernetesãªã½ã¼ã¹ã§ç®¡çãã¦ããå ´åãcloud-controller-managerèªèº«ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã§ããªãã¨ããç¶æ³ãçºçããå¯è½æ§ãããã¾ãã</p>
<p>ã³ã³ããã¼ã«ãã¬ã¼ã³ã®åæåä¸ã«cloud-controller-managerãã¹ã±ã¸ã¥ã¼ãªã³ã°ã§ããªãã¨ãçµæã¨ãã¦ä½æããããã¹ã¦ã®<code>Node</code>ãªãã¸ã§ã¯ãã«<code>node.cloudprovider.kubernetes.io/uninitialized</code>ã¨ããNo Schedule Taintãä»ä¸ãããã¾ã¾ã¨ãªãã¾ãã
ã¾ãããã®Taintã®åé¤ã¯cloud-controller-managerã®è²¬åã§ãããããcloud-controller-managerãå®è¡ãããªããã°Taintã¯åé¤ããã¾ããã
ãã®No Schedule Taintãé¤å»ãããªãã¨ãã³ã³ãããããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ã³ã³ããã¼ã©ã¼ãªã©ã®éè¦ãªã¯ã¼ã¯ãã¼ããã¹ã±ã¸ã¥ã¼ãªã³ã°ããããã¯ã©ã¹ã¿ã¼ã¯æ£å¸¸ãªç¶æ
ã«ãªãã¾ããã</p>
<h3 id="ä¾-not-ready-taintã«ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãããªã">ä¾: Not-Ready Taintã«ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãããªã</h3>
<p>次ã®ä¾ã¯ãã³ã³ãããããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹(CNI)ãcloud-controller-manager(CCM)ããã®IPã¢ãã¬ã¹æ
å ±ãå¾
ã¡åãã¦ããããã¤CCMãCNIã«ãã£ã¦é¤å»ãããã¯ãã®Taintã許容ãã¦ããªãç¶æ³ã§çºçããå¯è½æ§ãããã¾ãã</p>
<p><a href="https://kubernetes.io/docs/reference/labels-annotations-taints/#node-kubernetes-io-not-ready">Kubernetesã®ããã¥ã¡ã³ã</a>ã§ã¯ã<code>node.kubernetes.io/not-ready</code> Taintã«ã¤ãã¦æ¬¡ã®ããã«èª¬æããã¦ãã¾ãã</p>
<blockquote>
<p>ãNodeã³ã³ããã¼ã©ã¼ã¯ããã¼ãã®æ£å¸¸æ§ãç£è¦ãããã¨ã§ãã®ç¶æ
ã夿ããããã«å¿ãã¦ãã®Taintã追å ã¾ãã¯åé¤ãã¾ããã</p>
</blockquote>
<p>ãã®TaintãNodeãªã½ã¼ã¹ã«ä»ä¸ãããæ¡ä»¶ã®ä¸ã¤ã¯ããã®ãã¼ãä¸ã§ã³ã³ãããããã¯ã¼ã¯ãã¾ã åæåããã¦ããªãå ´åã§ãã
cloud-controller-managerã¯Nodeãªã½ã¼ã¹ã«IPã¢ãã¬ã¹ã追å ãã責任ããããã³ã³ãããããã¯ã¼ã¯ã³ã³ããã¼ã©ã¼ã¯ã³ã³ãããããã¯ã¼ã¯ãé©åã«æ§æããããã«IPã¢ãã¬ã¹ãå¿
è¦ã¨ãã¾ãã
ãããã£ã¦ãå ´åã«ãã£ã¦ã¯ãã¼ããNot Readyã®ã¾ã¾åæåããããæä¹
çã«ãã®ç¶æ
ã«ã¨ã©ã¾ããã¨ãããã¾ãã</p>
<p>ãã®ç¶æ³ã¯æåã®ä¾ã¨åæ§ã®çç±ã§çºçãã¾ããããã®å ´åã¯<code>node.kubernetes.io/not-ready</code> TaintãNo Executeã®å¹æã¨ã¨ãã«ä½¿ç¨ããã¦ãããããcloud-controller-managerã¯ãã®Taintãä»ä¸ããããã¼ãä¸ã§å®è¡ããã¾ããã
cloud-controller-managerãå®è¡ã§ããªãå ´åããã¼ãã¯åæåããã¾ããã
ããã¯ã³ã³ãããããã¯ã¼ã¯ã³ã³ããã¼ã©ã¼ãæ£å¸¸ã«åä½ã§ããªããã¨ã¸ã¨é£éãããã¼ãã¯<code>node.cloudprovider.kubernetes.io/uninitialized</code>ã¨<code>node.kubernetes.io/not-ready</code>ã®ä¸¡æ¹ã®Taintãä¿æãããã¨ã«ãªããã¯ã©ã¹ã¿ã¼ã¯æ£å¸¸ãªç¶æ
ã§ã¯ãªããªãã¾ãã</p>
<h2 id="æ¨å¥¨äºé
">æ¨å¥¨äºé
</h2>
<p>cloud-controller-managerã®å®è¡æ¹æ³ã«ããããæ£è§£ãã¨ããå¯ä¸ã®æ¹æ³ã¯ããã¾ããã
詳細ã¯ã¯ã©ã¹ã¿ã¼ç®¡çè
ããã³ã¦ã¼ã¶ã¼ã®å
·ä½çãªãã¼ãºã«ä¾åãã¾ãã
ã¯ã©ã¹ã¿ã¼ããã³cloud-controller-managerã®ã©ã¤ããµã¤ã¯ã«ãè¨ç»ããéã«ã¯ã以ä¸ã®ã¬ã¤ãã³ã¹ãèæ
®ãã¦ãã ããã</p>
<p>cloud-controller-managerã管ç対象ã¨åãã¯ã©ã¹ã¿ã¼å
ã§å®è¡ããã¦ããå ´åã¯ãä¸è¨ã®æ¨å¥¨äºé
ãèæ
®ãã¦ãã ããã</p>
<ol>
<li>Podãããã¯ã¼ã¯ã§ã¯ãªãããã¹ããããã¯ã¼ã¯ã¢ã¼ãã使ç¨ãã¦ãã ãããå¤ãã®å ´åãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã¯ã¤ã³ãã©ã¹ãã©ã¯ãã£ã«é¢é£ä»ããããAPIãµã¼ãã¹ã¨ã³ããã¤ã³ãã¨éä¿¡ããå¿
è¦ãããã¾ãã"hostNetwork"ãtrueã«è¨å®ãããã¨ã§ãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã¯ã³ã³ãããããã¯ã¼ã¯ã§ã¯ãªããã¹ãã®ãããã¯ã¼ã¯ã使ç¨ããããã«ãªãããã¹ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã¨åããããã¯ã¼ã¯ã¢ã¯ã»ã¹ãæã¤ãã¨ãä¿è¨¼ããã¾ããã¾ãããããã¯ã¼ã¯ãã©ã°ã¤ã³ã¸ã®ä¾åããªããªãã¾ããããã«ãããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãã¤ã³ãã©ã¹ãã©ã¯ãã£ã®ã¨ã³ããã¤ã³ãã¸ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ã(ãããã¯ã¼ã¯æ§æãã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¤ãã¼ã®æç¤ºã¨ä¸è´ãã¦ãããå¿
ã確èªãã¦ãã ãã)ã</li>
<li>ã¹ã±ã¼ã©ãã«ãªãªã½ã¼ã¹ã¿ã¤ãã使ç¨ãã¦ãã ããã<code>Deployment</code>ã<code>DaemonSet</code>ã¯ãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã®ã©ã¤ããµã¤ã¯ã«ã管çããã®ã«æç¨ã§ãããããã使ç¨ãããã¨ã§ãåé·æ§ã®ããã«è¤æ°ã®ã¤ã³ã¹ã¿ã³ã¹ãå®è¡ããããKubernetesã®ã¹ã±ã¸ã¥ã¼ãªã³ã°æ©è½ã«ãã£ã¦ã¯ã©ã¹ã¿ã¼å
ã§é©åã«é
ç½®ããããããã¨ã容æã«ãªãã¾ãããããã®ããªããã£ãã使ã£ã¦ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã®ã©ã¤ããµã¤ã¯ã«ã管çããè¤æ°ã®ã¬ããªã«ãå®è¡ããå ´åã¯ããªã¼ãã¼é¸åºãæå¹ã«ãããã¨ãå¿ããªãã§ãã ãããããããªãã¨ãåã³ã³ããã¼ã©ã¼ãäºãã«å¹²æ¸ããã¯ã©ã¹ã¿ã¼å
ã®ãã¼ããåæåãããªãå¯è½æ§ãããã¾ãã</li>
<li>ã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®ã³ã³ãããã³ã³ããã¼ã«ãã¬ã¼ã³ã«é
ç½®ãã¦ãã ãããä»ã®ã³ã³ããã¼ã©ã¼(ãã¨ãã°Azureã®ãã¼ãããã¼ã¸ã£ã¼ã³ã³ããã¼ã©ã¼ãªã©)ãã³ã³ããã¼ã«ãã¬ã¼ã³å¤ã§å®è¡ãããå¿
è¦ãããå ´åãããã¾ãããã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼èªä½ã¯ã³ã³ããã¼ã«ãã¬ã¼ã³ã«ãããã¤ããã¹ãã§ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãã³ã³ããã¼ã«ãã¬ã¼ã³ä¸ã§å®è¡ããããã«ãnodeSelectorãaffinityã¹ã¿ã³ã¶ã使ç¨ãã¦ã¹ã±ã¸ã¥ã¼ãªã³ã°ãå¶å¾¡ãã¦ãã ãããããã«ãããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãä¿è·ãããé åã§å®è¡ã§ããããã«ãªãã¾ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã¯Kubernetesã¨ç©çã¤ã³ãã©ã¹ãã©ã¯ãã£ã¨ã®éã®æ¥ç¶ãæ
ããã¯ã©ã¹ã¿ã¼ã¸ã®ãã¼ãã®è¿½å ã»åé¤ã«ä¸å¯æ¬ ã§ããããããã³ã³ããã¼ã«ãã¬ã¼ã³ä¸ã§å®è¡ãããã¨ã§ãä»ã®ã³ã¢ã®ã¯ã©ã¹ã¿ã¼ã³ã³ããã¼ã©ã¼ã¨åçã®åªå
度ã§å®è¡ãããéç¹æ¨©ã¦ã¼ã¶ã¼ã®ã¯ã¼ã¯ãã¼ãã¨ã¯åé¢ããããã¨ã確ä¿ããã¾ãã
<ol>
<li>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãåä¸ã®ãã¹ãä¸ã§å®è¡ãããªãããã«ããããã®anti-affinityã¹ã¿ã³ã¶ããåä¸ãã¼ãã®é害ã«ãã£ã¦ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã®ããã©ã¼ãã³ã¹ãä½ä¸ããã®ãé²ãããã§éå¸¸ã«æç¨ã§ãããã¨ã¯æ³¨ç®ã«å¤ãã¾ãã</li>
</ol>
</li>
<li>éç¨ãå¯è½ã¨ãªãããã«ãé©åãªTolerationãè¨å®ãã¦ãã ãããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã³ã³ããã®ãããã§ã¹ãã«ã¯ãé©åãªãã¼ãã«ã¹ã±ã¸ã¥ã¼ãªã³ã°ããããããã¾ããã¼ããåæåä¸ã§ãã£ã¦ãå®è¡ã§ããããã«ããããã®Tolerationãè¨è¿°ããå¿
è¦ãããã¾ããããã¯ãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã<code>node.cloudprovider.kubernetes.io/uninitialized</code> Taintã許容ãã¹ãã§ãããã¨ãæå³ãã¾ããã¾ããã³ã³ããã¼ã«ãã¬ã¼ã³ã«é¢é£ä»ããããTaint(ãã¨ãã°<code>node-role.kubernetes.io/control-plane</code>ã<code>node-role.kubernetes.io/master</code>)ã許容ãã¹ãã§ããããã«ããã¼ããã¾ã æ£å¸¸æ§ç£è¦ã®å©ç¨ãã§ããªãç¶æ
ã§ãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãå®è¡ã§ããããã<code>node.kubernetes.io/not-ready</code> Taintã許容ãããã¨ãæç¨ã§ãã</li>
</ol>
<p>cloud-controller-managerãã管ç対象ã®ã¯ã©ã¹ã¿ã¼ä¸ã§ã¯ãªããå¥ã®ã¯ã©ã¹ã¿ã¼(ãã¨ãã°ããã¹ãåã³ã³ããã¼ã«ãã¬ã¼ã³ãç¨ããæ§æ)ã§å®è¡ããå ´åããã®éç¨ã¯cloud-controller-managerãå®è¡ãã¦ããã¯ã©ã¹ã¿ã¼ã®ç°å¢ã«ä¾åãããããããå³ããå¶ç´ãåãããã¨ã«ãªãã¾ãã
èªå·±ç®¡çåã¯ã©ã¹ã¿ã¼ä¸ã§ã®éç¨ã«é¢ããæ¨å¥¨äºé
ã¯ãç«¶åã®ç¨®é¡ããããã¯ã¼ã¯å¶ç´ãç°ãªããããé©åã§ãªãå ´åãããã¾ãã
ãã®ãããªã·ããªãªã«ããã¦ã¯ããå©ç¨ã®ãããã¸ã¼ã«å¿ããã¢ã¼ããã¯ãã£ã¨è¦ä»¶ã確èªãã¦ãã ããã</p>
<h3 id="ä¾">ä¾</h3>
<p>以ä¸ã¯ãä¸è¨ã®ã¬ã¤ãã³ã¹ãåæ ããKubernetesã®Deploymentã®ä¾ã§ãã
ããã¯ããã¾ã§ãã¢ã³ã¹ãã¬ã¼ã·ã§ã³ç¨ã®ãã®ã§ãããå®éç¨ã§ä½¿ç¨ããå ´åã¯å¿
ãã¯ã©ã¦ããããã¤ãã¼ã®ããã¥ã¡ã³ããåç
§ãã¦ãã ããã</p>
<pre tabindex="0"><code>apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: cloud-controller-manager
name: cloud-controller-manager
namespace: kube-system
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: cloud-controller-manager
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/name: cloud-controller-manager
annotations:
kubernetes.io/description: Cloud controller manager for my infrastructure
spec:
containers: # ã³ã³ããã®è©³ç´°ã¯ä½¿ç¨ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã«ä¾åãã¾ã
- name: cloud-controller-manager
command:
- /bin/my-infrastructure-cloud-controller-manager
- --leader-elect=true
- -v=1
image: registry/my-infrastructure-cloud-controller-manager@latest
resources:
requests:
cpu: 200m
memory: 50Mi
hostNetwork: true # ãããã®Podã¯ã³ã³ããã¼ã«ãã¬ã¼ã³ã®ä¸é¨ã§ã
nodeSelector:
node-role.kubernetes.io/control-plane: ""
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: "kubernetes.io/hostname"
labelSelector:
matchLabels:
app.kubernetes.io/name: cloud-controller-manager
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 120
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 120
- effect: NoSchedule
key: node.cloudprovider.kubernetes.io/uninitialized
operator: Exists
- effect: NoSchedule
key: node.kubernetes.io/not-ready
operator: Exists
</code></pre><p>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®ãããã¤æ¹æ³ã決å®ããéã«ã¯ãã¯ã©ã¹ã¿ã¼ã®è¦æ¨¡ããªã½ã¼ã¹ã«å¿ããPodã®ãªã¼ãã¹ã±ã¼ãªã³ã°ã¯æ¨å¥¨ãããªããã¨ã«æ³¨æãã¦ãã ããã
ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®ã¬ããªã«ãè¤æ°å®è¡ãããã¨ã¯ãé«å¯ç¨æ§ãåé·æ§ã確ä¿ããä¸ã§æå¹ãªææ³ã§ãããããã©ã¼ãã³ã¹ã®åä¸ã«ã¯ã¤ãªããã¾ããã
ä¸è¬ã«ãä»»æã®æç¹ã§ã¯ã©ã¹ã¿ã¼ã®æ´åæ§ãä¿ã¤å¦çãè¡ãã®ã¯ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®ã¤ã³ã¹ã¿ã³ã¹ã®ãã¡1ã¤ã ãã§ãã</p>
- SIG Architecture: Enhancementsã®åãçµã¿ã®ç´¹ä»https://kubernetes.io/ja/blog/2025/01/21/sig-architecture-enhancements/Tue, 21 Jan 2025 00:00:00 +0000https://kubernetes.io/ja/blog/2025/01/21/sig-architecture-enhancements/
<p><em>ããã¯ãSIG Architecture Spotlightã·ãªã¼ãºã®ç¬¬4åç®ã®ã¤ã³ã¿ãã¥ã¼ã§ãããä»å¾ããã¾ãã¾ãªãµãããã¸ã§ã¯ããåãä¸ããäºå®ã§ãã
ä»åã¯ã<a href="https://github.com/kubernetes/community/blob/master/sig-architecture/README.md#enhancements">SIG Architecture:
Enhancements</a>ãç¹éãã¾ãã</em></p>
<p>ãã®SIG Architecture Spotlightã§ã¯ãEnhancementsãµãããã¸ã§ã¯ãã®ãªã¼ãã§ãã<a href="https://github.com/kikisdeliveryservice">Kirsten
Garrison</a>ããã«ã話ã伺ãã¾ããã</p>
<h2 id="enhancementsãµãããã¸ã§ã¯ã">Enhancementsãµãããã¸ã§ã¯ã</h2>
<p><strong>Frederico(FSM): KirstenãããEnhancementsãµãããã¸ã§ã¯ãã«ã¤ãã¦ã話ãã§ããæ©ä¼ãããã ããã¨ã¦ãããããæãã¾ãã
ã¾ãã¯ç°¡åã«èªå·±ç´¹ä»ã¨ãèªèº«ã®å½¹å²ã«ã¤ãã¦æãã¦ãã ããã</strong></p>
<p><strong>Kirsten Garrison(KG)</strong>: ç§ã¯SIG-Architectureã®Enhancementsãµãããã¸ã§ã¯ãã®ãªã¼ããåãã¦ãããç¾å¨ã¯Googleã«å¤åãã¦ãã¾ãã
æåã¯<a href="https://github.com/carolynvs">Carolyn Van Slyck</a>ããã®å©ããåããªãããservice-catalogããã¸ã§ã¯ãã¸ã®ã³ã³ããªãã¥ã¼ããéãã¦é¢ããå§ãã¾ããã
ãã®å¾ã<a href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.17/release_team.md">ãªãªã¼ã¹ãã¼ã ã«åå ã</a>ãæçµçã«Enhancementsã®ãªã¼ãããã³Release Leadã®è£ä½ãåãããã¨ã«ãªãã¾ããã
ãªãªã¼ã¹ãã¼ã ã§ã¯ãç§ã®ãã¼ã ã®çµé¨ã«åºã¥ããåSIGãEnhancementsãã¼ã ã«ã¨ã£ã¦ããè¯ãããã»ã¹ã¨ãªããã(ãªããã¤ã³ããã»ã¹ãªã©ã®)ããã¤ãã®ã¢ã¤ãã¢ã«åãçµã¿ã¾ããã
æçµçã«ã¯ããµãããã¸ã§ã¯ãã®ãã¼ãã£ã³ã°ã«åå ãããã®ä½æ¥ã«ãè²¢ç®ããããã«ãªãã¾ããã</p>
<p><strong>FSM: Enhancementsãµãããã¸ã§ã¯ãã«ã¤ãã¦è¨åããã¦ãã¾ãããããã®ä¸»ãªç®çãé¢ä¸ããé åã«ã¤ãã¦èª¬æãã¦ããã ãã¾ããï¼</strong></p>
<p><strong>KG</strong>: <a href="https://github.com/kubernetes/community/blob/master/sig-architecture/README.md#enhancements">Enhancementsãµãããã¸ã§ã¯ã</a>ã¯ã主ã«<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md">Kubernetes Enhancement Proposal</a>(ç¥ã㦠<em>KEP</em>)ãæ±ã£ã¦ãã¾ãã
KEPã¯ãKubernetesããã¸ã§ã¯ãã«ããããã¹ã¦ã®æ°æ©è½ããã³éè¦ãªå¤æ´ã«å¿
è¦ã¨ãªããè¨è¨ãããã¥ã¡ã³ãã§ãã</p>
<h2 id="kepã¨ãã®å½±é¿">KEPã¨ãã®å½±é¿</h2>
<p><strong>FSM: KEPããã»ã¹ã®æ¹åã¯ããã¤ã¦ãã(ããã¦ç¾å¨ã)ãSIG Architectureãæ·±ãé¢ä¸ãã¦ããåãçµã¿ã®ä¸ã¤ã§ãã
ãã®ããã»ã¹ã«ã¤ãã¦ç¥ããªãæ¹ã®ããã«ã説æãã¦ããã ãã¾ããï¼</strong></p>
<p><strong>KG</strong>: <a href="https://kubernetes.io/releases/release/#the-release-cycle">åãªãªã¼ã¹</a>ã«ããã¦ãåSIGã¯ãã®ãªãªã¼ã¹ã«å«ãããã¨èãã¦ããæ©è½ããªãªã¼ã¹ãã¼ã ã«å
±æãã¾ãã
å
ã»ã©è¿°ã¹ãã¨ããããããã®å¤æ´ã®åæã¨ãªãã®ãKEPã§ãã
KEPã¯æ¨æºåãããè¨è¨ããã¥ã¡ã³ãã§ããããã¹ã¦ã®ä½æè
ããªãªã¼ã¹ãµã¤ã¯ã«ã®æåã®æ°é±éã§è¨å
¥ããæ¿èªãããªããã°ãªãã¾ããã
ã»ã¨ãã©ã®æ©è½ã¯ãalphaãbetaãæçµçã«ã¯GAã¨ãã<a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/#feature-stages">3ã¤ã®ãã§ã¼ãºãçµã¦é²è¡ãã¾ã</a>ã
ãã®ãããæ©è½ãæ¿èªããã¨ãããã¨ã¯ãSIGã«ã¨ã£ã¦å¤§ããªè²¬ä»»ãä¼´ãæ±ºå®ã¨ãªãã¾ãã</p>
<p>KEPã¯ãããæ©è½ã«é¢ããå¯ä¸ã®ä¿¡é ¼ã§ããæ
å ±æºã¨ãã¦ã®å½¹å²ãããã¾ãã
<a href="https://github.com/kubernetes/enhancements/blob/master/keps/NNNN-kep-template/README.md">KEPãã³ãã¬ã¼ã</a>ã«ã¯ãæ©è½ãã©ã®æ®µéã«ãããã«å¿ãã¦ç°ãªãè¦ä»¶ãããã¾ãããä¸è¬çã«ã¯è¨è¨ãå½±é¿ã«ã¤ãã¦ã®è©³ç´°ãªè°è«ãå®å®æ§ãããã©ã¼ãã³ã¹ã«é¢ããææç©ã®æç¤ºãæ±ãããã¾ãã
KEPãæ¿èªãããã¾ã§ã«ã¯ã使è
ãSIGã®ã¬ãã¥ã¢ã¼ãAPIã¬ãã¥ã¼ãã¼ã ãProduction Readiness Reviewãã¼ã <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>ã¨ã®éã§ããªãã®å復çãªããåããå¿
è¦ã¨ãªãã¾ãã
åã¬ãã¥ã¢ã¼ãã¼ã ã¯ãKubernetesãªãªã¼ã¹ãå®å®ããããã©ã¼ãã³ã¹ã«åªãããã®ã¨ãªãããããã®ææ¡ãèªåãã¡ã®åºæºãæºããã¦ãããã確èªãã¾ãã
ãã¹ã¦ã®æ¿èªãå¾ããã¦åãã¦ä½æè
ã¯æ¬¡ã«é²ããã¨ãã§ããKubernetesã®ã³ã¼ããã¼ã¹ã«èªèº«ã®æ©è½ããã¼ã¸ãããã¨ãã§ãã¾ãã</p>
<p><strong>FSM: ãªãã»ã©ãããªãå¤ãã®æ çµã¿ã追å ãããã®ã§ããã
æ¯ãè¿ã£ã¦ã¿ã¦ããã®ã¢ããã¼ãã«ããæãéè¦ãªæ¹åç¹ã¯ä½ã ã£ãã¨æãã¾ããï¼</strong></p>
<p><strong>KG</strong>: æ¦ãã¦ãæã大ããªå½±é¿ãä¸ããæ¹åç¹ã¯ãKEPã®æ¬æ¥ã®æå³ã«ç¦ç¹ãå½ã¦ããã¨ã ã¨èãã¦ãã¾ãã
KEPã¯åã«è¨è¨ãè¨é²ããããã«åå¨ããã®ã§ã¯ãªãã夿´ã®ãã¾ãã¾ãªå´é¢ã«ã¤ãã¦è°è«ããåæã«è³ãããã®æ§é åãããææ®µãæä¾ãããã®ã§ãã
KEPããã»ã¹ã®ä¸å¿ã«ããã®ã¯ãã³ãã¥ãã±ã¼ã·ã§ã³ã¨é
æ
®ã§ãã</p>
<p>ãã®ç®çã®ããã«ãããã¤ãã®éè¦ãªå¤æ´ã¯ããã詳細ã§ã¢ã¯ã»ã¹ããããKEPãã³ãã¬ã¼ããä¸å¿ã«è¡ããã¦ãã¾ãã
ç¾å¨ã®<a href="https://github.com/kubernetes/enhancements">k/enhancements</a>ãªãã¸ããªã®å½¢ã«ãªãã¾ã§ã«ã¯ãå¤ãã®æéãããã¦ããªãã®ä½æ¥ãè¡ããã¦ãã¾ããã
å
·ä½çã«ã¯ãSIGãã¨ã«æ´çããããã£ã¬ã¯ããªæ§æã¨ãç¾è¡ã®KEPãã³ãã¬ã¼ã(Proposal/Motivation/Design Detailsã®ãµãã»ã¯ã·ã§ã³ãå«ã)ã®æ çµã¿ãæ´ãããã¾ããã
ä»ã§ã¯ããã®åºæ¬çãªæ§é ã¯å½ããåã®ããã«æããããããããã¾ããããå®éã«ã¯ãã®ããã»ã¹ã®åºç¤ãæ´ããããã«ãå¤ãã®äººã
ãé·å¹´ã«ããã£ã¦åãçµãã§ããææãåæ ãããã®ã§ãã</p>
<p>Kubernetesãæçããã«ã¤ãã¦ãåã«1ã¤ã®æ©è½ããã¼ã¸ããã¨ããæçµçãªç®æ¨ã ãã§ãªããå®å®æ§ãããã©ã¼ãã³ã¹ãã¦ã¼ã¶ã¼ã®æå¾
ã®è¨å®ã¨ããã«å¿ãããã¨ãªã©ãããã«å¤ãã®è¦ç´ ãèæ
®ããå¿
è¦ãåºã¦ãã¾ããã
ããããç¹ãæèããä¸ã§ããã³ãã¬ã¼ãããã詳細ãªãã®ã¸ã¨çºå±ãã¦ãã¾ããã
Production Readiness Reviewã®è¿½å ãæ¹åããããã¹ãè¦ä»¶(KEPã®ã©ã¤ããµã¤ã¯ã«ã®æ®µéãã¨ã«ç°ãªãã¾ã)ãã大ããªå¤æ´ç¹ã§ããã</p>
<h2 id="ç¾å¨ã®æ³¨ååé">ç¾å¨ã®æ³¨ååé</h2>
<p><strong>FSM: æçã®è©±ã¨ããã°ã<a href="https://kubernetes.io/ja/blog/2024/08/13/kubernetes-v1-31-release/">æè¿Kubernetes v1.31ããªãªã¼ã¹ã</a>ãv1.32ã®ä½æ¥ã<a href="https://github.com/fsmunoz/sig-release/tree/release-1.32/releases/release-1.32">ãã§ã«å§ã¾ã£ã¦ãã¾ã</a>ãEnhancementsãµãããã¸ã§ã¯ããç¾å¨åãçµãã§ããå
容ã®ä¸ã§ãä»å¾ã®é²ãæ¹ã«å½±é¿ãä¸ããå¯è½æ§ããããã®ã¯ããã¾ããï¼</strong></p>
<p><strong>KG</strong>: ç¾å¨ã2ã¤ã®åãçµã¿ãé²ãã¦ãã¾ãã</p>
<ol>
<li><em>ããã»ã¹ç¨KEPãã³ãã¬ã¼ãã®ä½æ</em>: æ©è½æåã§ã¯ãªãããã»ã¹æåã®éè¦ãªå¤æ´ã«å¯¾ãã¦ãKEPããã»ã¹ãæ´»ç¨ãããã¨èãã人ããã¾ãã
ç§ãã¡ã¯ãã®ãããªåãçµã¿ãæ¯æ´ãããã¨èãã¦ãã¾ãã
ã¨ããã®ãã夿´ãè¨é²ã¨ãã¦æ®ããã¨ã¯éè¦ã§ããããããå®ç¾ããããã®ããåªãããã¼ã«ãæä¾ãããã¨ã§ããããªãè°è«ã¨éææ§ã®åä¸ãä¿ãããããã§ãã</li>
<li><em>KEPã®ãã¼ã¸ã§ã³ç®¡ç</em>: ãã³ãã¬ã¼ãã®å¤æ´ã¯å¯è½ãªéãéç ´å£çã«è¡ããã¨ãç®æãã¦ãã¾ãããKEPãã³ãã¬ã¼ãã«ãã¼ã¸ã§ã³ãè¨ãããã¼ã¸ã§ã³ã«å¯¾å¿ããããªã·ã¼ãæ´åãããã¨ã§ã夿´ãããé©åã«è¿½è·¡ã»å
±æã§ããããã«ãªãã¨èãã¦ãã¾ãã</li>
</ol>
<p>ãããã®æ©è½ã¯ãããããæ£ããè¨è¨ããå®å
¨ã«å±éããã¾ã§ã«æéãè¦ãã¾ãã(ã¾ãã«KEPã®æ©è½ã¨åæ§ã§ã)ãã©ã¡ããã³ãã¥ããã£å
¨ä½ã«ã¨ã£ã¦æçãªæ¹åã«ã¤ãªããã¨ä¿¡ãã¦ãã¾ãã</p>
<p><strong>FSM: æ¹åç¹ã«ã¤ãã¦è¨åããã¾ããããæè¿ã®ãªãªã¼ã¹ã§Enhancementã®ãã©ããã³ã°ç¨ã«ããã¸ã§ã¯ããã¼ããå°å
¥ãããé常ã«å¹æçã§ããªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ãããæºå ´ä¸è´ã§ç§°è³ããã¦ããã®ãæãåºãã¾ãã
ããã¯ããµãããã¸ã§ã¯ãã¨ãã¦ç¹ã«æ³¨åãã¦ããåéã ã£ãã®ã§ããããï¼</strong></p>
<p><strong>KG</strong>: ãã®ãµãããã¸ã§ã¯ãã¯ããªãªã¼ã¹ãã¼ã ã®Enhancementãã¼ã ã«ããã¹ãã¬ããã·ã¼ãããããã¸ã§ã¯ããã¼ãã¸ã®ç§»è¡ãæ¯æ´ãã¾ããã
Enhancementã®åéã¨ãã©ããã³ã°ã¯ã常ã«éç¨ä¸ã®èª²é¡ã§ããã
ç§ããªãªã¼ã¹ãã¼ã ã«æå±ãã¦ããé ã«ã¯ãSIGã®ãªã¼ãããªãªã¼ã¹ãã©ããã³ã°ã®å¯¾è±¡ã¨ããKEPãããªããã¤ã³ãããæ¹å¼ã¸ã®ç§»è¡ãæ¯æ´ãã¾ããã
ããã«ãããKEPã«å¯¾ãã¦éè¦ãªä½æ¥ãéå§ããåã«ã使è
ã¨SIGã®éã§ããè¯ãã³ãã¥ãã±ã¼ã·ã§ã³ãåããããã«ãªããEnhancementsãã¼ã ã®æéã軽æ¸ããã¾ããã
ãã®å¤æ´ã§ã¯ãã³ãã¥ããã£ã«ä¸åº¦ã«å¤ãã®å¤æ´ãå°å
¥ãããã¨ãé¿ãããããæ¢åã®ãã¼ã«ãæ´»ç¨ãã¾ããã
ãã®å¾ããªãªã¼ã¹ãã¼ã ããEnhancementã®åéããã»ã¹ãããã«æ¹åãããããGitHubã®ããã¸ã§ã¯ããã¼ããæ´»ç¨ããã¨ããã¢ã¤ãã¢ããã®ãµãããã¸ã§ã¯ãã«ææ¡ãã¾ããã
ããã¯ãè¤éãªã¹ãã¬ããã·ã¼ãã®ä½¿ç¨ãããã<a href="https://github.com/kubernetes/enhancements">k/enhancement</a>ã®Issueã«ä»ä¸ããããªãã¸ããªãã¤ãã£ããªã©ãã«ã¨ããã¸ã§ã¯ããã¼ããç¨ããæ¹åã¸ã®è»¢æã§ããã</p>
<p><strong>FSM: ããã¯ãééããªãã¯ã¼ã¯ããã¼ã®ç°¡ç´ åã«å¤§ããªå½±é¿ãä¸ãããã¨ã§ããããâ¦ã</strong></p>
<p><strong>KG</strong>: æ©æ¦ã®åå ãåãé¤ããæç¢ºãªã³ãã¥ãã±ã¼ã·ã§ã³ãä¿é²ãããã¨ã¯ãEnhancementsãµãããã¸ã§ã¯ãã«ã¨ã£ã¦é常ã«éè¦ã§ãã
åæã«ãã³ãã¥ããã£å
¨ä½ã«å½±é¿ãåã¼ãæææ±ºå®ã«ã¤ãã¦ã¯æ
éã«æ¤è¨ãããã¨ãéè¦ã§ãã
夿´ã«ãã£ã¦å©ç¹ãå¾ããã䏿¹ã§ãå±éæã«å¾éãæ··ä¹±ãä¸åå¼ãèµ·ãããªãããã«ããã©ã³ã¹ã®åãã対å¿ã¨ãªããã¨ãç§ãã¡ã¯ç¢ºå®ã«ãããã¨èãã¦ãã¾ãã
ç§ãã¡ã¯ãã¢ã¤ãã¢åºãããããã¸ã§ã¯ããã¼ãã¸ã®å®éã®ç§»è¡ä½æ¥ã«è³ãã¾ã§ããªãªã¼ã¹ãã¼ã ãæ¯æ´ãã¾ããã
ããã¯å¤§æåãåããKEPããã»ã¹ã«é¢ãããã¹ã¦ã®äººã
ãå©ãããããªé«ãå½±é¿ãæã¤å¤æ´ããã¼ã ãå®ç¾ããã®ãè¦ãã®ã¯ãã¨ã¦ãåºæ¿çãªãã¨ã§ããï¼</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p><strong>FSM: èå³ãæã£ã¦åå ãæ¤è¨ãã¦ããèªè
ã«åãã¦ããã®ãµãããã¸ã§ã¯ãã«é¢ããããã«å¿
è¦ãªã¹ãã«ã«ã¤ãã¦æãã¦ããã ãã¾ããï¼</strong></p>
<p><strong>KG</strong>: KEPã«é¢ããç¥èãããã¨å½¹ç«ã¡ã¾ãã
ããã¯å®éã®çµé¨ããå¾ããã®ã§ãã£ã¦ããkubernetes/enhancementsãªãã¸ããªãæéãããã¦èªã¿è¾¼ãã çµæã§ãã£ã¦ãæ§ãã¾ããã
èå³ãããæ¹ã¯èª°ã§ãæè¿ã§ããããããä¸ç·ã«é²ãã¦ããã¾ãããã</p>
<p><strong>FSM: ç´ æ´ãããã§ãï¼ãæéã¨è²´éãªãè©±ãæ¬å½ã«ãããã¨ããããã¾ããã
æå¾ã«èªè
ã®çããã«ä¼ããããã¨ã¯ããã¾ããï¼</strong></p>
<p><strong>KG</strong>: Enhancementsããã»ã¹ã¯ãKubernetesã«ãããæãéè¦ãªè¦ç´ ã®ä¸ã¤ã§ããããããæåãããããã«ã¯ãããã¸ã§ã¯ãå
¨ä½ã«ãããå¤ãã®äººã
ããã¼ã ã«ããè¨å¤§ãªèª¿æ´ã¨ååãå¿
è¦ã§ãã
ããã¸ã§ã¯ããããè¯ããã®ã«ããããã«ãçãããç¶ç¶çã«åªåããå°½åãã¦ãããã¨ã«å¿ããæè¬ããã¾ã大ãã«å±ã¾ããã¦ãã¾ãã
ãã®ã³ãã¥ããã£ã¯æ¬å½ã«ç´ æ´ããããã®ã§ãã</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>詳細ã«ã¤ãã¦ã¯ããã®ã·ãªã¼ãºã®<a href="https://kubernetes.io/blog/2023/11/02/sig-architecture-production-readiness-spotlight-2023/">Production Readiness Review spotlight
interview</a>ã確èªãã¦ã¿ã¦ãã ããã <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
- Kubernetes v1.32: Penelopehttps://kubernetes.io/ja/blog/2024/12/11/kubernetes-v1-32-release/Wed, 11 Dec 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/12/11/kubernetes-v1-32-release/
<p><strong>ç·¨éè
:</strong> Matteo Bianchi, Edith Puclla, William Rizzo, Ryota Sawada, Rashan Smith</p>
<p>Kubernetes v1.32: Penelopeã®ãªãªã¼ã¹ãçºè¡¨ãã¾ãï¼</p>
<p>ããã¾ã§ã®ãªãªã¼ã¹ã¨åæ§ã«ãKubernetes v1.32ã§ã¯æ°ããªGAããã¼ã¿ãã¢ã«ãã¡ã®æ©è½ãå°å
¥ããã¦ãã¾ãã
ç¶ç¶çã«é«å質ãªãªãªã¼ã¹ãæä¾ã§ãã¦ãããã¨ã¯ãç§ãã¡ã®éçºãµã¤ã¯ã«ã®å¼·ãã¨ãæ´»çºãªã³ãã¥ããã£ã®ãµãã¼ãã示ããã®ã§ãã
ä»åã®ãªãªã¼ã¹ã§ã¯ã44ã®æ©è½å¼·åãè¡ããã¾ããã
ãã®ãã¡ã13ã®æ©è½ãGAã«ææ ¼ãã12ã®æ©è½ããã¼ã¿ã«ç§»è¡ãã19ã®æ©è½ãã¢ã«ãã¡ã¨ãã¦å°å
¥ããã¦ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ã®ãã¼ãã¨ãã´">ãªãªã¼ã¹ã®ãã¼ãã¨ãã´</h2>
<figure class="release-logo ">
<img src="https://kubernetes.io/ja/blog/2024/12/11/kubernetes-v1-32-release/k8s-1.32.png"
alt="Kubernetes v1.32ã®ãã´: ãªãã¥ãã»ã¤ã¢ã®ãã¼ãããã¼ãèµè¼ªãããã¦ç´«è²ã®å¹¾ä½å¦çãªèæ¯"/>
</figure>
<p>Kubernetes v1.32ã®ãªãªã¼ã¹ãã¼ãã¯"Penelope"ã§ãã</p>
<p>Kubernetesãå¤ä»£ã®ãªã·ã£èªã§ããã¤ããããã¾ãã¯ãèµåãããæå³ãããã¨ããå§ãããã®ãªãªã¼ã¹ã§ã¯Kubernetesã®10å¹´éã¨ãã®ææãæ¯ãè¿ãã¾ãã
åãªãªã¼ã¹ãµã¤ã¯ã«ã¯ä¸ã¤ã®æ
è·¯ã§ãããããªãã¥ãã»ã¤ã¢ãã®ãã¼ãããã¼ã10å¹´ã®éãæ¼ã«ç¹ã£ããã®ãå¤ã«ãªãã¨è§£ãã¦ãã£ãããã«ãåãªãªã¼ã¹ã§ã¯æ°æ©è½ã®è¿½å ã¨æ¢åæ©è½ã®åé¤ãè¡ãã¾ãã
ãã ãããã§ã¯ãKubernetesãç¶ç¶çã«æ¹åããã¨ããããæç¢ºãªç®çãæã£ã¦è¡ããã¦ãã¾ãã
v1.32ã¯Kubernetesã10å¨å¹´ãè¿ããå¹´ã®æå¾ã®ãªãªã¼ã¹ã¨ãªããã¨ãããã¯ã©ã¦ããã¤ãã£ãã®æµ·ã®è©¦ç·´ã課é¡ãèªæµ·ãã¦ããã°ãã¼ãã«ãªKubernetesã¯ã«ã¼ã®ä¸å¡ã¨ãã¦è²¢ç®ãã¦ãã ãã£ãå
¨ã¦ã®æ¹ã
ã«æ¬æã表ãããã¨æãã¾ãã
ãããããå
±ã«Kubernetesã®æªæ¥ãç´¡ãã§ããããã¨ãé¡ã£ã¦ãã¾ãã</p>
<h2 id="æè¿ã®ä¸»è¦ãªæ©è½ã®æ´æ°">æè¿ã®ä¸»è¦ãªæ©è½ã®æ´æ°</h2>
<h3 id="draã®æ©è½å¼·åã«é¢ããæ³¨è¨">DRAã®æ©è½å¼·åã«é¢ããæ³¨è¨</h3>
<p>ä»åã®ãªãªã¼ã¹ã§ã¯ãååã®ãªãªã¼ã¹ã¨åæ§ã«ãKubernetesããã¸ã§ã¯ãã¯Dynamic Resource Allocation(DRA)ã«å¯¾ãã¦å¤ãã®æ©è½å¼·åãææ¡ãç¶ãã¦ãã¾ãã
DRAã¯Kubernetesã®ãªã½ã¼ã¹ç®¡çã·ã¹ãã ã®ä¸»è¦ãªã³ã³ãã¼ãã³ãã§ãã
ãããã®æ©è½å¼·åã¯ãGPUãFPGAããããã¯ã¼ã¯ã¢ããã¿ã¼ãªã©ã®ç¹æ®ãªãã¼ãã¦ã§ã¢ãå¿
è¦ã¨ããã¯ã¼ã¯ãã¼ãã«å¯¾ãããªã½ã¼ã¹å²ãå½ã¦ã®æè»æ§ã¨å¹çæ§ãåä¸ããããã¨ãç®çã¨ãã¦ãã¾ãã</p>
<p>ãããã®æ©è½ã¯ãæ©æ¢°å¦ç¿ã髿§è½ã³ã³ãã¥ã¼ãã£ã³ã°ã¢ããªã±ã¼ã·ã§ã³ãªã©ã®ã¦ã¼ã¹ã±ã¼ã¹ã§ç¹ã«æç¨ã§ããDRAã®Structured parameterãµãã¼ããå¯è½ã«ããã³ã¢é¨åã¯<a href="#%E3%83%99%E3%83%BC%E3%82%BF%E3%81%AB%E6%98%87%E6%A0%BC%E3%81%97%E3%81%9F%E6%A9%9F%E8%83%BD%E3%81%AE%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88">ãã¼ã¿ã«ææ ¼ãã¾ãã</a>ã</p>
<h3 id="ãã¼ãã¨ãµã¤ãã«ã¼ã³ã³ããã®æ´æ°ã«ãããæ¯ãèãã®æ¹å">ãã¼ãã¨ãµã¤ãã«ã¼ã³ã³ããã®æ´æ°ã«ãããæ¯ãèãã®æ¹å</h3>
<p><a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã§ã¯ãKEPã®ç¯å²ãè¶
ãã¦ä»¥ä¸ã®ãããªæ¹åãè¡ããã¦ãã¾ã:</p>
<ol>
<li>
<p>kubeletã®ãã«ã¹ãã§ãã¯ã失æããéã«kubeletãåèµ·åããããã«ãsystemdã®watchdogæ©è½ã使ç¨ãããããã«ãªãã¾ããã
ã¾ããä¸å®æéå
ã®æå¤§åèµ·ååæ°ãå¶éããã¾ãã
ããã«ããkubeletã®ä¿¡é ¼æ§ãåä¸ãã¾ãã
詳細ã«ã¤ãã¦ã¯Pull Requestã®<a href="https://github.com/kubernetes/kubernetes/pull/127566">#127566</a>ãã覧ãã ããã</p>
</li>
<li>
<p>ã¤ã¡ã¼ã¸ãã«ã®ããã¯ãªãã¨ã©ã¼ãçºçããå ´åãPodã®ã¹ãã¼ã¿ã¹ã«è¡¨ç¤ºãããã¡ãã»ã¼ã¸ãæ¹åãããããåããããããªããPodããã®ç¶æ
ã«ããçç±ã®è©³ç´°ã示ãããããã«ãªãã¾ããã
ã¤ã¡ã¼ã¸ãã«ã®ããã¯ãªããçºçããã¨ãã¨ã©ã¼ã¯Pod仿§ã®<code>status.containerStatuses[*].state.waiting.message</code>ãã£ã¼ã«ãã«è¿½å ããã<code>reason</code>ãã£ã¼ã«ãã«ã¯<code>ImagePullBackOff</code>ã®å¤ãè¨å®ããã¾ãã
ãã®å¤æ´ã«ãããããå¤ãã®ã³ã³ããã¹ããæä¾ãããåé¡ã®æ ¹æ¬åå ãç¹å®ããã®ã«å½¹ç«ã¡ã¾ãã
詳細ã«ã¤ãã¦ã¯ãPull Requestã®<a href="https://github.com/kubernetes/kubernetes/pull/127918">#127918</a>ãã覧ãã ããã</p>
</li>
<li>
<p>ãµã¤ãã«ã¼ã³ã³ããæ©è½ã¯ãv1.33ã§Stableã¸ã®ææ ¼ãç®æãã¦ãã¾ãã
æ®ãã®ä½æ¥é
ç®ã¨ã¦ã¼ã¶ã¼ããã®ãã£ã¼ãããã¯ã«ã¤ãã¦ã¯ãIssueã®<a href="https://github.com/kubernetes/enhancements/issues/753#issuecomment-2350136594">#753</a>ã®ã³ã¡ã³ããã覧ãã ããã</p>
</li>
</ol>
<h2 id="gaã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã">GAã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã</h2>
<p><em>ããã¯ãv1.32ã®ãªãªã¼ã¹ã«ä¼´ãGAã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="ã«ã¹ã¿ã ãªã½ã¼ã¹ã®ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼">ã«ã¹ã¿ã ãªã½ã¼ã¹ã®ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼</h3>
<p>ã«ã¹ã¿ã ãªã½ã¼ã¹ã®ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã«ãããéçºè
ã¯çµã¿è¾¼ã¿ã®Kubernetesãªãã¸ã§ã¯ãã§å©ç¨ã§ããæ©è½ã¨åæ§ã«ãã«ã¹ã¿ã ãªã½ã¼ã¹ã«ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã追å ã§ããããã«ãªãã¾ããã
ããã«ãããã«ã¹ã¿ã ãªã½ã¼ã¹ã®ããå¹ççã§æ£ç¢ºãªãã£ã«ã¿ãªã³ã°ãå¯è½ã«ãªããããè¯ãAPIè¨è¨ã®å®è·µãä¿é²ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-api-machinery">SIG API Machinery</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4358">KEP #4358</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="sizememorybackedvolumesã®ãµãã¼ã">SizeMemoryBackedVolumesã®ãµãã¼ã</h3>
<p>ãã®æ©è½ã«ãããPodã®ãªã½ã¼ã¹å¶éã«åºã¥ãã¦ã¡ã¢ãªããã¯ã¢ããããªã¥ã¼ã ãåçã«ãµã¤ãºè¨å®ã§ããããã«ãªããã¯ã¼ã¯ãã¼ãã®ç§»æ¤æ§ã¨ãã¼ãã®ãªã½ã¼ã¹ä½¿ç¨çã®å
¨ä½çãªåä¸ãå®ç¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/1967">KEP #1967</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="ãã¤ã³ãããããµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®æ¹å">ãã¤ã³ãããããµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®æ¹å</h3>
<p>ãµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®ã¯ã¬ã¼ã ã«ãã¼ãåãå«ãããã¨ã§ãèªå¯ã¨èªè¨¼(ValidatingAdmissionPolicy)ã®éç¨ã§ãã®æ
å ±ã使ç¨ã§ããããã«ãªãã¾ããã
ããã«ããã®æ¹åã«ãããµã¼ãã¹ã¢ã«ã¦ã³ãã®èªè¨¼æ
å ±ããã¼ãã®æ¨©éææ ¼ãã¹ã¨ãªããã¨ãé²ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4193">KEP #4193</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="æ§é åãããèªå¯è¨å®">æ§é åãããèªå¯è¨å®</h3>
<p>APIãµã¼ãã¼ã«è¤æ°ã®èªå¯æ©è½ãè¨å®ã§ããããã«ãªããwebhookã§ã®CELãããæ¡ä»¶ããµãã¼ããããã¨ã§ãæ§é åãããèªå¯ã®å¤æãå¯è½ã«ãªãã¾ããã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/3221">KEP #3221</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="statefulsetã«ãã£ã¦ä½æãããpvcã®èªååé¤">StatefulSetã«ãã£ã¦ä½æãããPVCã®èªååé¤</h3>
<p>StatefulSetã使ããPersistentVolumeClaim(PVC)ã¯ãä¸è¦ã«ãªãã¨èªåçã«åé¤ãããããã«ãªãã¾ããã
ããã¯StatefulSetã®æ´æ°ããã¼ãã®ã¡ã³ããã³ã¹æã«ããã¼ã¿ã確å®ã«ä¿æããã¾ã¾åé¤å¦çãè¡ãã¾ãã
ãã®æ©è½ã«ãããStatefulSetã®ã¹ãã¬ã¼ã¸ç®¡çã容æã«ãªããPVCãæ®ãããã¾ã¾ã«ãªããªã¹ã¯ãæ¸å°ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-apps">SIG Apps</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/1847">KEP #1847</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h2 id="ãã¼ã¿ã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã">ãã¼ã¿ã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã</h2>
<p><em>ããã¯ãv1.32ã®ãªãªã¼ã¹ã«ä¼´ããã¼ã¿ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="jobã®api管çã¡ã«ããºã ">Jobã®API管çã¡ã«ããºã </h3>
<p>Jobã®<code>managedBy</code>ãã£ã¼ã«ããv1.32ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ãã®æ©è½ã«ãããå¤é¨ã³ã³ããã¼ã©ã¼(<a href="https://kueue.sigs.k8s.io/">Kueue</a>ãªã©)ãJobã®åæã管çã§ããããã«ãªããé«åº¦ãªã¯ã¼ã¯ãã¼ã管çã·ã¹ãã ã¨ã®ããæè»ãªçµ±åãå¯è½ã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-apps">SIG Apps</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4368">KEP #4368</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="è¨å®ãããã¨ã³ããã¤ã³ãã®ã¿ã®å¿åèªè¨¼ã許å¯">è¨å®ãããã¨ã³ããã¤ã³ãã®ã¿ã®å¿åèªè¨¼ã許å¯</h3>
<p>ãã®æ©è½ã«ããã管çè
ã¯å¿åãªã¯ã¨ã¹ãã許å¯ããã¨ã³ããã¤ã³ããæå®ã§ããããã«ãªãã¾ããã
ä¾ãã°ã管çè
ã¯<code>/healthz</code>ã<code>/livez</code>ã<code>/readyz</code>ãªã©ã®ãã«ã¹ã¨ã³ããã¤ã³ãã¸ã®å¿åã¢ã¯ã»ã¹ã®ã¿ã許å¯ããã¦ã¼ã¶ã¼ãRBACã誤è¨å®ããå ´åã§ããä»ã®ã¯ã©ã¹ã¿ã¼ã¨ã³ããã¤ã³ãããªã½ã¼ã¹ã¸ã®å¿åã¢ã¯ã»ã¹ã確å®ã«é²æ¢ã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4633">KEP #4633</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="kube-schedulerã«ããããã©ã°ã¤ã³ãã¨ã®åã¹ã±ã¸ã¥ã¼ã«å¤ææ©è½ã®æ¹å">kube-schedulerã«ããããã©ã°ã¤ã³ãã¨ã®åã¹ã±ã¸ã¥ã¼ã«å¤ææ©è½ã®æ¹å</h3>
<p>ãã®æ©è½ã¯ããã©ã°ã¤ã³ãã¨ã®ã³ã¼ã«ããã¯é¢æ°(QueueingHint)ã«ãã£ã¦ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®å試è¡ã®å¤æãããå¹ççã«ãããã¨ã§ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã®ã¹ã«ã¼ããããåä¸ããã¾ãã
ãã¹ã¦ã®ãã©ã°ã¤ã³ãQueueingHintsãæã¤ããã«ãªãã¾ããã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-scheduling">SIG Scheduling</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4247">KEP #4247</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="ããªã¥ã¼ã æ¡å¼µã®å¤±æããã®ãªã«ããªã¼">ããªã¥ã¼ã æ¡å¼µã®å¤±æããã®ãªã«ããªã¼</h3>
<p>ãã®æ©è½ã«ãããã¦ã¼ã¶ã¼ã¯å°ãããµã¤ãºã§å試è¡ãããã¨ã§ããªã¥ã¼ã æ¡å¼µã®å¤±æããå復ã§ããããã«ãªãã¾ããã
ãã®æ¹åã«ãããããªã¥ã¼ã æ¡å¼µãããå
ç¢ã§ä¿¡é ¼æ§ã®é«ããã®ã¨ãªããããã»ã¹ä¸ã®ãã¼ã¿æå¤±ãç ´æã®ãªã¹ã¯ã軽æ¸ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/1790">KEP #1790</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="ããªã¥ã¼ã ã°ã«ã¼ãã¹ãããã·ã§ãã">ããªã¥ã¼ã ã°ã«ã¼ãã¹ãããã·ã§ãã</h3>
<p>ãã®æ©è½ã¯ãVolumeGroupSnapshot APIãå°å
¥ããã¦ã¼ã¶ã¼ãè¤æ°ã®ããªã¥ã¼ã ãåæã«ã¹ãããã·ã§ããåå¾ã§ããããã«ãããã¨ã§ãããªã¥ã¼ã éã®ãã¼ã¿æ´åæ§ã確ä¿ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/3476">KEP #3476</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="æ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ã">æ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ã</h3>
<p>Dynamic Resource Allocation(DRA)ã®ã³ã¢é¨åã§ããæ§é åãã©ã¡ã¼ã¿ã¼ã®ãµãã¼ãããã¼ã¿ã«ææ ¼ãã¾ããã
ããã«ãããkube-schedulerã¨Cluster Autoscalerã¯ãµã¼ããã¼ãã£ãã©ã¤ãã¼ãå¿
è¦ã¨ããã«ãç´æ¥ã¯ã¬ã¼ã ã®å²ãå½ã¦ãã·ãã¥ã¬ã¼ã·ã§ã³ã§ããããã«ãªãã¾ããã</p>
<p>ãããã®ã³ã³ãã¼ãã³ãã¯ãå®éã«å²ãå½ã¦ã確å®ãããã¨ãªããã¯ã©ã¹ã¿ã¼ã®ç¾å¨ã®ç¶æ
ã«åºã¥ãã¦ãªã½ã¼ã¹è¦æ±ãæºãããããã©ãããäºæ¸¬ã§ããããã«ãªãã¾ããã
ãµã¼ããã¼ãã£ãã©ã¤ãã¼ã«ããå²ãå½ã¦ã®æ¤è¨¼ããã¹ããä¸è¦ã«ãªã£ããã¨ã§ããã®æ©è½ã¯ãªã½ã¼ã¹åé
ã®è¨ç»ã¨æææ±ºå®ãæ¹åããã¹ã±ã¸ã¥ã¼ãªã³ã°ã¨ã¹ã±ã¼ãªã³ã°ã®ããã»ã¹ãããå¹ççã«ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ãWG Device Management(<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã<a href="https://github.com/kubernetes/community/tree/master/sig-scheduling">SIG Scheduling</a>ã<a href="https://github.com/kubernetes/community/tree/master/sig-autoscaling">SIG Autoscaling</a>ãå«ãæ©è½æ¨ªæãã¼ã )ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4381">KEP #4381</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="ã©ãã«ã¨ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã®èªå¯">ã©ãã«ã¨ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã®èªå¯</h3>
<p>èªå¯ã®å¤æã«ã©ãã«ã¨ãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã使ç¨ã§ããããã«ãªãã¾ããã
ãã¼ãã®èªå¯æ©è½ã¯ããããèªåçã«æ´»ç¨ãã¦ãã¼ããèªèº«ã®Podã®ã¿ããªã¹ããã¦ã©ããã§ããããã«å¶éãã¾ãã
Webhookã®èªå¯æ©è½ã¯ã使ç¨ãããã©ãã«ããã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã«åºã¥ãã¦ãªã¯ã¨ã¹ããå¶éããããã«æ´æ°ã§ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4601">KEP #4601</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h2 id="ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããæ°æ©è½">ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããæ°æ©è½</h2>
<p><em>ããã¯ãv1.32ã®ãªãªã¼ã¹ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããä¸»ãªæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã«ãããéåæããªã¨ã³ãã·ã§ã³">Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã«ãããéåæããªã¨ã³ãã·ã§ã³</h3>
<p>Kubernetesã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ãããªã¨ã³ãã·ã§ã³æä½ãéåæã§å¦çãããã¨ã§ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®ã¹ã«ã¼ããããåä¸ããããéåæããªã¨ã³ãã·ã§ã³æ©è½ãå¼·åããã¾ããã
ããªã¨ã³ãã·ã§ã³ã¯ãåªå
度ã®ä½ãPodãéé¿ããããã¨ã§ãåªå
度ã®é«ãPodã«å¿
è¦ãªãªã½ã¼ã¹ã確ä¿ãã¾ãã
ããããããã¾ã§ãã®ããã»ã¹ã§ã¯Podãåé¤ããããã®APIã³ã¼ã«ãªã©ã®éãæä½ãå¿
è¦ã§ãã¹ã±ã¸ã¥ã¼ã©ã¼ã®é度ä½ä¸ãå¼ãèµ·ããã¦ãã¾ããã
ãã®å¼·åã«ããããã®ãããªå¦çã並åã§å®è¡ãããããã«ãªããã¹ã±ã¸ã¥ã¼ã©ã¼ã¯ä»ã®Podã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ãé
å»¶ãªãç¶ç¶ã§ããããã«ãªãã¾ããã
ãã®æ¹åã¯ãç¹ã«Podã®å
¥ãæ¿ãããé »ç¹ãªã¯ã©ã¹ã¿ã¼ããã¹ã±ã¸ã¥ã¼ãªã³ã°ã®å¤±æãé »çºããã¯ã©ã¹ã¿ã¼ã§æå¹ã§ãããå¹ççã§å
ç¢ãªã¹ã±ã¸ã¥ã¼ãªã³ã°ããã»ã¹ãå®ç¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-scheduling">SIG Scheduling</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4832">KEP #4832</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="celå¼ã使ç¨ããmutating-admission-policy">CELå¼ã使ç¨ããMutating Admission Policy</h3>
<p>ãã®æ©è½ã¯ãCELã®ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹åã¨JSONãããæ¦ç¥ããServer Side Applyã®ãã¼ã¸ã¢ã«ã´ãªãºã ã¨çµã¿åããã¦æ´»ç¨ãã¾ãã
ããã«ãããããªã·ã¼å®ç¾©ãç°¡ç´ åããã夿´ã®ç«¶åã忏ãããã¢ãããã·ã§ã³å¶å¾¡ã®ããã©ã¼ãã³ã¹ãåä¸ããã¨åæã«ãKubernetesã«ãããããå
ç¢ã§æ¡å¼µå¯è½ãªããªã·ã¼ãã¬ã¼ã ã¯ã¼ã¯ã®åºç¤ãæ§ç¯ããã¾ãã</p>
<p>Kubernetesã®APIãµã¼ãã¼ã¯ãCommon Expression Language(CEL)ãã¼ã¹ã®Mutating Admission Policyããµãã¼ãããããã«ãªããMutating Admission Webhookã®è»½éã§å¹ççãªä»£æ¿ææ®µãæä¾ãã¾ãã
ãã®å¼·åã«ããã管çè
ã¯CELã使ç¨ãã¦ãã©ãã«ã®è¨å®ããã£ã¼ã«ãã®ããã©ã«ãå¤è¨å®ããµã¤ãã«ã¼ã®æ³¨å
¥ã¨ãã£ã夿´ããã·ã³ãã«ãªå®£è¨çãªå¼ã§å®ç¾©ã§ããããã«ãªãã¾ããã
ãã®ã¢ããã¼ãã«ãããéç¨ã®è¤éãã軽æ¸ãããwebhookã®å¿
è¦æ§ãæé¤ãããkube-apiserverã¨ç´æ¥çµ±åããããã¨ã§ãããé«éã§ä¿¡é ¼æ§ã®é«ãããã»ã¹å
夿´å¦çãå®ç¾ãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-api-machinery">SIG API Machinery</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/3962">KEP #3962</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="podã¬ãã«ã®ãªã½ã¼ã¹æå®">Podã¬ãã«ã®ãªã½ã¼ã¹æå®</h3>
<p>ãã®æ©è½å¼·åã«ãããPodã¬ãã«ã§ãªã½ã¼ã¹ã®è¦æ±ã¨å¶éãè¨å®ã§ããããã«ãªããPodå
ã®ãã¹ã¦ã®ã³ã³ãããåçã«ä½¿ç¨ã§ããå
±æãã¼ã«ã使ãããã¨ã§ãKubernetesã®ãªã½ã¼ã¹ç®¡çãç°¡ç´ åããã¾ãã
ããã¯ç¹ã«ããªã½ã¼ã¹éè¦ãå¤åçã¾ãã¯ãã¼ã¹ãçãªã³ã³ãããæã¤ã¯ã¼ã¯ãã¼ãã«ã¨ã£ã¦æç¨ã§ãéå°ãªãããã¸ã§ãã³ã°ãæå°éã«æããå
¨ä½çãªãªã½ã¼ã¹å¹çãåä¸ããã¾ãã</p>
<p>Kubernetesã¯Podã¬ãã«ã§Linuxã®cgroupè¨å®ãæ´»ç¨ãããã¨ã§ããããã®ãªã½ã¼ã¹å¶éã確å®ã«é©ç¨ããªãããå¯çµåããã³ã³ããã人çºçãªå¶ç´ã«ç¸ããããã¨ãªãããã广çã«é£æºã§ããããã«ãã¾ãã
éè¦ãªãã¨ã«ããã®æ©è½ã¯æ¢åã®ã³ã³ããã¬ãã«ã®ãªã½ã¼ã¹è¨å®ã¨ã®å¾æ¹äºææ§ãç¶æãã¦ãããã¦ã¼ã¶ã¼ã¯ç¾å¨ã®ã¯ã¼ã¯ããã¼ãæ¢åã®è¨å®ã䏿ãããã¨ãªããæ®µéçã«æ¡ç¨ã§ãã¾ãã</p>
<p>ããã¯ãã³ã³ããéã®ãªã½ã¼ã¹å²ãå½ã¦ç®¡çã®éç¨è¤éæ§ã軽æ¸ããããããã«ãã³ã³ããPodã«ã¨ã£ã¦éè¦ãªæ¹åã¨ãªãã¾ãã
ã¾ããã³ã³ãããã¯ã¼ã¯ãã¼ããå
±æããããæé©ãªããã©ã¼ãã³ã¹ãçºæ®ããããã«äºãã®å¯ç¨æ§ã«ä¾åããããããµã¤ãã«ã¼ã¢ã¼ããã¯ãã£ãªã©ã®å¯æ¥ã«çµ±åãããã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ãããã©ã¼ãã³ã¹ã®åä¸ãããããã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/2837">KEP #2837</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="prestopããã¯ã®ã¹ãªã¼ãã¢ã¯ã·ã§ã³ã§ã¼ãå¤ã許å¯">PreStopããã¯ã®ã¹ãªã¼ãã¢ã¯ã·ã§ã³ã§ã¼ãå¤ã許å¯</h3>
<p>ãã®æ©è½å¼·åã«ãããKubernetesã®PreStopã©ã¤ããµã¤ã¯ã«ããã¯ã§0ç§ã®ã¹ãªã¼ãæéãè¨å®ã§ããããã«ãªãããªã½ã¼ã¹ã®æ¤è¨¼ã¨ã«ã¹ã¿ãã¤ãºã®ããã®ããæè»ãªç¡æä½ãªãã·ã§ã³ãæä¾ãã¾ãã
ããã¾ã§ã¯ãã¹ãªã¼ãã¢ã¯ã·ã§ã³ã«ã¼ãå¤ãè¨å®ãããã¨ããã¨ããªãã¼ã·ã§ã³ã¨ã©ã¼ãçºçãããã®ä½¿ç¨ãå¶éããã¦ãã¾ããã
ãã®æ´æ°ã«ãããã¦ã¼ã¶ã¼ã¯ã¼ãç§ã®æéãæå¹ãªã¹ãªã¼ãè¨å®ã¨ãã¦è¨å®ã§ããå¿
è¦ã«å¿ãã¦å³æå®è¡ã¨çµäºã®åä½ãå¯è½ã«ãªãã¾ãã</p>
<p>ãã®æ©è½å¼·åã¯å¾æ¹äºææ§ãããã<code>PodLifecycleSleepActionAllowZero</code>ãã£ã¼ãã£ã¼ã²ã¼ãã«ãã£ã¦å¶å¾¡ããããªããã¤ã³æ©è½ã¨ãã¦å°å
¥ããã¦ãã¾ãã
ãã®å¤æ´ã¯ãå®éã®ã¹ãªã¼ãæéãå¿
è¦ã¨ããã«ãæ¤è¨¼ãAdmission Webhookå¦çã®ããã«PreStopããã¯ãå¿
è¦ã¨ããã·ããªãªã§ç¹ã«æå¹ã§ãã
Goã®<code>time.After</code>颿°ã®æ©è½ã«åããããã¨ã§ããã®æ´æ°ã¯Kubernetesã¯ã¼ã¯ãã¼ãã®è¨å®ãç°¡ç´ åãã使ãããããåä¸ããã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4818">KEP #4818</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="dra-resourceclaimã¹ãã¼ã¿ã¹ã®ããã®æ¨æºåããããããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ãã¼ã¿">DRAï¼ResourceClaimã¹ãã¼ã¿ã¹ã®ããã®æ¨æºåããããããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ãã¼ã¿</h3>
<p>ãã®æ©è½å¼·åã«ããããã©ã¤ãã¼ã<code>ResourceClaim</code>ã®åå²ãå½ã¦ãªãã¸ã§ã¯ãã«å¯¾ãã¦ç¹å®ã®ããã¤ã¹ã¹ãã¼ã¿ã¹ãã¼ã¿ãå ±åã§ããæ°ãããã£ã¼ã«ãã追å ããã¾ããã
ã¾ãããããã¯ã¼ã¯ããã¤ã¹æ
å ±ã表ç¾ããããã®æ¨æºçãªæ¹æ³ã確ç«ããã¾ããã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-network">SIG Network</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4817">KEP #4817</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="ã³ã¢ã³ã³ãã¼ãã³ãã®æ°ããstatuszã¨flagzã¨ã³ããã¤ã³ã">ã³ã¢ã³ã³ãã¼ãã³ãã®æ°ããstatuszã¨flagzã¨ã³ããã¤ã³ã</h3>
<p>ã³ã¢ã³ã³ãã¼ãã³ãã«å¯¾ãã¦ã2ã¤ã®æ°ããHTTPã¨ã³ããã¤ã³ã(<code>/statusz</code>ã¨<code>/flagz</code>)ãæå¹ã«ã§ããããã«ãªãã¾ããã
ãããã®ã¨ã³ããã¤ã³ãã¯ãã³ã³ãã¼ãã³ããå®è¡ããã¦ãããã¼ã¸ã§ã³(Golangã®ãã¼ã¸ã§ã³ãªã©)ãã稼åæéããã®ã³ã³ãã¼ãã³ããå®è¡ãããéã®ã³ãã³ãã©ã¤ã³ãã©ã°ã®è©³ç´°ãææ¡ãããã¨ã§ãã¯ã©ã¹ã¿ã¼ã®ãããã°æ§ãåä¸ããã¾ãã
ããã«ãããå®è¡æããã³è¨å®ã®åé¡ã®è¨ºæã容æã«ãªãã¾ãã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-instrumentation">SIG Instrumentation</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4827">KEP #4827</a>ã¨<a href="https://github.com/kubernetes/enhancements/issues/4828">KEP #4828</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h3 id="windowsã®é襲">Windowsã®é襲</h3>
<p>Kubernetesã¯ã©ã¹ã¿ã¼ã«ããã¦ãWindowsãã¼ãã®æ£å¸¸ãªã·ã£ãããã¦ã³ã®ãµãã¼ãã追å ããã¾ããã
ãã®ãªãªã¼ã¹ä»¥åãKubernetesã¯Linuxãã¼ãã«å¯¾ãã¦æ£å¸¸ãªãã¼ãã·ã£ãããã¦ã³æ©è½ãæä¾ãã¦ãã¾ããããWindowsã«å¯¾ããåçã®ãµãã¼ãã¯æ¬ ãã¦ãã¾ããã
ãã®æ©è½å¼·åã«ãããWindowsãã¼ãä¸ã®kubeletãã·ã¹ãã ã®ã·ã£ãããã¦ã³ã¤ãã³ããé©åã«å¦çã§ããããã«ãªãã¾ããã
ããã«ãããWindowsãã¼ãä¸ã§å®è¡ããã¦ããPodãæ£å¸¸ã«çµäºãããã¯ã¼ã¯ãã¼ãã®ä¸æãªãã§ã®åã¹ã±ã¸ã¥ã¼ã«ãå¯è½ã«ãªãã¾ãã
ãã®æ¹åã«ãããç¹ã«è¨ç»çãªã¡ã³ããã³ã¹ãã·ã¹ãã æ´æ°æã«ããã¦ãWindowsãã¼ããå«ãã¯ã©ã¹ã¿ã¼ã®ä¿¡é ¼æ§ã¨å®å®æ§ãåä¸ãã¾ãã</p>
<p>ããã«ãCPUããã¼ã¸ã£ã¼ãã¡ã¢ãªããã¼ã¸ã£ã¼ããããã¸ã¼ããã¼ã¸ã£ã¼ã®æ¹åã«ãããWindowsãã¼ãã«å¯¾ããCPUã¨ã¡ã¢ãªã®ã¢ãã£ããã£ãµãã¼ãã追å ããã¾ããã</p>
<p>ãã®ä½æ¥ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-windows">SIG Windows</a>ã«ãã<a href="https://github.com/kubernetes/enhancements/issues/4802">KEP #4802</a>ã¨<a href="https://github.com/kubernetes/enhancements/issues/4885">KEP #4885</a>ã®ä¸é¨ã¨ãã¦å®æ½ããã¾ããã</p>
<h2 id="1-32ã«ãããæ©è½ã®ææ ¼-鿍奍å-ããã³åé¤">1.32ã«ãããæ©è½ã®ææ ¼ã鿍奍åãããã³åé¤</h2>
<h3 id="gaã¸ã®ææ ¼">GAã¸ã®ææ ¼</h3>
<p>ããã§ã¯ãGA(<em>ä¸è¬æä¾</em> ã¨ãå¼ã°ãã)ã«ææ ¼ãããã¹ã¦ã®æ©è½ãç´¹ä»ãã¾ããæ°æ©è½ãã¢ã«ãã¡ãããã¼ã¿ã¸ã®ææ ¼ãå«ãå®å
¨ãªæ´æ°ãªã¹ãã«ã¤ãã¦ã¯ããªãªã¼ã¹ãã¼ããã覧ãã ããã</p>
<p>ãã®ãªãªã¼ã¹ã§ã¯ã以ä¸ã®13åã®æ©è½å¼·åãGAã«ææ ¼ãã¾ãã:</p>
<ul>
<li><a href="https://github.com/kubernetes/enhancements/issues/3221">Structured Authorization Configuration</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4193">Bound service account token improvements</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4358">Custom Resource Field Selectors</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4420">Retry Generate Name</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1860">Make Kubernetes aware of the LoadBalancer behaviour</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2681">Field <code>status.hostIPs</code> added for Pod</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4292">Custom profile in kubectl debug</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1769">Memory Manager</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1967">Support to size memory backed volumes</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3545">Improved multi-numa alignment in Topology Manager</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4026">Add job creation timestamp to job annotations</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4017">Add Pod Index Label for StatefulSets and Indexed Jobs</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/1847">Auto remove PVCs created by StatefulSet</a></li>
</ul>
<h3 id="鿍奍åã¨åé¤">鿍奍åã¨åé¤</h3>
<p>Kubernetesã®éçºã¨æçã«ä¼´ããããã¸ã§ã¯ãå
¨ä½ã®å¥å
¨æ§ã®ããã«ãæ©è½ã鿍奍åãåé¤ãã¾ãã¯ããè¯ããã®ã«ç½®ãæããããå ´åãããã¾ãã
ãã®ããã»ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ãKubernetesã®<a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">鿍奍åã¨åé¤ã®ããªã·ã¼</a>ãã覧ãã ããã</p>
<h4 id="å¤ãdraå®è£
ã®å»æ¢">å¤ãDRAå®è£
ã®å»æ¢</h4>
<p><a href="https://github.com/kubernetes/enhancements/issues/3063">KEP #3063</a>ã«ãããKubernetes 1.26ã§Dynamic Resource Allocation(DRA)ãå°å
¥ããã¾ããã</p>
<p>ããããKubernetes v1.32ã§ã¯ããã®DRAã®ã¢ããã¼ãã大å¹
ã«å¤æ´ããã¾ããå
ã®å®è£
ã«é¢é£ããã³ã¼ãã¯åé¤ããã<a href="https://github.com/kubernetes/enhancements/issues/4381">KEP #4381</a>ããæ°ãããåºæ¬æ©è½ã¨ãã¦æ®ãã¾ãã</p>
<p>æ¢åã®ã¢ããã¼ãã夿´ããæ±ºå®ã¯ããªã½ã¼ã¹ã®å¯ç¨æ§ãä¸éæã§ãã£ããã¨ã«ããã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ãªã³ã°ã¨ã®éäºææ§ã«èµ·å ãã¦ãããããã«ããCluster Autoscalerã¨ã³ã³ããã¼ã©ã¼ã®ä¸¡æ¹ã®æææ±ºå®ãè¤éåãã¦ãã¾ããã
æ°ãã追å ãããStructured Parameterã¢ãã«ããã®æ©è½ãç½®ãæãã¾ãã</p>
<p>ãã®åé¤ã«ãããKubernetesã¯kube-apiserverã¨ã®åæ¹åã®APIã³ã¼ã«ã®è¤éããåé¿ããæ°ãããã¼ãã¦ã§ã¢è¦ä»¶ã¨ãªã½ã¼ã¹ã¯ã¬ã¼ã ãããäºæ¸¬å¯è½ãªæ¹æ³ã§å¦çã§ããããã«ãªãã¾ãã</p>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/enhancements/issues/3063">KEP #3063</a>ãã覧ãã ããã</p>
<h4 id="apiåé¤">APIåé¤</h4>
<p><a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-32">Kubernetes v1.32</a>ã§ã¯ã以ä¸ã®APIãåé¤ããã¾ãï¼</p>
<ul>
<li>FlowSchemaã¨PriorityLevelConfigurationã®<code>flowcontrol.apiserver.k8s.io/v1beta3</code> APIãã¼ã¸ã§ã³ãåé¤ããã¾ãã
ããã«åãããããæ¢åã®ãããã§ã¹ããç·¨éããv1.29以éã§å©ç¨å¯è½ãª<code>flowcontrol.apiserver.k8s.io/v1 API</code>ãã¼ã¸ã§ã³ã使ç¨ããããã«ã¯ã©ã¤ã¢ã³ãã½ããã¦ã§ã¢ãæ¸ãæãããã¨ãã§ãã¾ãã
æ¢åã®æ°¸ç¶åããããªãã¸ã§ã¯ãã¯ãã¹ã¦æ°ããAPIãéãã¦ã¢ã¯ã»ã¹å¯è½ã§ãã
<code>flowcontrol.apiserver.k8s.io/v1beta3</code>ã«ããã主ãªå¤æ´ç¹ã¨ãã¦ãPriorityLevelConfigurationã®<code>spec.limited.nominalConcurrencyShares</code>ãã£ã¼ã«ãã¯æªæå®ã®å ´åã«ã®ã¿ããã©ã«ãã§30ã¨ãªããæç¤ºçã«0ãæå®ãããå ´åã¯30ã«å¤æ´ãããªãããã«ãªãã¾ããã</li>
</ul>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-32">API廿¢ã«é¢ããç§»è¡ã¬ã¤ã</a>ãåç
§ãã¦ãã ããã</p>
<h3 id="ãªãªã¼ã¹ãã¼ãã¨ã¢ããã°ã¬ã¼ãã«å¿
è¦ãªã¢ã¯ã·ã§ã³">ãªãªã¼ã¹ãã¼ãã¨ã¢ããã°ã¬ã¼ãã«å¿
è¦ãªã¢ã¯ã·ã§ã³</h3>
<p>Kubernetes v1.32ãªãªã¼ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md">ãªãªã¼ã¹ãã¼ã</a>ãã確èªãã ããã</p>
<h2 id="å
¥ææ¹æ³">å
¥ææ¹æ³</h2>
<p>Kubernetes v1.32ã¯ã<a href="https://github.com/kubernetes/kubernetes/releases/tag/v1.32.0">GitHub</a>ã¾ãã¯<a href="https://kubernetes.io/ja/releases/download/">Kubernetesãã¦ã³ãã¼ããã¼ã¸</a>ãããã¦ã³ãã¼ãã§ãã¾ãã</p>
<p>Kubernetesãå§ããã«ã¯ã<a href="https://kubernetes.io/ja/docs/tutorials/">対話å¼ã®ãã¥ã¼ããªã¢ã«</a>ããã§ãã¯ãããã<a href="https://minikube.sigs.k8s.io/">minikube</a>ã使ç¨ãã¦ãã¼ã«ã«Kubernetesã¯ã©ã¹ã¿ãå®è¡ãã¦ãã ããã
ã¾ãã<a href="https://kubernetes.io/ja/docs/setup/independent/create-cluster-kubeadm/">kubeadm</a>ã使ç¨ãã¦ç°¡åã«v1.32ãã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã ">ãªãªã¼ã¹ãã¼ã </h2>
<p>Kubernetesã¯ããã®ã³ãã¥ããã£ã®ãµãã¼ããç®èº«ãããã¦æ¸å½ãªåªåã«æ¯ãããã¦å®ç¾ãã¦ãã¾ãã
åãªãªã¼ã¹ãã¼ã ã¯ãçæ§ãé ¼ãã«ãã¦ããKubernetesãªãªã¼ã¹ãæ§æããå¤ãã®è¦ç´ ãæ§ç¯ããããã«ååãã¦åããç®èº«çãªã³ãã¥ããã£ãã©ã³ãã£ã¢ã§æ§æããã¦ãã¾ãã
ããã«ã¯ãã³ã¼ãèªä½ããããã¥ã¡ã³ãã¼ã·ã§ã³ãããã¸ã§ã¯ã管çã«è³ãã¾ã§ãã³ãã¥ããã£ã®ããããåéããå°éçãªã¹ãã«ãæã¤äººã
ãå¿
è¦ã§ãã</p>
<p>ç§ãã¡ã¯ãKubernetes v1.32ãªãªã¼ã¹ãã³ãã¥ããã£ã«æä¾ããããã«å¤ãã®æéãè²»ããã¦ãã ãã£ã<a href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.32/release-team.md">ãªãªã¼ã¹ãã¼ã </a>å
¨ä½ã«æè¬ã®æã表ãã¾ãã
ãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¯ãåãã¦Shadowã¨ãã¦åå ãã人ãããè¤æ°ã®ãªãªã¼ã¹ãµã¤ã¯ã«ãçµé¨ããããã©ã³ã®ãã¼ã ãªã¼ãã¼ã¾ã§å¤å²ã«ãããã¾ãã
ãªãªã¼ã¹ãªã¼ãã®Frederico Muñozã«ã¯ããªãªã¼ã¹ãã¼ã ãè¦äºã«çãã¦ãããããäºæãç´°å¿ã®æ³¨æãæã£ã¦å¦çãããã®ãªãªã¼ã¹ãåæ»ãã¤å¹ççã«å®è¡ãã¦ããããã¨ã«ãç¹å¥ãªæè¬ã®æã表ãã¾ãã
æå¾ã«ãªãã¾ãããããã¹ã¦ã®ãªãªã¼ã¹ã¡ã³ãã¼(ãªã¼ãã¨Shadowã®åæ¹)ãããã¦14é±éã®ãªãªã¼ã¹ä½æ¥æéä¸ã«ç´ æ´ãããä»äºã¨ææãä¸ãã¦ããã以ä¸ã®SIGsã«ã大ããªæè¬ã®æã表ãã¾ãï¼</p>
<ul>
<li><a href="https://github.com/kubernetes/community/tree/master/sig-docs">SIG Docs</a> - ããã¥ã¡ã³ãã¨ããã°ã®ã¬ãã¥ã¼ã«ãããåºæ¬çãªãµãã¼ããæä¾ãããªãªã¼ã¹ã®ã³ãã¥ãã±ã¼ã·ã§ã³ã¨ããã¥ã¡ã³ããã¼ã ã¨ã®ç¶ç¶çãªååãè¡ã£ã¦ããã¾ããã</li>
<li><a href="https://github.com/kubernetes/community/tree/master/sig-k8s-infra">SIG K8s Infra</a>ã¨<a href="https://github.com/kubernetes/community/tree/master/sig-testing">SIG Testing</a> - å¿
è¦ãªãã¹ã¦ã®ã¤ã³ãã©ã³ã³ãã¼ãã³ãã¨å
±ã«ããã¹ããã¬ã¼ã ã¯ã¼ã¯ã確å®ã«ç¶æããããã®ç´ æ´ãããä»äºãè¡ã£ã¦ããã¾ããã</li>
<li><a href="https://github.com/kubernetes/community/tree/master/sig-release">SIG Release</a>ã¨ãã¹ã¦ã®ãªãªã¼ã¹ããã¼ã¸ã£ã¼ - ãªãªã¼ã¹å
¨ä½ã®èª¿æ´ãéãã¦ç´ æ´ããããµãã¼ããæä¾ããæãå°é£ãªèª²é¡ã§ãé©åãã¤ã¿ã¤ã ãªã¼ã«å¯¾å¿ãã¦ããã¾ããã</li>
</ul>
<h2 id="ããã¸ã§ã¯ãã®é²æé度">ããã¸ã§ã¯ãã®é²æé度</h2>
<p>CNCFã®K8s <a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStatsããã¸ã§ã¯ã</a>ã¯ãKubernetesã¨æ§ã
ãªãµãããã¸ã§ã¯ãã®é²æã«é¢ããè峿·±ããã¼ã¿ãã¤ã³ããéè¨ãã¦ãã¾ãã
ããã«ã¯ãå人ã®è²¢ç®ããè²¢ç®ãã¦ãã伿¥ã®æ°ã¾ã§ããã®ã¨ã³ã·ã¹ãã ã®é²åã«é¢ããåãçµã¿ã®æ·±ãã¨åºããç¤ºãæ§ã
ãªæ
å ±ãå«ã¾ãã¦ãã¾ãã</p>
<p>14é±é(9æ9æ¥ãã12æ11æ¥ã¾ã§)ç¶ããv1.32ãªãªã¼ã¹ãµã¤ã¯ã«ã§ã¯ã125ã®ç°ãªã伿¥ã¨559ã®å人ãKubernetesã«è²¢ç®ãã¾ããã</p>
<p>ã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã å
¨ä½ã§ã¯ã433ã®ä¼æ¥ããåè¨2441人ã®è²¢ç®è
ããã¾ãã
ããã¯<a href="https://kubernetes.io/blog/2024/08/13/kubernetes-v1-31-release/#project-velocity">ååã®ãªãªã¼ã¹</a>ãµã¤ã¯ã«ã¨æ¯è¼ãã¦ãå
¨ä½ã®è²¢ç®ã7%å¢å ããåå 伿¥æ°ã14%å¢å ãããã¨ã示ãã¦ãããã¯ã©ã¦ããã¤ãã£ãããã¸ã§ã¯ãã«å¯¾ããå¼·ãé¢å¿ã¨ã³ãã¥ããã£ã®æ¯æã表ãã¦ãã¾ãã</p>
<p>ãã®ãã¼ã¿ã®åºå
¸:</p>
<ul>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1725832800000&to=1733961599000&var-period=d28&var-repogroup_name=Kubernetes&var-repo_name=kubernetes%2Fkubernetes">Companies contributing to
Kubernetes</a></li>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1725832800000&to=1733961599000&var-period=d28&var-repogroup_name=All&var-repo_name=kubernetes%2Fkubernetes">Overall ecosystem
contributions</a></li>
</ul>
<p>ããã§ã®è²¢ç®ã¨ã¯ãã³ãããã®ä½æãã³ã¼ãã¬ãã¥ã¼ãã³ã¡ã³ããIssueãPRã®ä½æãPR(ããã°ãããã¥ã¡ã³ããå«ã)ã®ã¬ãã¥ã¼ããããã¯IssueãPRã¸ã®ã³ã¡ã³ããæãã¾ãã</p>
<p>ã³ã³ããªãã¥ã¼ã¿ã¼ã¦ã§ããµã¤ãã®<a href="https://www.kubernetes.dev/docs/guide/#getting-started">Getting Started</a>ãããè²¢ç®ãå§ããæ¹æ³ãã確èªãã ããã</p>
<p>Kubernetesããã¸ã§ã¯ãã¨ã³ãã¥ããã£ã®å
¨ä½çãªæ´»åç¶æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStats</a>ãã確èªãã ããã</p>
<h2 id="ã¤ãã³ãæ
å ±">ã¤ãã³ãæ
å ±</h2>
<p>2025å¹´3æãã6æã«ããã¦éå¬äºå®ã®Kubernetesã¨ã¯ã©ã¦ããã¤ãã£ãé¢é£ã®ã¤ãã³ãããç´¹ä»ãã¾ãã
KubeConãKCDããã®ä»ä¸çåå°ã§éå¬ãããæ³¨ç®ã®ã«ã³ãã¡ã¬ã³ã¹ãå«ã¾ãã¦ãã¾ãã
Kubernetesã³ãã¥ããã£ã®ææ°æ
å ±ãå
¥æãã交æµãæ·±ãã¾ãããã</p>
<p><strong>2025å¹´3æ</strong></p>
<ul>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Beijing, China</strong></a>: 3æ | å京(ä¸å½)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Guadalajara, Mexico</strong></a>: 2025å¹´3æ16æ¥ | ã°ã¢ãã©ãã©(ã¡ãã·ã³)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Rio de Janeiro, Brazil</strong></a>: 2025å¹´3æ22æ¥ | ãªãªãã¸ã£ãã¤ã(ãã©ã¸ã«)</li>
</ul>
<p><strong>2025å¹´4æ</strong></p>
<ul>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe"><strong>KubeCon + CloudNativeCon Europe 2025</strong></a>: 2025å¹´4æ1æ¥-4æ¥ | ãã³ãã³(ã¤ã®ãªã¹)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Budapest, Hungary</strong></a>: 2025å¹´4æ23æ¥ | ãããã¹ã(ãã³ã¬ãªã¼)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Chennai, India</strong></a>: 2025å¹´4æ26æ¥ | ãã§ã³ãã¤(ã¤ã³ã)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Auckland, New Zealand</strong></a>: 2025å¹´4æ28æ¥ | ãªã¼ã¯ã©ã³ã(ãã¥ã¼ã¸ã¼ã©ã³ã)</li>
</ul>
<p><strong>2025å¹´5æ</strong></p>
<ul>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Helsinki, Finland</strong></a>: 2025å¹´5æ6æ¥ | ãã«ã·ã³ã(ãã£ã³ã©ã³ã)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: San Francisco, USA</strong></a>: 2025å¹´5æ8æ¥ | ãµã³ãã©ã³ã·ã¹ã³(ã¢ã¡ãªã«)</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-texas-presents-kcd-texas-austin-2025/"><strong>KCD - Kubernetes Community Days: Austin, USA</strong></a>: 2025å¹´5æ15æ¥ | ãªã¼ã¹ãã£ã³(ã¢ã¡ãªã«)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Seoul, South Korea</strong></a>: 2025å¹´5æ22æ¥ | ã½ã¦ã«(éå½)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Istanbul, Turkey</strong></a>: 2025å¹´5æ23æ¥ | ã¤ã¹ã¿ã³ãã¼ã«(ãã«ã³)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Heredia, Costa Rica</strong></a>: 2025å¹´5æ31æ¥ | ã¨ã¬ãã£ã¢(ã³ã¹ã¿ãªã«)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: New York, USA</strong></a>: 2025å¹´5æ | ãã¥ã¼ã¨ã¼ã¯(ã¢ã¡ãªã«)</li>
</ul>
<p><strong>2025å¹´6æ</strong></p>
<ul>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Bratislava, Slovakia</strong></a>: 2025å¹´6æ5æ¥ | ãã©ãã¹ã©ã(ã¹ãããã¢)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Bangalore, India</strong></a>: 2025å¹´6æ6æ¥ | ãã³ã¬ãã¼ã«(ã¤ã³ã)</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-china/"><strong>KubeCon + CloudNativeCon China 2025</strong></a>: 2025å¹´6æ10æ¥-11æ¥ | 馿¸¯</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Antigua Guatemala, Guatemala</strong></a>: 2025å¹´6æ14æ¥ | ã¢ã³ãã£ã°ã¢ ã°ã¢ããã©(ã°ã¢ããã©)</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-japan"><strong>KubeCon + CloudNativeCon Japan 2025</strong></a>: 2025å¹´6æ16æ¥-17æ¥ | æ±äº¬(æ¥æ¬)</li>
<li><a href="https://www.cncf.io/kcds/"><strong>KCD - Kubernetes Community Days: Nigeria, Africa</strong></a>: 2025å¹´6æ19æ¥ | ãã¤ã¸ã§ãªã¢</li>
</ul>
<h2 id="次æãªãªã¼ã¹ã«é¢ããã¦ã§ããã¼ã®ãç¥ãã">次æãªãªã¼ã¹ã«é¢ããã¦ã§ããã¼ã®ãç¥ãã</h2>
<p><strong>2025å¹´1æ9æ¥(æ¨)åå¾5æ(å¤ªå¹³æ´æé)</strong> ã«éå¬ãããKubernetes v1.32ãªãªã¼ã¹ãã¼ã ã¡ã³ãã¼ã«ããã¦ã§ããã¼ã«ãåå ãã ããã
ãã®ãªãªã¼ã¹ã®ä¸»è¦ãªæ©è½ããã¢ããã°ã¬ã¼ãè¨ç»ã«å½¹ç«ã¤éæ¨å¥¨åããã³åé¤ãããæ©è½ã«ã¤ãã¦å¦ã¶ãã¨ãã§ãã¾ãã
詳細ããã³åå ç»é²ã«ã¤ãã¦ã¯ãCNCFãªã³ã©ã¤ã³ããã°ã©ã ãµã¤ãã®<a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-132-release/">ã¤ãã³ããã¼ã¸</a>ãã覧ãã ããã</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p>Kubernetesã«é¢ããæãç°¡åãªæ¹æ³ã¯ãããªãã®èå³ã«åã£ã<a href="https://github.com/kubernetes/community/blob/master/sig-list.md">Special Interest Groups(SIG)</a>ã®ããããã«åå ãããã¨ã§ãã
Kubernetesã³ãã¥ããã£ã«åãã¦ä½ãçºä¿¡ããããã¨ã¯ããã¾ããï¼
æ¯é±ã®<a href="https://github.com/kubernetes/community/tree/master/communication">ã³ãã¥ããã£ãã¼ãã£ã³ã°</a>ãã以ä¸ã®ãã£ã³ãã«ã§ããªãã®å£°ãå
±æãã¦ãã ããã
ç¶ç¶çãªãã£ã¼ãããã¯ã¨ãµãã¼ãã«æè¬ãããã¾ãã</p>
<ul>
<li>ææ°æ
å ±ã¯Blueskyã®<a href="https://bsky.app/profile/did:plc:kyg4uikmq7lzpb76ugvxa6ul">@Kubernetes.io</a>ããã©ãã¼ãã¦ãã ãã</li>
<li><a href="https://discuss.kubernetes.io/">Discuss</a>ã§ã³ãã¥ããã£ãã£ã¹ã«ãã·ã§ã³ã«åå ãã¦ãã ãã</li>
<li><a href="http://slack.k8s.io/">Slack</a>ã§ã³ãã¥ããã£ã«åå ãã¦ãã ãã</li>
<li><a href="http://stackoverflow.com/questions/tagged/kubernetes">Stack Overflow</a>ã§è³ªåããããåçããããã¦ãã ãã</li>
<li>ããªãã®Kubernetesã«é¢ãã<a href="https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform">ã¹ãã¼ãªã¼</a>ãå
±æãã¦ãã ãã</li>
<li>Kubernetesã®ææ°æ
å ±ã¯<a href="https://kubernetes.io/ja/blog/">ããã°</a>ã§ããã«è©³ããèªããã¨ãã§ãã¾ã</li>
<li><a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Kubernetesãªãªã¼ã¹ãã¼ã </a>ã«ã¤ãã¦ãã£ã¨å¦ãã§ãã ãã</li>
</ul>
- Kubernetes Upstream Training in Japanã®åãçµã¿ã®ç´¹ä»https://kubernetes.io/ja/blog/2024/10/28/k8s-upstream-training-japan-spotlight/Mon, 28 Oct 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/10/28/k8s-upstream-training-japan-spotlight/
<p>ç§ãã¡ã¯ã<a href="https://github.com/kubernetes-sigs/contributor-playground/tree/master/japan">Kubernetes Upstream Training in Japan</a>ã®ãªã¼ã¬ãã¤ã¶ã¼ãã¼ã ã§ãã
ãã¼ã ã¯ãKubernetesã¸ã®ã³ã³ããªãã¥ã¼ã·ã§ã³ãç¶ããã¡ã³ãã¼ã§æ§æããããã®ä¸ã«ã¯ReviewerãApproverãChairã¨ãã£ãå½¹å²ãæ
ã人ã
ãå«ã¾ãã¦ãã¾ãã</p>
<p>ç§ãã¡ã®ç®æ¨ã¯ãKubernetesã®ã³ã³ããªãã¥ã¼ã¿ã¼ãå¢ãããã³ãã¥ããã£ã®æé·ãä¿é²ãããã¨ã§ããKubernetesã³ãã¥ããã£ã¯è¦ªåã§ååçã§ãããåãã¦ã®è²¢ç®ã¯ãããã¼ãã«ãé«ãã¨æããæ¹ããã¾ããç§ãã¡ã®ãã¬ã¼ãã³ã°ããã°ã©ã ã¯ããã®ãã¼ãã«ãä¸ããåå¿è
ã§ãã¹ã ã¼ãºã«åå ã§ããç°å¢ãæä¾ãããã¨ãç®çã¨ãã¦ãã¾ãã</p>
<h2 id="kubernetes-upstream-training-in-japanã¨ã¯">Kubernetes Upstream Training in Japanã¨ã¯ï¼</h2>
<p>Kubernetes Upstream Training in Japanã¯2019å¹´ããå§ã¾ããå¹´ã«1ã2åã®ãã¼ã¹ã§éå¬ããã¦ãã¾ãã
å½åãKubernetes Upstream Trainingã¯KubeConã®co-locatedã¤ãã³ã(Kubernetes Contributor Summit)ã®ä¸ã§å®æ½ããã¦ãã¾ããããåæ§ã®ã¤ãã³ããæ¥æ¬ã§ãè¡ã£ã¦æ¥æ¬äººã®ã³ã³ããªãã¥ã¼ã¿ã¼ãå¢ããããã¨ããæããããç§ãã¡ã¯Kubernetes Upstream Training in Japanãç«ã¡ä¸ãã¾ããã</p>
<p>ãã³ãããã¯ä»¥åã¯å¯¾é¢å½¢å¼ã§è¡ããã¦ãã¾ãããã2020年以éã¯ãªã³ã©ã¤ã³ã§éå¬ãã¦ãã¾ãã
ãã¬ã¼ãã³ã°ã§ã¯ãKubernetesã«ã¾ã ã³ã³ããªãã¥ã¼ã·ã§ã³ããããã¨ããªãæ¹ã
ã«åãã¦ã以ä¸ã®ãããªå
容ãæä¾ãã¦ãã¾ãã</p>
<ul>
<li>Kubernetesã³ãã¥ããã£ã®ç´¹ä»</li>
<li>Kubernetesã®ã³ã¼ããã¼ã¹ã®ç´¹ä»ã¨ãPRã®ä½ææ¹æ³</li>
<li>è¨èªãªã©åå éå£ã使¸ããããã®å·¥å¤«ãåæ°ä»ã</li>
<li>éçºç°å¢ã®ã»ããã¢ããæ¹æ³</li>
<li><a href="https://github.com/kubernetes-sigs/contributor-playground">kubernetes-sigs/contributor-playground</a>ã使ç¨ãããã³ãºãªã³</li>
</ul>
<p>ããã°ã©ã ã®æåã«ããªãKubernetesã«ã³ã³ããªãã¥ã¼ã·ã§ã³ããã®ããã ããKubernetesã«ã³ã³ããªãã¥ã¼ã·ã§ã³ã§ããã®ããä¼ãã¾ãã
Kubernetesã«è²¢ç®ãããã¨ã¯ãä¸çä¸ã«ã¤ã³ãã¯ãã®ããè²¢ç®ãã§ãããã¨ãããã¦Kuberenetesã³ãã¥ããã£ã¯ã¿ãªããããã®ã³ã³ããªãã¥ã¼ã·ã§ã³ã楽ãã¿ã«ãã¦ãããã¨ãä¼ãã¾ãï¼</p>
<p>Kubernetesã³ãã¥ããã£ãSIGãWorking Groupã«ã¤ãã¦èª¬æãã¾ãã
ã¾ããç§ãã¡ã主ã«ã³ãã¥ãã±ã¼ã·ã§ã³ã®ããã«ç¨ããSlackãGitHubãã¡ã¼ãªã³ã°ãªã¹ãã«ã¤ãã¦èª¬æãã¾ãã
æ¥æ¬èªã話ã人ã®ä¸ã«ã¯ãè±èªã«ããã³ãã¥ãã±ã¼ã·ã§ã³ã«éå£ãæãã人ããã¾ãã
ã¾ããã³ãã¥ããã£ã«åãã¦åå ãã人ã¯ãã©ãã§ã©ã®ãããªã³ãã¥ãã±ã¼ã·ã§ã³ãè¡ããã¦ããã®ãç¥ãå¿
è¦ãããã¾ãã
ãã¡ãããç§ãã¡ããã¬ã¼ãã³ã°ã®ä¸ã§æã大åã«ãã¦ãããã¨ã¯ç¬¬ä¸æ©ãè¸ã¿åºããã¨ã§ãï¼</p>
<p>次ã«ãMemberãReviewerãApproverãTech leadãChairã¨ãã£ãå½¹å²ã責任ã«ã¤ãã¦èª¬æãã¾ãã</p>
<p>ãã®å¾ãKubernetesã®ã³ã¼ããã¼ã¹ã®æ§æã主è¦ãªãªãã¸ããªãPRã®ä½ææ¹æ³ãProwã使ã£ãCI/CDã®ä»çµã¿ãªã©ã解説ãã¾ãã
PRã使ããã¦ãããã¼ã¸ãããã¾ã§ã®ããã»ã¹ã«ã¤ãã¦è©³ãã説æãã¾ãã</p>
<p>ããã¤ãã®è¬ç¾©ãè¡ã£ãå¾ãå®éã«åå è
ã«ã¯ã<a href="https://github.com/kubernetes-sigs/contributor-playground">kubernetes-sigs/contributor-playground</a>ã使ç¨ãããã³ãºãªã³ãè¡ããç°¡åãªPRã®ä½æãä½é¨ãã¦ãããã¾ãã
ããã«ãããKubernetesã¸ã®ã³ã³ããªãã¥ã¼ã·ã§ã³ã®æµãã宿ãã¦ããããã¨ãç®çã§ãã</p>
<p>ããã°ã©ã ã®æå¾ã«ã¯ããã¼ã«ã«ã§ã®ã¯ã©ã¹ã¿ã¼æ§ç¯ãã³ã¼ãã®ãã«ããå¹ççãªãã¹ãå®è¡æ¹æ³ãªã©ãkubernetes/kubernetesãªãã¸ããªã«è²¢ç®ããããã®å
·ä½çãªéçºç°å¢ã®ã»ããã¢ããã«ã¤ãã¦ã解説ãã¾ãã</p>
<h2 id="åå è
ã¸ã®ã¤ã³ã¿ãã¥ã¼">åå è
ã¸ã®ã¤ã³ã¿ãã¥ã¼</h2>
<p>ç§ãã¡ã®ãã¬ã¼ãã³ã°ããã°ã©ã ã«åå ããæ¹ã
ã«ã¤ã³ã¿ãã¥ã¼ãè¡ãã¾ããã
åå ããçç±ãææ³ãããã¦ä»å¾ã®ç®æ¨ã«ã¤ãã¦ä¼ºãã¾ããã</p>
<h3 id="keita-mochizukiãã-https-github-com-mochizuki875-ntt-data-group-corporation-https-www-nttdata-com-jp-ja"><a href="https://github.com/mochizuki875">Keita Mochizukiãã</a>ï¼<a href="https://www.nttdata.com/jp/ja/">NTT DATA Group Corporation</a>ï¼</h3>
<p>Keita Mochizukiããã¯ãKubernetesãå¨è¾ºã®ããã¸ã§ã¯ãã¸ç¶ç¶çã«è²¢ç®ãã¦ããã³ã³ããªãã¥ã¼ã¿ã¼ã§ãã
Keitaããã¯ãã³ã³ããã»ãã¥ãªãã£ã®ãããã§ãã·ã§ãã«ã§ããããæè¿ã¯æ¸ç±ã®åºçãè¡ãã¾ããã
ã¾ãã<a href="https://github.com/mochizuki875/KubernetesFirstContributionRoadMap">æ°è¦ã³ã³ããªãã¥ã¼ã¿ã¼ã®ããã®ãã¼ãããã</a>ãå
¬éãã¦ãããããã¯æ°ããªã³ã³ããªãã¥ã¼ã¿ã¼ã«ã¨ã£ã¦é常ã«å½¹ç«ã¤ãã®ã§ãã</p>
<p><strong>Junya:</strong> ãªãKubernetes Upstream Trainingã«åå ãããã¨æãã¾ãããï¼</p>
<p><strong>Keita:</strong> å®ã¯ç§ã¯2020å¹´ã¨2022å¹´ã®2ååå ãã¾ããã2020å¹´ã¯k8sã«è§¦ãå§ããã°ããã§ãç¤¾å¤æ´»åã«åå ãã¦ã¿ããã¨æããå¶ç¶Twitterã§è¦ããã¦ç³ãè¾¼ã¿ã¾ããããããã彿ã¯ç¥èãæµ
ããOSSã«PRãéããã¨èªä½ãé²ã®ä¸ã®åå¨ã®ããã«æãã¦ãã¾ããããã®ãããåè¬å¾ã®çè§£åº¦ã¯æµ
ãããªãã¨ãªãããµã¼ããã¨ããæè¦ã§ããã</p>
<p>2åç®ã®2022å¹´ã¯ãå
·ä½çã«ã³ã³ããªãã¥ã¼ã·ã§ã³ãå§ãããã¨ãã¦ããã¿ã¤ãã³ã°ã§ãå度åå ãã¾ããããã®æã¯äºå調æ»ãè¡ããçåç¹ãè¬ç¾©ä¸ã«è§£æ±ºã§ããã®ã§ãé常ã«å®ãããæéãéããã¾ããã</p>
<p><strong>Junya:</strong> åå ãã¦ã¿ã¦ãã©ã®ãããªææ³ãæã¡ã¾ãããï¼</p>
<p><strong>Keita:</strong> ãã®ãã¬ã¼ãã³ã°ã¯åå è
ã®ã¹ã¿ã³ã¹æ¬¡ç¬¬ã§ãã®æç¾©ã大ããå¤ãããã®ã ã¨æãã¾ããããã¬ã¼ãã³ã°èªä½ã¯ä¸è¬çãªè§£èª¬ã¨ç°¡åãªãã³ãºãªã³ã§æ§æããã¦ãã¾ããããã®ãã¬ã¼ãã³ã°ã«åå ããããã¨ãã£ã¦ãããã«ã³ã³ããªãã¥ã¼ã·ã§ã³ãã§ãããã¨ããã¨ãããç°¡åã§ã¯ããã¾ãããããããããäºåã«èªåãä»å¾ã³ã³ããªãã¥ã¼ã·ã§ã³ãè¡ãã¤ã¡ã¼ã¸ããªãã¨ãªãã§ãæã£ã¦ããããå
·ä½çãªçåã課é¡ãæç¢ºã«ãã¦ãããã¨ãã§ããã°ãè¬å¸«ã®æ¹ã
ãå®éã«ã³ãã¥ããã£ã§å¹ã£ãè²´éãªãã¦ãã¦ãæ´»ããã¦ããããã«å¯¾ãã¦ä¸å¯§ã«å¿ãã¦ãããããã大夿æç¾©ãªãã¬ã¼ãã³ã°ã«ãªãã¨æãã¾ãã</p>
<p><strong>Junya:</strong> ã³ã³ããªãã¥ã¼ã·ã§ã³ã®ç®çã¯ä½ã§ããï¼</p>
<p><strong>Keita:</strong> æåã®ã¢ããã¼ã·ã§ã³ã¯ãKubernetesã®æ·±ãçè§£ã¨å®ç¸¾ã®ç²å¾ãã§ãã¤ã¾ããã³ã³ããªãã¥ã¼ã·ã§ã³ãã®ãã®ãç®çãã§ããã
ç¾å¨ã¯ããã«å ããæ¥åã§çºè¦ãããã°ãå¶ç´ã¸ã®å¯¾å¿ãç®çã«ã³ã³ããªãã¥ã¼ã·ã§ã³ãè¡ããã¨ãããã¾ããã¾ããã³ã³ããªãã¥ã¼ã·ã§ã³æ´»åãéãã¦ãããã¥ã¡ã³ãåããã¦ããªã仿§ãã½ã¼ã¹ã³ã¼ãããè§£æãããã¨ã¸ã®æµæã以åãããå°ãªããªãã¾ããã</p>
<p><strong>Junya:</strong> ã³ã³ããªãã¥ã¼ã·ã§ã³ãããä¸ã§ãé£ããã£ããã¨ã¯ä½ã§ããï¼</p>
<p><strong>Keita:</strong> æãé£ããã£ãã®ã¯ãæåã®ä¸æ©ãè¸ã¿åºããã¨ã§ãããOSSã¸ã®ã³ã³ããªãã¥ã¼ã·ã§ã³ã«ã¯ä¸å®ã®ç¥èããã¦ãã¦ãå¿
è¦ã¨ãªããããæ¬ãã¬ã¼ãã³ã°ãã¯ããããã¾ãã¾ãªãªã½ã¼ã¹ã®æ´»ç¨ã人ããã®ãµãã¼ããä¸å¯æ¬ ã§ããããã®ä¸ã§ããæåã®ä¸æ©ãè¸ã¿åºãã¨ããã¨ã¯ã©ãã©ãåã«é²ãããã¨ããè¨èãå¼·ãå°è±¡ã«æ®ã£ã¦ãã¾ããã¾ããæ¥åã¨ãã¦ã³ã³ããªãã¥ã¼ã·ã§ã³ãç¶ããä¸ã§ä¸çªé£ããã®ã¯ããã®ææãæ¥ç¸¾ã¨ãã¦ç¤ºããã¨ã§ããç¶ç¶çã«åãçµãããã«ã¯äºæ¥ç®æ¨ãæ¦ç¥ã¨é¢é£ä»ããå¿
è¦ãããã¾ãããUpstreamã¸ã®Contributionã¯å¿
ãããçæçã«æ¥ç¸¾ã«ç¹ããã±ã¼ã¹ã°ããã§ã¯ãªãããããã®ãã¨ãããã¼ã¸ã£ã¼ã¨ååã«èªèãåãããçè§£ãå¾ããã¨ãéè¦ã§ããã¨èãã¦ãã¾ãã</p>
<p><strong>Junya:</strong> ä»å¾ã®ç®æ¨ã¯ä½ã§ããï¼</p>
<p><strong>Keita:</strong> ããã¤ã³ãã¯ãã®ããé åã«ã³ã³ããªãã¥ã¼ã·ã§ã³ãããã¨ã§ããããã¾ã§ã¯å®ç¸¾ãå¾ããã¨ã主ç®çã¨ãã¦ããããæ¯è¼çå°ããªåã
ã®ãã°çãä¸å¿ã«ã³ã³ããªãã¥ã¼ã·ã§ã³ãè¡ããã¨ãå¤ãã£ãã®ã§ãããä»å¾ã¯Kubernetesã®ã¦ã¼ã¶ã¼ã«å¯¾ãã¦å½±é¿åº¦ã®é«ããã®ããæ¥åä¸ã®èª²é¡è§£æ±ºã«ç¹ãããã®ã«ææ¦ã®å¹
ãåºãããã¨æã£ã¦ãã¾ããæè¿ã¯èªèº«ãã³ã¼ããã¼ã¹ã®éçºãä¿®æ£ã«æºãã£ãå
容ãå
¬å¼ããã¥ã¡ã³ãã«åæ ããã¨è¨ããã¨ãè¡ã£ã¦ãã¾ããããããç®æ¨ã«åãã¦ã®1æ©ã ã¨èãã¦ãã¾ãã</p>
<p><strong>Junya:</strong> ãããã¨ããããã¾ããï¼</p>
<h3 id="yoshiki-fujikaneãã-https-github-com-ffjlabo-cyberagent-inc-https-www-cyberagent-co-jp"><a href="https://github.com/ffjlabo">Yoshiki Fujikaneãã</a>ï¼<a href="https://www.cyberagent.co.jp/">CyberAgent, Inc.</a>ï¼</h3>
<p>Yoshiki Fujikaneããã¯ãCNCFã®Sandboxããã¸ã§ã¯ãã®ã²ã¨ãã§ãã<a href="https://pipecd.dev/">PipeCD</a>ã®ã¡ã³ããã®ã²ã¨ãã§ãã
PipeCDã®Kubernetesãµãã¼ãã«é¢ããæ°æ©è½ã®éçºã®ä»ã«ãã³ãã¥ããã£éå¶ããå種æè¡ã«ã³ãã¡ã¬ã³ã¹ã¸ã®ç»å£ãç©æ¥µçã«è¡ã£ã¦ãã¾ãã</p>
<p><strong>Junya:</strong> ãªãKubernetes Upstream Trainingã«åå ãããã¨æãã¾ãããï¼</p>
<p><strong>Yoshiki:</strong> åå ãã彿ã¯ã¾ã å¦çæä»£ã§ããããã®æã¯EKSã軽ã触ã£ã¦ããã ãã§ãããããªããé£ãããã©ãã£ããããªï¼ã¨k8sèªä½ã«èå³ããµãããã¨æã£ã¦ããç¶æ
ã§ãããå½æã¯æ¬å½ã«OSSã¯é²ã®ä¸ã®åå¨ã§ãã¾ãã¦ãk8sã®upstreamã®éçºãªãã¦ããããã¦æã®å±ããªãåå¨ã ã¨æã£ã¦ã¾ãããOSSã«ã¯ãã¨ãã¨èå³ããã£ãã®ã§ãããä½ããå§ããã°ããã®ãããããªãã£ãã§ãããããªæã«kubernetes upstream trainingã®åå¨ãç¥ã£ã¦ãk8sã¸ã®ã³ã³ããªãã¥ã¼ã·ã§ã³ã«ææ¦ãã¦ã¿ããã¨æãã¾ããã</p>
<p><strong>Junya:</strong> åå ãã¦ã¿ã¦ãã©ã®ãããªææ³ãæã¡ã¾ãããï¼</p>
<p><strong>Yoshiki:</strong> OSSã«é¢ããã³ãã¥ããã£ãã©ããªãã®ããç¥ãããã«ã±ã¨ãã¦ã¨ã¦ãããããããªã¨æãã¾ããã彿ã¯è±èªåãããã¾ã§é«ããªãã䏿¬¡æ
å ±ãè¦ã«è¡ããã¨ã¯èªåã«ã¨ã£ã¦å¤§ããªãã¼ãã«ã§ããã
k8sã¯é常ã«å¤§ããªããã¸ã§ã¯ããªã®ã§ãã³ã³ããªãã¥ã¼ã·ã§ã³ã«å¿
è¦ãªãã¨ã ãã§ãªããå
¨ä½åããã¾ãããã£ã¦ããªãç¶æ
ã§ãããupstream trainingã§ã¯ãã³ãã¥ããã£ã®æ§é ãæ¥æ¬èªã§èª¬æãã¦ããã ããããã§ãã³ã³ããªãã¥ã¼ã·ã§ã³ãå®éã«è¡ãã¨ããã¾ã§ä¸éãçµé¨ãããã¨ãã§ãã¾ãããããã§ã䏿¬¡æ
å ±ã«é¢ããæ
å ±ãå
±æãã¦ãã ãã£ããããã§ããã®å¾èªåãªãã«ã¨ã³ããªã¼ãã¤ã³ãã¨ãã¦å©ç¨ãã¤ã¤è¿½å ã§èª¿æ»ããããã«ã±ã¥ããã«ãªã£ã¦é常ã«ãããããã£ãã§ãããã®çµé¨ããã䏿¬¡æ
å ±ãæ´çãã¤ã¤è¦ãç¿æ
£ã身ã«ã¤ããå¿
è¦ããããªã¨æããæ°ã«ãªã£ããã®ã¯GitHubã®issueãdocsãæ¼ãã«è¦ã«è¡ãããã«ãªãã¾ãããçµæã¨ãã¦ãä»ã¯k8sã®ã³ã³ããªãã¥ã¼ã·ã§ã³èªä½ã¯è¡ã£ã¦ãã¾ããããããã§ã®çµé¨ãå¥ããã¸ã§ã¯ãã«ã³ã³ããªãã¥ã¼ã·ã§ã³ããããã®ç´ å°ã¨ãªã£ã¦å½¹ç«ã£ã¦ãã¾ãã</p>
<p><strong>Junya:</strong> ç¾å¨ã¯ã©ã®ãããªé åã§ã³ã³ããªãã¥ã¼ã·ã§ã³ãè¡ã£ã¦ãã¾ããï¼å¥ã®ããã¸ã§ã¯ãã¨ã¯ã©ã®ãããªãã®ã§ããããï¼</p>
<p><strong>Yoshiki:</strong> ç¾å¨ã¯k8sããã¯å°ãé¢ãã¦ãã¦ãCNCFã®Sandbox Projectã§ããPipeCDã®ã¡ã³ããããã£ã¦ãã¾ããPipeCDã¯CDãã¼ã«ã®ä¸ã¤ã§ãæ§ã
ãªã¢ããªã±ã¼ã·ã§ã³ãã©ãããã©ã¼ã ã«å¯¾ãã¦GitOpsã¹ã¿ã¤ã«ã§ãããã¤ããæ©è½ãæã£ã¦ãã¾ãããã®ãã¼ã«ã¯ãå
ã
ãµã¤ãã¼ã¨ã¼ã¸ã§ã³ãå
é¨ã§éçºãå§ã¾ãã¾ããã大尿§ã
ãªãã¼ã ãç°ãªããã©ãããã©ã¼ã ãæ¡ç¨ãã¦ããä¸ã§ãçµ±ä¸çãªUXã§å
±éã§å©ç¨ã§ããCDåºç¤ãå®ç¾ããããã«éçºãé²ããããèæ¯ãããã¾ããç¾å¨ã¯k8sãAWS ECSãLambdaãCloud RunãTerraformã¨ãã£ããã©ãããã©ã¼ã ã«å¯¾å¿ãã¦ãã¾ãã</p>
<p><strong>Junya:</strong> PipeCDãã¼ã ã®ä¸ã§ã¯ã©ã®ãããªå½¹å²ã§ããï¼</p>
<p><strong>Yoshiki:</strong> ç§ã¯ãã¼ã å
ã§ã¯k8så¨ãã®æ©è½æ¹åãéçºããã«ã¿ã¤ã ã®ä»äºã¨ãã¦è¡ã£ã¦ãã¾ãã社å
åãã«PipeCDãSaaSã¨ãã¦æä¾ãã¦ããããããã®ãµãã¼ãã®ä¸ç°ã¨ãã¦ãæ°è¦æ©è½ã®è¿½å ãæ¢åæ©è½ã®æ¹åãªã©ãè¡ããã¨ã主ãªç®çã§ããããã«ãã³ã¼ã以å¤ã®ã³ã³ããªãã¥ã¼ã·ã§ã³ã¨ãã¦ã¯ãPipeCDèªä½ã®ã³ãã¥ããã£æ¡å¤§ã«åãã¦å種ç»å£ã§ãã£ãããã³ãã¥ããã£ãã¼ãã£ã³ã°ã®éå¶ãè¡ã£ã¦ããã¨ããã§ãã</p>
<p><strong>Junya:</strong> Kuberneteså¨ãã®æ©è½æ¹åãéçºã¨ã¯å
·ä½çã«ã©ã®ãããªãã®ã§ããï¼</p>
<p><strong>Yoshiki:</strong> PipeCDã¯Kubernetesã®GitOpsãProgressive Deliveryããµãã¼ããã¦ãã¦ããããã®æ©è½éçºãªã©ã§ããç´è¿ã ã¨ããã«ãã¯ã©ã¹ã¿ä¸ã¸ã®ãããã¤ãå¹çåããããã®æ©è½éçºãé²ãã¦ããã¨ããã§ãã</p>
<p><strong>Junya:</strong> OSSã³ã³ããªãã¥ã¼ã·ã§ã³ãè¡ããªãã§ãé£ããã£ããã¨ã¯ããã¾ããï¼</p>
<p><strong>Yoshiki:</strong> æ©è½ã®æ±ç¨æ§ãç¶æãã¤ã¤ãã¦ã¼ã¶ã®ã¦ã¼ã¹ã±ã¼ã¹ãæºããããã«éçºãé²ãããã¨ã§ãã社å
SaaSãéç¨ããä¸ã§æ©è½è¦æãããã ããéã«ã¯ããã¡ãã課é¡ã解決ããããã«ã¾ãã¯æ©è½è¿½å ãæ¤è¨ãã¾ãã䏿¹ã§ãPipeCDã¯OSSã¨ãã¦ããå¤ãã®ã¦ã¼ã¶ã«ä½¿ã£ã¦ããããã¨ãèãã¦è¡ãããã§ãããªã®ã§ãããã¦ã¼ã¹ã±ã¼ã¹ããã¨ã«å¥ã®ã¦ã¼ã¹ã±ã¼ã¹ã¨ãã¦ã使ãããã©ãããèããã½ããã¦ã§ã¢ã¨ãã¦æ±ç¨æ§ãããããããã«æèãã¦ãã¾ãã</p>
<p><strong>Junya:</strong> ä»å¾ã®ç®æ¨ãæãã¦ãã ããï¼</p>
<p><strong>Yoshiki:</strong> PipeCDã®æ©è½æ¡å¼µã«åãå
¥ãã¦ããããã¨èãã¦ãã¾ããPipeCDã¯ç¾å¨One CD for All ã®ã¹ãã¼ã¬ã³ã®ãã¨éçºãé²ãã¦ãã¾ããå
ç¨ãä¼ãããéããk8sãAWS ECSãLambdaãCloud RunãTerraform ã®5種é¡ã«å¯¾å¿ãã¦ãã¾ããããã以å¤ã«ããã©ãããã©ã¼ã ã¯åå¨ãã¾ãããä»å¾ãæ°ããªãã©ãããã©ã¼ã ãå°é ãã¦ããããããã¾ãããããã§ãPipeCDã¯ç¾å¨ã¦ã¼ã¶ãç¬èªã«æ¡å¼µã§ããããã«ãã©ã°ã¤ã³æ©æ§ã®éçºãé²ãã¦ãã¾ããããã«åãå
¥ãã¦ããããã§ãããã¾ããk8sã®ãã«ãã¯ã©ã¹ã¿ãããã¤åãã®æ©è½éçºãé²ãã¦ããã¨ããã§ããããããããã¤ã³ãã¯ãã®ããã³ã³ããªãã¥ã¼ã·ã§ã³ããã¦ããããã¨èãã¦ã¾ãã</p>
<p><strong>Junya:</strong> ãããã¨ããããã¾ããï¼</p>
<h2 id="kubernetes-upstream-training-ã®æªæ¥">Kubernetes Upstream Training ã®æªæ¥</h2>
<p>ç§ãã¡ã¯ããããããKubernetes Upstream Training in Japanãç¶ç¶ãã¦éå¬ããå¤ãã®æ°ããã³ã³ããªãã¥ã¼ã¿ã¼ãè¿ãããã¨èãã¦ãã¾ãã
次åã®éå¬ã¯11ææ«ã®<a href="https://event.cloudnativedays.jp/cndw2024">CloudNative Days Winter 2024</a>ã®ä¸ã§ã®éå¬ãäºå®ãã¦ãã¾ãã</p>
<p>ã¾ããç§ãã¡ã®ç®æ¨ã¯ããããã®ãã¬ã¼ãã³ã°ããã°ã©ã ãæ¥æ¬ã ãã§ãªããä¸çä¸ã«åºãã¦ãããã¨ã§ãã
Kubernetesã¯ä»å¹´ã§10å¨å¹´ãè¿ãã¾ããããã³ãã¥ããã£ãããã¾ã§ä»¥ä¸ã«æ´»çºã«ãªãããã«ã¯ãä¸çä¸ã®äººã
ãè²¢ç®ãç¶ãããã¨ãéè¦ã§ãã
ç¾å¨ãUpstream Trainingã¯ããã¤ãã®å°åã§éå¬ããã¦ãã¾ãããç§ãã¡ã¯ããã«å¤ãã®å°åã§ã®éå¬ãç®æãã¦ãã¾ãã</p>
<p>å¤ãã®äººã
ãKubernetesã³ãã¥ããã£ã«åå ããè²¢ç®ãããã¨ã§ãç§ãã¡ã®ã³ãã¥ããã£ãã¾ãã¾ãæ´»æ°ã¥ããã¨ã楽ãã¿ã«ãã¦ãã¾ãï¼</p>
- Kubernetes 1.31: Fine-grained SupplementalGroups controlhttps://kubernetes.io/ja/blog/2024/08/22/fine-grained-supplementalgroups-control/Thu, 22 Aug 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/08/22/fine-grained-supplementalgroups-control/
<p>ãã®è¨äºã§ã¯Kubernetes 1.31ã®æ°æ©è½ã§ãããPodå
ã®ã³ã³ããã«ãããè£å©ã°ã«ã¼ãå¶å¾¡ã®æ¹åæ©è½ã«ã¤ãã¦èª¬æãã¾ãã</p>
<h2 id="åæ©-ã³ã³ããã¤ã¡ã¼ã¸å
ã®-etc-group-ã«å®ç¾©ãããæé»çãªã°ã«ã¼ãæ
å ±">åæ©: ã³ã³ããã¤ã¡ã¼ã¸å
ã®<code>/etc/group</code>ã«å®ç¾©ãããæé»çãªã°ã«ã¼ãæ
å ±</h2>
<p>ãã®æåã¯å¤ãã®Kubernetesã¯ã©ã¹ã¿ã¼ã®ã¦ã¼ã¶ã¼ã管çè
ã«ã¨ã£ã¦ãã¾ãç¥ããã¦ããªãããããã¾ããããKubernetesã¯ãããã©ã«ãã§ã¯ãPodã§å®ç¾©ãããæ
å ±ã«å ãã¦ãã³ã³ããã¤ã¡ã¼ã¸å
ã®<code>/etc/group</code>ã®ã°ã«ã¼ãæ
å ±ã <em>ãã¼ã¸</em> ãã¾ãã</p>
<p>ä¾ãè¦ã¦ã¿ã¾ãããããã®Podã¯securityContextã§<code>runAsUser=1000</code>ã<code>runAsGroup=3000</code>ã<code>supplementalGroups=4000</code>ãæå®ãã¦ãã¾ãã</p>
<div class="highlight code-sample">
<div class="copy-code-icon">
<a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/implicit-groups.yaml" download="implicit-groups.yaml"><code>implicit-groups.yaml</code>
</a><img src="https://kubernetes.io/images/copycode.svg" class="icon-copycode" onclick="copyCode('implicit-groups-yaml')" title="Copy implicit-groups.yaml to clipboard"></img></div>
<div class="includecode" id="implicit-groups-yaml"><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>implicit-groups<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">runAsUser</span>:<span style="color:#bbb"> </span><span style="color:#666">1000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">runAsGroup</span>:<span style="color:#bbb"> </span><span style="color:#666">3000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">supplementalGroups</span>:<span style="color:#bbb"> </span>[<span style="color:#666">4000</span>]<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>ctr<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>registry.k8s.io/e2e-test-images/agnhost:2.45<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">command</span>:<span style="color:#bbb"> </span>[<span style="color:#bbb"> </span><span style="color:#b44">"sh"</span>,<span style="color:#bbb"> </span><span style="color:#b44">"-c"</span>,<span style="color:#bbb"> </span><span style="color:#b44">"sleep 1h"</span><span style="color:#bbb"> </span>]<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">allowPrivilegeEscalation</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span></span></span></code></pre></div></div>
</div>
<p><code>ctr</code>ã³ã³ããã§<code>id</code>ã³ãã³ããå®è¡ããã¨ä½ãåºåãããã§ããããï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">#</span> Podã使ãã¦ã¿ã¾ãããã
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl apply -f https://k8s.io/blog/2024-08-22-Fine-grained-SupplementalGroups-control/implicit-groups.yaml
</span></span><span style="display:flex;"><span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">#</span> Podã®ã³ã³ãããå®è¡ããã¦ãããã¨ã確èªãã¾ãã
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl get pod implicit-groups
</span></span><span style="display:flex;"><span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">#</span> idã³ãã³ãã確èªãã¾ãã
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl <span style="color:#a2f">exec</span> implicit-groups -- id
</span></span></code></pre></div><p>åºåã¯æ¬¡ã®ããã«ãªãã§ãããã</p>
<pre tabindex="0"><code class="language-none" data-lang="none">uid=1000 gid=3000 groups=3000,4000,50000
</code></pre><p>Podãããã§ã¹ãã«ã¯<code>50000</code>ã¯ä¸åå®ç¾©ããã¦ããªãã«ãããããããè£å©ã°ã«ã¼ã(<code>groups</code>ãã£ã¼ã«ã)ã«å«ã¾ãã¦ããã°ã«ã¼ãID<code>50000</code>ã¯ä¸ä½ã©ãããæ¥ãã®ã§ãããã? çãã¯ã³ã³ããã¤ã¡ã¼ã¸ã®<code>/etc/group</code>ãã¡ã¤ã«ã§ãã</p>
<p>ã³ã³ããã¤ã¡ã¼ã¸ã®<code>/etc/group</code>ã®å
容ãä¸è¨ã®ããã«ãªã£ã¦ãããã¨ã確èªã§ããã§ãããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl <span style="color:#a2f">exec</span> implicit-groups -- cat /etc/group
</span></span><span style="display:flex;"><span><span style="color:#888">...
</span></span></span><span style="display:flex;"><span><span style="color:#888">user-defined-in-image:x:1000:
</span></span></span><span style="display:flex;"><span><span style="color:#888">group-defined-in-image:x:50000:user-defined-in-image
</span></span></span></code></pre></div><p>ãªãã»ã©ï¼ã³ã³ããã®ãã©ã¤ããªã¦ã¼ã¶ã¼ã§ããã¦ã¼ã¶ã¼(<code>1000</code>)ãã°ã«ã¼ã(<code>50000</code>)ã«å±ãã¦ãããã¨ãæå¾ã®ã¨ã³ããªãã確èªåºæ¥ã¾ããã</p>
<p>ãã®ããã«ãã³ã³ããã¤ã¡ã¼ã¸ä¸ã®<code>/etc/group</code>ã§å®ç¾©ããããã³ã³ããã®ãã©ã¤ããªã¦ã¼ã¶ã¼ã®ã°ã«ã¼ãæ
å ±ã¯ãPodããã®æ
å ±ã«å ã㦠<em>æé»çã«ãã¼ã¸</em> ããã¾ãããã ãããã®æåã¯ãç¾å¨ã®CRIå®è£
ãDockerããå¼ãç¶ãã è¨è¨ä¸ã®æ±ºå®ã§ãããã³ãã¥ããã£ã¯ããã¾ã§ãã®æåã«ã¤ãã¦åæ¤è¨ãããã¨ã¯ã»ã¨ãã©ããã¾ããã§ããã</p>
<h3 id="ä½ãæªãã®ã">ä½ãæªãã®ãï¼</h3>
<p>ã³ã³ããã¤ã¡ã¼ã¸ã®<code>/etc/group</code>ãã <em>æé»çã«ãã¼ã¸</em> ãããã°ã«ã¼ãæ
å ±ã¯ãç¹ã«ããªã¥ã¼ã ã¢ã¯ã»ã¹ãè¡ãéã«ãã»ãã¥ãªãã£ä¸ã®æ¸å¿µãå¼ãèµ·ãããã¨ãããã¾ã(詳細ã¯<a href="https://issue.k8s.io/112879">kubernetes/kubernetes#112879</a>ãåç
§ãã¦ãã ãã)ããªããªããLinuxã«ããã¦ããã¡ã¤ã«ãã¼ããã·ã§ã³ã¯uid/gidã§å¶å¾¡ããã¦ããããã§ããæ´ã«æªããã¨ã«ã<code>/etc/group</code>ã«ç±æ¥ããæé»çãªgidã¯ããããã§ã¹ãã«ã°ã«ã¼ãæ
å ±ã®æããããç¡ããããããªã·ã¼ã¨ã³ã¸ã³çã§ãã§ãã¯ã»æ¤ç¥ããããã¨ãåºæ¥ã¾ãããããã¯Kubernetesã»ãã¥ãªãã£ã®è¦³ç¹ãããæ¸å¿µã¨ãªãã¾ãã</p>
<h2 id="podã«ãããfine-grained-ããç´°ãã-supplementalgroups-control-supplementarygroupspolicy">Podã«ãããFine-grained(ããç´°ãã) SupplementalGroups control: <code>SupplementaryGroupsPolicy</code></h2>
<p>ãã®èª²é¡ã解決ããããã«ãKubernetes 1.31ã¯Podã®<code>.spec.securityContext</code>ã«ãæ°ãã<code>supplementalGroupsPolicy</code>ãã£ã¼ã«ãã追å ãã¾ãã</p>
<p>ãã®ãã£ã¼ã«ãã¯ãPodå
ã®ã³ã³ããããã»ã¹ã«ä»ä¸ãããè£å©ã°ã«ã¼ããæ±ºå®ãããæ¹æ³ãå¶å¾¡ã§ããããã«ãã¾ããæå¹ãªããªã·ã¼ã¯æ¬¡ã®2ã¤ã§ãã</p>
<ul>
<li>
<p><em>Merge</em>: <code>/etc/group</code>ã§å®ç¾©ããã¦ãããã³ã³ããã®ãã©ã¤ããªã¦ã¼ã¶ã¼ãæå±ããã°ã«ã¼ãæ
å ±ããã¼ã¸ãã¾ããæå®ããã¦ããªãå ´åããã®ããªã·ã¼ãããã©ã«ãã§ã(徿¹äºææ§ãèæ
®ãã¦æ¢åã®æåã¨åæ§)ã</p>
</li>
<li>
<p><em>Strict</em>: <code>fsGroup</code>ã<code>supplementalGroups</code>ã<code>runAsGroup</code>ãã£ã¼ã«ãã§æå®ãããã°ã«ã¼ãIDã®ã¿è£å©ã°ã«ã¼ãã«æå®ããã¾ããã¤ã¾ãã<code>/etc/group</code>ã§å®ç¾©ããããã³ã³ããã®ãã©ã¤ããªã¦ã¼ã¶ã¼ã®ã°ã«ã¼ãæ
å ±ã¯ãã¼ã¸ããã¾ããã</p>
</li>
</ul>
<p>ã§ã¯ãã©ã®ããã«<code>Strict</code>ããªã·ã¼ãåä½ãããè¦ã¦ã¿ã¾ãããã</p>
<div class="highlight code-sample">
<div class="copy-code-icon">
<a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/strict-supplementalgroups-policy.yaml" download="strict-supplementalgroups-policy.yaml"><code>strict-supplementalgroups-policy.yaml</code>
</a><img src="https://kubernetes.io/images/copycode.svg" class="icon-copycode" onclick="copyCode('strict-supplementalgroups-policy-yaml')" title="Copy strict-supplementalgroups-policy.yaml to clipboard"></img></div>
<div class="includecode" id="strict-supplementalgroups-policy-yaml"><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>strict-supplementalgroups-policy<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">runAsUser</span>:<span style="color:#bbb"> </span><span style="color:#666">1000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">runAsGroup</span>:<span style="color:#bbb"> </span><span style="color:#666">3000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">supplementalGroups</span>:<span style="color:#bbb"> </span>[<span style="color:#666">4000</span>]<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">supplementalGroupsPolicy</span>:<span style="color:#bbb"> </span>Strict<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>ctr<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>registry.k8s.io/e2e-test-images/agnhost:2.45<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">command</span>:<span style="color:#bbb"> </span>[<span style="color:#bbb"> </span><span style="color:#b44">"sh"</span>,<span style="color:#bbb"> </span><span style="color:#b44">"-c"</span>,<span style="color:#bbb"> </span><span style="color:#b44">"sleep 1h"</span><span style="color:#bbb"> </span>]<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">allowPrivilegeEscalation</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span></span></span></code></pre></div></div>
</div>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">#</span> Podã使ãã¦ã¿ã¾ãããã
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl apply -f https://k8s.io/blog/2024-08-22-Fine-grained-SupplementalGroups-control/strict-supplementalgroups-policy.yaml
</span></span><span style="display:flex;"><span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">#</span> Podã®ã³ã³ãããå®è¡ããã¦ãããã¨ã確èªãã¾ãã
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl get pod strict-supplementalgroups-policy
</span></span><span style="display:flex;"><span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">#</span> ããã»ã¹ã®ã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã確èªãã¾ãã
</span></span><span style="display:flex;"><span><span style="color:#888">kubectl exec -it strict-supplementalgroups-policy -- id
</span></span></span></code></pre></div><p>åºåã¯ãã®ããã«ãªãã¾ãã</p>
<pre tabindex="0"><code class="language-none" data-lang="none">uid=1000 gid=3000 groups=3000,4000
</code></pre><p><code>Strict</code>ããªã·ã¼ã«ãã£ã¦ã°ã«ã¼ã<code>50000</code>ã<code>groups</code>ããé¤å¤ããã¦ããã®ã確èªã§ãã¾ããï¼</p>
<p>ãã®ããã«ã確å®ã«<code>supplementalGroupsPolicy: Strict</code>ãè¨å®ãã(ããªã·ã¼ã¨ã³ã¸ã³çã«ãã£ã¦å¼·å¶ãã)ãã¨ã§ãæé»çãªè£å©ã°ã«ã¼ããåé¿ãããã¨ãå¯è½ã«ãªãã¾ãã</p>
<div class="alert alert-info" role="alert"><h4 class="alert-heading">åè:</h4>ãã®ãã£ã¼ã«ãã®å¤ãå¼·å¶ããã ãã§ã¯ä¸ååãªå ´åãããã¾ãããªããªããããã»ã¹ãèªåèªèº«ã®ã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã夿´ã§ããæ¨©é/ã±ã¼ãããªãã£ãæã£ã¦ããå ´åãããããã§ããè©³ç´°ã¯æ¬¡ã®ã»ã¯ã·ã§ã³ãåç
§ãã¦ãã ããã</div>
<h2 id="podã¹ãã¼ã¿ã¹ã«ãããä»ä¸ãããã¦ã¼ã¶ã¼-ã°ã«ã¼ãæ
å ±ã®ç¢ºèª">Podã¹ãã¼ã¿ã¹ã«ãããä»ä¸ãããã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã®ç¢ºèª</h2>
<p>ãã®æ©è½ã¯ãPodã®<code>status.containerStatuses[].user.linux</code>ãã£ã¼ã«ãã§ã³ã³ããã®æåã®ããã»ã¹ã«ä»ä¸ãããã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ãå
¬éãã¦ãã¾ããæé»çãªã°ã«ã¼ãIDãä»ä¸ããã¦ãããã©ããã確èªããã®ã«ä¾¿å©ã§ãããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#00f;font-weight:bold">...</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">status</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containerStatuses</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>ctr<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">user</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">linux</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">gid</span>:<span style="color:#bbb"> </span><span style="color:#666">3000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">supplementalGroups</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">3000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#666">4000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">uid</span>:<span style="color:#bbb"> </span><span style="color:#666">1000</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#00f;font-weight:bold">...</span><span style="color:#bbb">
</span></span></span></code></pre></div>
<div class="alert alert-info" role="alert"><h4 class="alert-heading">åè:</h4><code>status.containerStatuses[].user.linux</code>ãã£ã¼ã«ãã§å
¬éããã¦ããã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã¯ãã³ã³ããã®æåã®ããã»ã¹ã«ã<em>æåã«ä»ä¸ããã</em> æ
å ±ã§ãããã¨ã«æ³¨æãã¦ãã ããã
ãããã®ããã»ã¹ããèªèº«ã®ã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã夿´ã§ããã·ã¹ãã ã³ã¼ã«(ä¾ãã° <a href="https://man7.org/linux/man-pages/man2/setuid.2.html"><code>setuid(2)</code></a>,
<a href="https://man7.org/linux/man-pages/man2/setgid.2.html"><code>setgid(2)</code></a>,
<a href="https://man7.org/linux/man-pages/man2/setgroups.2.html"><code>setgroups(2)</code></a>ç)ãå®è¡ããæ¨©éãæã£ã¦ããå ´åãããã»ã¹èªèº«ã§åçã«å¤æ´ãå¯è½ãªããã§ãã
ã¤ã¾ããå®éã«ããã»ã¹ã«ä»ä¸ããã¦ããã¦ã¼ã¶ã¼ãã°ã«ã¼ãæ
å ±ã¯åçã«å¤åãã¾ãã</div>
<h2 id="ãã®æ©è½ãå©ç¨ããã«ã¯">ãã®æ©è½ãå©ç¨ããã«ã¯</h2>
<p><code>supplementalGroupsPolicy</code>ãã£ã¼ã«ããæå¹åããã«ã¯ãä¸è¨ã®ã³ã³ãã¼ãã³ããå©ç¨ããå¿
è¦ãããã¾ãã</p>
<ul>
<li>Kubernetes: v1.31以éããã¤ã<code>SupplementalGroupsPolicy</code><a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ãæå¹åããã¦ãããã¨ãv1.31ç¾å¨ããã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ã¢ã«ãã¡ã§ãã</li>
<li>CRIå®è£
:
<ul>
<li>containerd: v2.0以é</li>
<li>CRI-O: v1.31以é</li>
</ul>
</li>
</ul>
<p>ãã¼ãã®<code>.status.features.supplementalGroupsPolicy</code>ãã£ã¼ã«ãã§ãã®æ©è½ãå©ç¨å¯è½ãã©ãã確èªåºæ¥ã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Node<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#00f;font-weight:bold">...</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">status</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">features</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">supplementalGroupsPolicy</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span></span></span></code></pre></div><h2 id="å°æ¥ã®å±æ">å°æ¥ã®å±æ</h2>
<p>Kubernetes SIG Nodeã¯ããã®æ©è½ãå°æ¥çãªKubernetesã®ãªãªã¼ã¹ã§ãã¼ã¿çã«ææ ¼ããæçµçã«ã¯ä¸è¬æä¾(GA)ããããã¨ãæãã§ãããæå¾
ãã¦ãã¾ãããããªãã°ãã¦ã¼ã¶ã¼ã¯ãã¯ãæ©è½ã²ã¼ããæåã§æå¹ã«ããå¿
è¦ããªããªãã¾ãã</p>
<p><code>supplementalGroupsPolicy</code>ãæå®ããã¦ããªãå ´åã¯ã徿¹äºææ§ã®ããã«<code>Merge</code>ããªã·ã¼ãé©ç¨ããã¾ãã</p>
<h2 id="ããå¦ã¶ã«ã¯">ããå¦ã¶ã«ã¯ï¼</h2>
<!-- https://github.com/kubernetes/website/pull/46920 -->
<ul>
<li><a href="https://kubernetes.io/ja/docs/tasks/configure-pod-container/security-context/">Podã¨ã³ã³ããã«ã»ãã¥ãªãã£ã³ã³ããã¹ããè¨å®ãã</a>(<code>supplementalGroupsPolicy</code>ã®è©³ç´°)</li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3619">KEP-3619: Fine-grained SupplementalGroups control</a></li>
</ul>
<h2 id="åå ããã«ã¯">åå ããã«ã¯ï¼</h2>
<p>ãã®æ©è½ã¯SIG Nodeã³ãã¥ããã£ã«ãã£ã¦æ¨é²ããã¦ãã¾ããã³ãã¥ããã£ã«åå ãã¦ãä¸è¨ã®æ©è½ããã以å¤ã®ã¢ã¤ãã¢ããã£ã¼ãããã¯ãå
±æãã¦ãã ãããçããããã®ãæè¦ããå¾
ã¡ãã¦ãã¾ãï¼</p>
- Kubernetes 1.31: SPDYããWebSocketã¸ã®ã¹ããªã¼ãã³ã°ã®ç§»è¡https://kubernetes.io/ja/blog/2024/08/20/websockets-transition/Tue, 20 Aug 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/08/20/websockets-transition/
<p>Kubernetes 1.31ã§ã¯ãkubectlãã¹ããªã¼ãã³ã°ããéã«ãSPDYã«ä»£ããWebSocketãããã³ã«ãããã©ã«ãã§ä½¿ç¨ããããã«ãªãã¾ããã</p>
<p>ãã®è¨äºã§ã¯ããã®å¤æ´ãæå³ããã¨ããã¨ããªããããã®ã¹ããªã¼ãã³ã°APIãéè¦ãªã®ãã«ã¤ãã¦èª¬æãã¾ãã</p>
<h2 id="kubernetesã®ã¹ããªã¼ãã³ã°api">Kubernetesã®ã¹ããªã¼ãã³ã°API</h2>
<p>Kubernetesã§ã¯ãHTTPã¾ãã¯RESTfulã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã¦å
¬éãããç¹å®ã®ã¨ã³ããã¤ã³ãããã¹ããªã¼ãã³ã°ãããã³ã«ãå¿
è¦ãªãã¹ããªã¼ãã³ã°æ¥ç¶ã«ã¢ããã°ã¬ã¼ãããã¾ãã
ãªã¯ã¨ã¹ãã»ã¬ã¹ãã³ã¹åãããã³ã«ã§ããHTTPã¨ã¯ç°ãªããã¹ããªã¼ãã³ã°ãããã³ã«ã¯åæ¹åã»ä½é
å»¶ã®æ°¸ç¶çãªæ¥ç¶ãæä¾ãããªã¢ã«ã¿ã¤ã ã§ã®å¯¾è©±ãå¯è½ã«ãã¾ãã
ã¹ããªã¼ãã³ã°ãããã³ã«ã¯ãã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã¼éã§åä¸ã®æ¥ç¶ãä»ãã¦ãåæ¹åã§ã®ãã¼ã¿ã®èªã¿æ¸ãããµãã¼ããã¾ãã
ãã®ã¿ã¤ãã®æ¥ç¶ã¯ãä¾ãã°ããã¼ã«ã«ã¯ã¼ã¯ã¹ãã¼ã·ã§ã³ããå®è¡ä¸ã®ã³ã³ããå
ã«ã·ã§ã«ã使ãããã®ã³ã³ããå
ã§ã³ãã³ããå®è¡ããå ´åãªã©ã«å½¹ç«ã¡ã¾ãã</p>
<h2 id="ãªãã¹ããªã¼ãã³ã°ãããã³ã«ã夿´ããã®ã">ãªãã¹ããªã¼ãã³ã°ãããã³ã«ã夿´ããã®ãï¼</h2>
<p>v1.31ãªãªã¼ã¹ä»¥åã¯ãKubernetesã¯ã¹ããªã¼ãã³ã°æ¥ç¶ãã¢ããã°ã¬ã¼ãããéã«ãããã©ã«ãã§SPDY/3.1ãããã³ã«ã使ç¨ãã¦ãã¾ããã
SPDY/3.1ã¯8å¹´åã«éæ¨å¥¨ã¨ãªã£ã¦ãããæ¨æºåããããã¨ã¯ããã¾ããã§ããã
å¤ãã®ææ°ã®ãããã·ãã²ã¼ãã¦ã§ã¤ããã¼ããã©ã³ãµã¼ã¯ããã®ãããã³ã«ããµãã¼ããã¦ãã¾ããã
ãã®çµæããããã·ãã²ã¼ãã¦ã§ã¤ãä»ãã¦ã¯ã©ã¹ã¿ã¼ã«ã¢ã¯ã»ã¹ãããã¨ããã¨ã<code>kubectl cp</code>ã<code>kubectl attach</code>ã<code>kubectl exec</code>ã<code>kubectl port-forward</code>ãªã©ã®ã³ãã³ããæ©è½ããªããªããã¨ãããã¾ãã</p>
<p>Kubernetes v1.31以éãSIG API Machineryã¯ãKubernetesã¯ã©ã¤ã¢ã³ã(<code>kubectl</code>ãªã©)ããããã®ã³ãã³ãã«ä½¿ç¨ããã¹ããªã¼ãã³ã°ãããã³ã«ããããã¢ãã³ãª<a href="https://datatracker.ietf.org/doc/html/rfc6455">WebSocketã¹ããªã¼ãã³ã°ãããã³ã«</a>ã«å¤æ´ãã¾ããã
WebSocketãããã³ã«ã¯ãç¾å¨ãµãã¼ãããã¦ããæ¨æºåãããã¹ããªã¼ãã³ã°ãããã³ã«ã§ãããæ§ã
ãªã³ã³ãã¼ãã³ããããã°ã©ãã³ã°è¨èªéã®äºææ§ã¨ç¸äºéç¨æ§ãä¿è¨¼ãã¾ãã
WebSocketãããã³ã«ã¯ãSPDYãããææ°ã®ãããã·ãã²ã¼ãã¦ã§ã¤ã§åºããµãã¼ãããã¦ãã¾ãã</p>
<h2 id="ã¹ããªã¼ãã³ã°apiã®ä»çµã¿">ã¹ããªã¼ãã³ã°APIã®ä»çµã¿</h2>
<p>Kubernetesã¯ãçºä¿¡å
ã®HTTPãªã¯ã¨ã¹ãã«ç¹å®ã®ã¢ããã°ã¬ã¼ããããã¼ã追å ãããã¨ã§ãHTTPæ¥ç¶ãã¹ããªã¼ãã³ã°éä¿¡ãå¯è½ãªæ¥ç¶ã¸ã¨åãæ¿ãã¾ãã
ä¾ãã°ãã¯ã©ã¹ã¿ã¼å
ã®<code>nginx</code>ã³ã³ããã§<code>date</code>ã³ãã³ããå®è¡ããããã®HTTPã¢ããã°ã¬ã¼ããªã¯ã¨ã¹ãã¯ã以ä¸ã®ããã«ãªãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl <span style="color:#a2f">exec</span> -v<span style="color:#666">=</span><span style="color:#666">8</span> nginx -- date
</span></span><span style="display:flex;"><span><span style="color:#888">GET https://127.0.0.1:43251/api/v1/namespaces/default/pods/nginx/exec?command=dateâ¦
</span></span></span><span style="display:flex;"><span><span style="color:#888">Request Headers:
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Connection: Upgrade
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Upgrade: websocket
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Sec-Websocket-Protocol: v5.channel.k8s.io
</span></span></span><span style="display:flex;"><span><span style="color:#888"> User-Agent: kubectl/v1.31.0 (linux/amd64) kubernetes/6911225
</span></span></span></code></pre></div><p>ã³ã³ããã©ã³ã¿ã¤ã ãWebSocketã¹ããªã¼ãã³ã°ãããã³ã«ã¨ãå°ãªãã¨ã1ã¤ã®ãµããããã³ã«ãã¼ã¸ã§ã³(ä¾:<code>v5.channel.k8s.io</code>)ããµãã¼ããã¦ããå ´åããµã¼ãã¼ã¯æåã示ã<code>101 Switching Protocols</code>ã¹ãã¼ã¿ã¹ã¨ããã´ã·ã¨ã¼ãããããµããããã³ã«ãã¼ã¸ã§ã³ãå«ãã¦å¿çãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">Response Status: 101 Switching Protocols in 3 milliseconds
</span></span></span><span style="display:flex;"><span><span style="color:#888">Response Headers:
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Upgrade: websocket
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Connection: Upgrade
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Sec-Websocket-Accept: j0/jHW9RpaUoGsUAv97EcKw8jFM=
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Sec-Websocket-Protocol: v5.channel.k8s.io
</span></span></span></code></pre></div><p>ãã®æç¹ã§ãHTTPãããã³ã«ã«ä½¿ç¨ããã¦ããTCPæ¥ç¶ã¯ã¹ããªã¼ãã³ã°æ¥ç¶ã«å¤æ´ããã¦ãã¾ãã
ãã®å¯¾è©±åã·ã§ã«ã§ã®STDINãSTDOUTãSTDERR(ã¿ã¼ããã«ã®ãªãµã¤ãºæ
å ±ãããã»ã¹çµäºã³ã¼ããå«ã)ãã¼ã¿ã¯ããã®ã¢ããã°ã¬ã¼ããããæ¥ç¶ãéãã¦ã¹ããªã¼ãã³ã°ããã¾ãã</p>
<h2 id="æ°ããwebsocketã¹ããªã¼ãã³ã°ãããã³ã«ã®ä½¿ç¨æ¹æ³">æ°ããWebSocketã¹ããªã¼ãã³ã°ãããã³ã«ã®ä½¿ç¨æ¹æ³</h2>
<p>ã¯ã©ã¹ã¿ã¼ã¨kubectlããã¼ã¸ã§ã³1.29以éã®å ´åãSPDYã§ã¯ãªãWebSocketã®ä½¿ç¨ãå¶å¾¡ããããã®ã2ã¤ã®ã³ã³ããã¼ã«ãã¬ã¼ã³ãã£ã¼ãã£ã¼ã²ã¼ãã¨2ã¤ã®kubectlç°å¢å¤æ°ãããã¾ãã
Kubernetes 1.31ã§ã¯ã以ä¸ã®ãã¹ã¦ã®ãã£ã¼ãã£ã¼ã²ã¼ãããã¼ã¿çã§ãããããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ã:</p>
<ul>
<li><a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>
<ul>
<li><code>TranslateStreamCloseWebsocketRequests</code>
<ul>
<li><code>.../exec</code></li>
<li><code>.../attach</code></li>
</ul>
</li>
<li><code>PortForwardWebsockets</code>
<ul>
<li><code>.../port-forward</code></li>
</ul>
</li>
</ul>
</li>
<li>kubectlã®æ©è½ãå¶å¾¡ããç°å¢å¤æ°
<ul>
<li><code>KUBECTL_REMOTE_COMMAND_WEBSOCKETS</code>
<ul>
<li><code>kubectl exec</code></li>
<li><code>kubectl cp</code></li>
<li><code>kubectl attach</code></li>
</ul>
</li>
<li><code>KUBECTL_PORT_FORWARD_WEBSOCKETS</code>
<ul>
<li><code>kubectl port-forward</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<p>å¤ããã¼ã¸ã§ã³ã®ã¯ã©ã¹ã¿ã¼ã«ããã¦ãããã£ã¼ãã£ã¼ã²ã¼ãè¨å®ã管çã§ããå ´åã§ããã°ã<code>TranslateStreamCloseWebsocketRequests</code>(Kubernetes v1.29ã§è¿½å )ã¨<code>PortForwardWebsockets</code>(Kubernetes v1.30ã§è¿½å )ã®ä¸¡æ¹ãæå¹ã«ãã¦ããã®æ°ããåä½ã試ããã¨ãã§ãã¾ãã
ãã¼ã¸ã§ã³1.31ã®<code>kubectl</code>ã¯èªåçã«æ°ããåä½ã使ç¨ã§ãã¾ããããµã¼ãã¼å´ã®æ©è½ãæç¤ºçã«æå¹ã«ãªã£ã¦ããã¯ã©ã¹ã¿ã¼ã«æ¥ç¶ããå¿
è¦ãããã¾ãã</p>
<h2 id="ã¹ããªã¼ãã³ã°apiã«ã¤ãã¦ããã«å¦ã¶">ã¹ããªã¼ãã³ã°APIã«ã¤ãã¦ããã«å¦ã¶</h2>
<ul>
<li><a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/4006-transition-spdy-to-websockets">KEP 4006 - Transitioning from SPDY to WebSockets</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc6455">RFC 6455 - The WebSockets Protocol</a></li>
<li><a href="https://kubernetes.io/blog/2024/05/01/cri-streaming-explained/">Container Runtime Interface streaming explained</a></li>
</ul>
- Kubernetes v1.31: ãã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ã«ããã¯ã©ã¹ã¿ã¼ããã©ã¼ãã³ã¹ã®åä¸https://kubernetes.io/ja/blog/2024/08/15/consistent-read-from-cache-beta/Thu, 15 Aug 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/08/15/consistent-read-from-cache-beta/
<p>Kubernetesã¯ã³ã³ããåãããã¢ããªã±ã¼ã·ã§ã³ã®å
ç¢ãªãªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ã§ç¥ããã¦ãã¾ãããã¯ã©ã¹ã¿ã¼ã®è¦æ¨¡ãæ¡å¤§ããã«ã¤ãã¦ãã³ã³ããã¼ã«ãã¬ã¼ã³ã¸ã®è² è·ãããã«ããã¯ã¨ãªãå¯è½æ§ãããã¾ãã
ç¹ã«å¤§ããªèª²é¡ã¨ãªã£ã¦ããã®ã¯ãetcdãã¼ã¿ã¹ãã¢ããã®ãã¼ã¿èªã¿è¾¼ã¿ã®å³å¯ãªæ´åæ§ãä¿è¨¼ãããã¨ã§ãã
ãããå®ç¾ããã«ã¯ããªã½ã¼ã¹ã大éã«æ¶è²»ããã¯ã©ã¼ã©ã èªã¿è¾¼ã¿ãå¿
è¦ã§ããã</p>
<p>æ¬æ¥ãKubernetesã³ãã¥ããã£ã¯ã大ããªæ¹åãçºè¡¨ã§ãããã¨ãå¬ããæãã¾ãã
Kubernetes v1.31ã«ããã¦ãããã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ãããã¼ã¿çã«ç§»è¡ãã¾ããã</p>
<h3 id="ãªãæ´åæ§ã®ããèªã¿è¾¼ã¿ãéè¦ãªã®ã">ãªãæ´åæ§ã®ããèªã¿è¾¼ã¿ãéè¦ãªã®ã</h3>
<p>Kubernetes ã³ã³ãã¼ãã³ããã¯ã©ã¹ã¿ã¼ã®ææ°ç¶æ
ãæ£ç¢ºã«ææ¡ããããã«ã¯ãæ´åæ§ã®ããèªã¿è¾¼ã¿ãä¸å¯æ¬ ã§ãã
æ´åæ§ã®ããèªã¿è¾¼ã¿ãä¿è¨¼ãããã¨ã§ãKubernetesã®æä½ã®æ£ç¢ºæ§ã¨ä¿¡é ¼æ§ãç¶æãããåã³ã³ãã¼ãã³ãã¯ææ°ã®æ
å ±ã«åºã¥ãã¦é©åãªå¤æãä¸ããã¨ãã§ãã¾ãã
ããããå¤§è¦æ¨¡ãªã¯ã©ã¹ã¿ã¼ã§ã¯ããã®ããã®ãã¼ã¿ã®åå¾ã¨å¦çãããã©ã¼ãã³ã¹ã®ããã«ããã¯ã¨ãªãããããããã¾ãã
ç¹ã«ãçµæã®ãã£ã«ã¿ãªã³ã°ãä¼´ããªã¯ã¨ã¹ãã§ãã®åé¡ãé¡èã«ãªãã¾ãã
Kubernetesã¯etcdå
ã§åå空éãã¨ã«ãã¼ã¿ãç´æ¥ãã£ã«ã¿ãªã³ã°ã§ãã¾ãããã©ãã«ããã£ã¼ã«ãã»ã¬ã¯ã¿ã«ãããã®ä»ã®ãã£ã«ã¿ãªã³ã°ã§ã¯ããã¼ã¿ã»ããå
¨ä½ãetcdããåå¾ããKubernetes APIãµã¼ãã¼ãã¡ã¢ãªä¸ã§ãã£ã«ã¿ãªã³ã°ãè¡ãå¿
è¦ãããã¾ãã
ãã®åé¡ã¯ãç¹ã«kubeletãªã©ã®ã³ã³ãã¼ãã³ãã«å¤§ããªå½±é¿ãä¸ãã¾ãã
kubeletã¯èªèº«ã®ãã¼ãã«ã¹ã±ã¸ã¥ã¼ã«ãããPodã®ã¿ããªã¹ãããã ãã§è¶³ããã¨ããããããã¾ã§ã®ä»çµã¿ã§ã¯ãAPIãµã¼ãã¼ã¨etcdãã¯ã©ã¹ã¿ã¼å
ã®ãã¹ã¦ã®Podãå¦çããå¿
è¦ãããã¾ããã</p>
<h3 id="ãã¬ã¤ã¯ã¹ã«ã¼-ä¿¡é ¼æ§ã®é«ããã£ãã·ã³ã°">ãã¬ã¤ã¯ã¹ã«ã¼: ä¿¡é ¼æ§ã®é«ããã£ãã·ã³ã°</h3>
<p>Kubernetesã¯ãèªã¿è¾¼ã¿æä½ãæé©åããããã«ã以åããWatchãã£ãã·ã¥ã使ç¨ãã¦ãã¾ããã
Watchãã£ãã·ã¥ã¯ã¯ã©ã¹ã¿ã¼ã®ç¶æ
ã®ã¹ãããã·ã§ãããä¿åããetcdã®Watchãéãã¦æ´æ°æ
å ±ãåãåãã¾ãã
ããããããã¾ã§ã¯ãã£ãã·ã¥ãå®å
¨ã«ææ°ã®ç¶æ
ã§ãããã¨ãä¿è¨¼ã§ããªãã£ããããæ´åæ§ã®ããèªã¿è¾¼ã¿ãç´æ¥æä¾ãããã¨ãã§ãã¾ããã§ããã</p>
<p>ããã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ãæ©è½ã¯ãetcdã®<a href="https://etcd.io/docs/v3.5/dev-guide/interacting_v3/#watch-progress">鲿éç¥</a>ã®ã¡ã«ããºã ãæ´»ç¨ãã¦ãã®åé¡ã«å¯¾å¦ãã¾ãã
ãã®éç¥ã«ãããWatchãã£ãã·ã¥ã¯èªèº«ã¨etcdãæ¯è¼ãããã¼ã¿ãææ°ãã©ãããææ¡ã§ãã¾ãã
æ´åæ§ã®ããèªã¿è¾¼ã¿ãè¦æ±ãããã¨ãã·ã¹ãã ã¯ã¾ãWatchãã£ãã·ã¥ã®å
å®¹ãææ°ãã©ããã確èªãã¾ãã
ãã£ãã·ã¥ãææ°ã§ãªãå ´åãã·ã¹ãã ã¯ãã£ãã·ã¥ã®å
容ãå®å
¨ã«æ´æ°ãããã¨ç¢ºèªã§ããã¾ã§ãetcdã«é²æéç¥ãåãåããç¶ãã¾ãã
ããã¦æºåãæ´ãã¨ãè¦æ±ããããã¼ã¿ã¯ãã£ãã·ã¥ããç´æ¥èªã¿åããå¹ççã«æä¾ããã¾ãã
ãã®ãããç¹ã«etcdãã大éã®ãã¼ã¿ãåå¾ããå¿
è¦ããããããªå ´é¢ã§ãããã©ã¼ãã³ã¹ã大å¹
ã«åä¸ããããã¨ãã§ãã¾ãã
以ä¸ã®ããã«ãã¦ããã¼ã¿ããã£ã«ã¿ãªã³ã°ãããªã¯ã¨ã¹ãããã£ãã·ã¥ããå¦çã§ããããã«ãªããetcdããèªã¿åãå¿
è¦ã®ããã¡ã¿ãã¼ã¿ã¯æå°éã«æãããã¾ãã</p>
<p><strong>éè¦ãªæ³¨æç¹:</strong> ãã®æ©è½ãå©ç¨ããã«ã¯ãKubernetesã¯ã©ã¹ã¿ã§etcdãã¼ã¸ã§ã³3.4.31以éã¾ãã¯3.5.13以éãå®è¡ãã¦ããå¿
è¦ãããã¾ãã
å¤ããã¼ã¸ã§ã³ã®etcdã使ç¨ãã¦ããå ´åãetcdããç´æ¥æ´åæ§ã®ããèªã¿è¾¼ã¿ãè¡ãæ¹å¼ã«èªåã§åãæ¿ããã¾ãã</p>
<h3 id="使ã§ããããã©ã¼ãã³ã¹ã®åä¸">使ã§ããããã©ã¼ãã³ã¹ã®åä¸</h3>
<p>ãã®ä¸è¦åç´ãªå¤æ´ã¯ãKubernetesã®ããã©ã¼ãã³ã¹ã¨ã¹ã±ã¼ã©ããªãã£ã«å¤§ããªå½±é¿ãä¸ãã¾ãã</p>
<ul>
<li><strong>etcdã®è² è·è»½æ¸:</strong> Kubernetes v1.31ã§ã¯ãetcdã®ä½æ¥è² è·ã軽æ¸ããä»ã®éè¦ãªæä½ã®ããã«ãªã½ã¼ã¹ãè§£æ¾ã§ãã¾ãã</li>
<li><strong>ã¬ã¤ãã³ã·ã®ç縮:</strong> ãã£ãã·ã¥ããã®èªã¿è¾¼ã¿ã¯ãetcdãããã¼ã¿ãåå¾ãã¦å¦çãããããã¯ããã«é«éã§ãã
ããã¯ã³ã³ãã¼ãã³ãã¸ã®å¿çãè¿
éã«ãªããã¯ã©ã¹ã¿ã¼å
¨ä½ã®å¿çæ§ãåä¸ãããã¨ãæå³ãã¾ãã</li>
<li><strong>ã¹ã±ã¼ã©ããªãã£ã®åä¸:</strong> etcdã®è² è·è»½æ¸ã«ãããã³ã³ããã¼ã«ãã¬ã¼ã³ã¯ããã©ã¼ãã³ã¹ãç ç²ã«ãããã¨ãªãããå¤ãã®ãªã¯ã¨ã¹ããå¦çã§ããããã«ãªãããã æ°åãã®ãã¼ãã¨Podãæã¤ãããªå¤§è¦æ¨¡ãªã¯ã©ã¹ã¿ã¼ã§ã¯ãæã大ããªã¡ãªãããå¾ããã¾ãã</li>
</ul>
<p><strong>5,000ãã¼ãã®ã¹ã±ã¼ã©ããªãã£ãã¹ãçµæ:</strong> 5,000ãã¼ãã®ã¯ã©ã¹ã¿ã§è¡ãããæè¿ã®ã¹ã±ã¼ã©ããªãã£ãã¹ãã§ã¯ããã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ãæå¹ã«ãããã¨ã§ã以ä¸ã®ãããªç®è¦ã¾ããæ¹åãè¦ããã¾ããã</p>
<ul>
<li>kube-apiserverã®CPU使ç¨çã <strong>30%忏</strong></li>
<li>etcdã®CPU使ç¨çã <strong>25%忏</strong></li>
<li>Podã®LISTãªã¯ã¨ã¹ãã®99ãã¼ã»ã³ã¿ã¤ã«ã¬ã¤ãã³ã·ãæå¤§ <strong>3åã®1ã«ç縮</strong> (5ç§ãã1.5ç§)</li>
</ul>
<h3 id="ä»å¾ã®äºå®">ä»å¾ã®äºå®</h3>
<p>ãã¼ã¿çã¸ã®ç§»è¡ã«ããããã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ã¯ããã©ã«ãã§æå¹ã«ãªãããµãã¼ãããã¦ããetcdãã¼ã¸ã§ã³ãå®è¡ãã¦ãããã¹ã¦ã®Kubernetesã¦ã¼ã¶ã¼ã«ã·ã¼ã ã¬ã¹ãªããã©ã¼ãã³ã¹åä¸ãæä¾ãã¾ãã</p>
<p>ç§ãã¡ã®æ
ã¯ããã§çµããã§ã¯ããã¾ããã
Kubernetesã³ãã¥ããã£ã¯ãå°æ¥çã«ããã«ããã©ã¼ãã³ã¹ãæé©åããããã«ãWatchãã£ãã·ã¥ã§ã®ãã¼ã¸ãã¼ã·ã§ã³ã®ãµãã¼ããç©æ¥µçã«æ¤è¨ãã¦ãã¾ãã</p>
<h3 id="ã¯ããæ¹">ã¯ããæ¹</h3>
<p>Kubernetes v1.31ã«ã¢ããã°ã¬ã¼ãããetcdãã¼ã¸ã§ã³3.4.31以éã¾ãã¯3.5.13以éã使ç¨ãã¦ãããã¨ã確èªããã®ãããã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ã®ã¡ãªãããä½é¨ããæãç°¡åãªæ¹æ³ã§ãã
ã質åããã£ã¼ãããã¯ãããå ´åã¯ãKubernetesã³ãã¥ããã£ã¾ã§ãæ°è»½ã«ãåãåãããã ããã</p>
<p><strong>ãã£ãã·ã¥ããã®æ´åæ§ã®ããèªã¿è¾¼ã¿ã«ãã£ã¦ãããªãã®Kubernetesä½é¨ãã©ãå¤ãã£ããããã²æãã¦ãã ããï¼</strong></p>
<p>ãã®æ©è½ã¸ã®è²¢ç®ã«å¯¾ãã¦ã@ah8ad3 㨠@p0lyn0mial ã«ç¹å¥ãªæè¬ãæ§ãã¾ãã</p>
- Kubernetes v1.31: Ellihttps://kubernetes.io/ja/blog/2024/08/13/kubernetes-v1-31-release/Tue, 13 Aug 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/08/13/kubernetes-v1-31-release/
<p><strong>ç·¨éè
:</strong> Matteo Bianchi, Yigit Demirbas, Abigail McCarthy, Edith Puclla, Rashan Smith</p>
<p>Kubernetes v1.31: Elliã®ãªãªã¼ã¹ãçºè¡¨ãã¾ãï¼</p>
<p>ããã¾ã§ã®ãªãªã¼ã¹ã¨åæ§ã«ãKubernetes v1.31ã§ã¯æ°ããªGAããã¼ã¿ãã¢ã«ãã¡ã®æ©è½ãå°å
¥ããã¦ãã¾ãã
ç¶ç¶çã«é«å質ãªãªãªã¼ã¹ãæä¾ã§ãã¦ãããã¨ã¯ãç§ãã¡ã®éçºãµã¤ã¯ã«ã®å¼·ãã¨ãæ´»çºãªã³ãã¥ããã£ã®ãµãã¼ãã示ããã®ã§ãã
ä»åã®ãªãªã¼ã¹ã§ã¯ã45ã®æ©è½å¼·åãè¡ããã¾ããã
ãã®ãã¡ã11ã®æ©è½ãGAã«ææ ¼ãã22ã®æ©è½ããã¼ã¿ã«ç§»è¡ãã12ã®æ©è½ãã¢ã«ãã¡ã¨ãã¦å°å
¥ããã¦ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ã®ãã¼ãã¨ãã´">ãªãªã¼ã¹ã®ãã¼ãã¨ãã´</h2>
<figure class="release-logo ">
<img src="https://kubernetes.io/images/blog/2024-08-13-kubernetes-1.31-release/k8s-1.31.png"
alt="Kubernetes v1.31 Elliã®ãã´"/>
</figure>
<p>Kubernetes v1.31ã®ãªãªã¼ã¹ãã¼ãã¯"Elli"ã§ãã</p>
<p>Kubernetes v1.31ã®Elliã¯ãåªããå¿ãæã¤æãããç¬ã§ãããããããè¹ä¹ãã®å¸½åããã¶ã£ã¦ãã¾ãã
ããã¯ã夿§ã§å¤§ããªKubernetesã³ã³ããªãã¥ã¼ã¿ã¼ãã¡ããªã¼ã¸ã®éã³å¿ããµããæ¬æã表ãã¦ãã¾ãã</p>
<p>Kubernetes v1.31ã¯ãããã¸ã§ã¯ãã<a href="https://kubernetes.io/ja/blog/2024/06/06/10-years-of-kubernetes/">10å¨å¹´</a>ãç¥ã£ãå¾ã®åãã¦ã®ãªãªã¼ã¹ã§ãã
Kubernetesã¯èªç以æ¥ãé·ãéã®ããæ©ãã§ãã¾ããã
ããã¦ä»ããªããåãªãªã¼ã¹ã§æ°ããªæ¹åã«é²åãç¶ãã¦ãã¾ãã
10å¹´ã¨ããç¯ç®ãè¿ãããããå®ç¾ãããæ°ãåããªãã»ã©ã®Kubernetesã³ã³ããªãã¥ã¼ã¿ã¼ãã¡ã®åªåãç®èº«ãæè¡ãç¥æµãããã¦å°éãªä½æ¥ãæ¯ãè¿ãã¨ãæ·±ãæéãåããã«ã¯ãããã¾ããã</p>
<p>ããã¸ã§ã¯ãã®éå¶ã«ã¯è¨å¤§ãªå´åãå¿
è¦ã§ãããããã«ãããããããç±æã¨ç¬é¡ãæã£ã¦ä½åº¦ãè²¢ç®ããã³ãã¥ããã£ã®ä¸å¡ã§ãããã¨ã«èªããæãã人ã
ãçµ¶ãã¾ããã
æ°æ§åããã³ã³ããªãã¥ã¼ã¿ã¼ããè¦ããããã®ãéãããããæ´»æ°ã«æºã¡ããã¾ãã«ãåã³ã«ããµãããã³ãã¥ããã£ã®è¨¼ãªã®ã§ãã</p>
<p>Kubernetes v1.31ã®Elliã¯ãã¾ãã«ãã®ç´ æ´ãããç²¾ç¥ãç¥ç¦ããåå¨ãªã®ã§ãï¼
Kubernetesã®è¼ãããæ¬¡ã®10å¹´ã«ãã¿ããªã§ä¹¾æ¯ãã¾ãããï¼</p>
<h2 id="gaã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã">GAã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã</h2>
<p><em>ããã¯ãv1.31ã®ãªãªã¼ã¹ã«ä¼´ãGAã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="apparmorã®ãµãã¼ããgaã«">AppArmorã®ãµãã¼ããGAã«</h3>
<p>Kubernetesã®AppArmorãµãã¼ããGAã«ãªãã¾ããã
ã³ã³ããã®<code>securityContext</code>å
ã®<code>appArmorProfile.type</code>ãã£ã¼ã«ããè¨å®ãããã¨ã§ãAppArmorã使ç¨ãã¦ã³ã³ãããä¿è·ã§ãã¾ãã
Kubernetes v1.30ããåã§ã¯ãAppArmorã¯ã¢ããã¼ã·ã§ã³ã§å¶å¾¡ããã¦ãã¾ããããv1.30ããã¯ãã£ã¼ã«ãã使ç¨ãã¦å¶å¾¡ãããããã«ãªãã¾ããã
ãã®ããã¢ããã¼ã·ã§ã³ã®ä½¿ç¨ãããã<code>appArmorProfile.type</code>ãã£ã¼ã«ãã®ä½¿ç¨ã«ç§»è¡ãããã¨ããå§ããã¾ãã</p>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/ja/docs/tutorials/security/apparmor/">AppArmorã®ãã¥ã¼ããªã¢ã«</a>ãã覧ãã ããã
ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã«ãã£ã¦<a href="https://github.com/kubernetes/enhancements/issues/24">KEP #24</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="kube-proxyã«ããå¤é¨ããã®æ¥ç¶ã®å®å®æ§æ¹å">kube-proxyã«ããå¤é¨ããã®æ¥ç¶ã®å®å®æ§æ¹å</h3>
<p>kube-proxyã使ç¨ããå¤é¨ããã®æ¥ç¶ã®å®å®æ§ããv1.31ã§å¤§ããæ¹åããã¾ããã
Kubernetesã®ãã¼ããã©ã³ãµã¼ã«é¢ããä¸è¬çãªèª²é¡ã®1ã¤ã«ããã©ãã£ãã¯ã®æå¤±ãé²ãããã®åã³ã³ãã¼ãã³ãéã®é£æºãããã¾ãã
ãã®æ©è½ã§ã¯ãkube-proxyã«æ°ããªä»çµã¿ãå°å
¥ãã<code>type: LoadBalancer</code>ã¨<code>externalTrafficPolicy: Cluster</code>ãè¨å®ãããµã¼ãã¹ã§å
¬éãããçµäºäºå®ã®Nodeã«å¯¾ãã¦ããã¼ããã©ã³ãµã¼ãæ¥ç¶ãã¹ã ã¼ãºã«åãæ¿ããããããã«ãã¦ãã¾ãã
ã¾ããã¯ã©ã¦ããããã¤ãã¼ã¨Kubernetesã®ãã¼ããã©ã³ãµã¼å®è£
ã«ãããæ¨å¥¨ãã©ã¯ãã£ã¹ã確ç«ãã¾ããã</p>
<p>ãã®æ©è½ãå©ç¨ããã«ã¯ãkube-proxyãã¯ã©ã¹ã¿ä¸ã§ããã©ã«ãã®ãµã¼ãã¹ãããã·ã¨ãã¦åä½ãããã¼ããã©ã³ãµã¼ãæ¥ç¶ã®åãæ¿ãããµãã¼ããã¦ããå¿
è¦ãããã¾ãã
ç¹å¥ãªè¨å®ã¯ä¸è¦ã§ãv1.30ããkube-proxyã«ããã©ã«ãã§çµã¿è¾¼ã¾ãã¦ãããv1.31ã§æ£å¼ã«GAã¨ãªãã¾ããã</p>
<p>詳ããã¯ã<a href="https://kubernetes.io/docs/reference/networking/virtual-ips/#external-traffic-policy">ä»®æ³IPã¨ãµã¼ãã¹ãããã·ã®ããã¥ã¡ã³ã</a>ãã覧ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-network">SIG Network</a>ã<a href="https://github.com/kubernetes/enhancements/issues/3836">KEP #3836</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="æ°¸ç¶ããªã¥ã¼ã ã®ç¶æ
å¤åæå»ã®è¨é²æ©è½ãæ£å¼ãªãªã¼ã¹">æ°¸ç¶ããªã¥ã¼ã ã®ç¶æ
å¤åæå»ã®è¨é²æ©è½ãæ£å¼ãªãªã¼ã¹</h3>
<p>æ°¸ç¶ããªã¥ã¼ã ã®ç¶æ
å¤åæå»ãè¨é²ããæ©è½ããv1.31ã§æ£å¼ã«ãªãªã¼ã¹ããã¾ããã
ãã®æ©è½ã«ãããPersistentVolumeã®ç¶æ
ãæå¾ã«å¤ãã£ãæå»ãä¿åãã<code>PersistentVolumeStatus</code>ãã£ã¼ã«ãã追å ããã¾ãã
æ©è½ãæå¹ã«ãªãã¨ããã¹ã¦ã®PersistentVolumeãªãã¸ã§ã¯ãã«<code>.status.lastTransitionTime</code>ã¨ããæ°ãããã£ã¼ã«ããè¨ããããããªã¥ã¼ã ã®ç¶æ
ãæå¾ã«å¤ãã£ãæå»ãè¨é²ããã¾ãã
ãã ãããã®å¤æ´ã¯ããã«ã¯åæ ããã¾ããã
Kubernetes v1.31ã«ã¢ããã°ã¬ã¼ãããå¾ãPersistentVolumeãæ´æ°ãããç¶æ
(<code>Pending</code>ã<code>Bound</code>ã<code>Released</code>)ãåãã¦å¤ãã£ãã¨ãã«ãæ°ãããã£ã¼ã«ãã«æå»ãè¨é²ããã¾ãã
ãã®æ©è½ã«ãããPersistentVolumeã<code>Pending</code>ãã<code>Bound</code>ã«å¤ããã¾ã§ã®æéãæ¸¬å®ã§ããããã«ãªãã¾ãã
ã¾ããæ§ã
ãªææ¨ãSLOã®è¨å®ã«ãæ´»ç¨ã§ãã¾ãã</p>
<p>詳ããã¯ã<a href="https://kubernetes.io/ja/docs/concepts/storage/persistent-volumes/">æ°¸ç¶ããªã¥ã¼ã ã®ããã¥ã¡ã³ã</a>ãã覧ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã<a href="https://github.com/kubernetes/enhancements/issues/3762">KEP #3762</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h2 id="ãã¼ã¿ã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã">ãã¼ã¿ã«ææ ¼ããæ©è½ã®ãã¤ã©ã¤ã</h2>
<p><em>ããã¯ãv1.31ã®ãªãªã¼ã¹ã«ä¼´ããã¼ã¿ã¨ãªã£ãæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="kube-proxyã§ã®nftablesããã¯ã¨ã³ãã®å°å
¥">kube-proxyã§ã®nftablesããã¯ã¨ã³ãã®å°å
¥</h3>
<p>v1.31ã§ã¯ãnftablesããã¯ã¨ã³ãããã¼ã¿ã¨ãã¦ç»å ´ãã¾ããã
ãã®æ©è½ã¯<code>NFTablesProxyMode</code>ã¨ããè¨å®ã§å¶å¾¡ãããç¾å¨ã¯ããã©ã«ãã§æå¹ã«ãªã£ã¦ãã¾ãã</p>
<p>nftables APIã¯ãiptables APIã®æ¬¡ä¸ä»£çã¨ãã¦éçºãããããé«ãããã©ã¼ãã³ã¹ã¨æ¡å¼µæ§ãæä¾ãã¾ãã
<code>nftables</code>ãããã·ã¢ã¼ãã¯ã<code>iptables</code>ã¢ã¼ãã¨æ¯ã¹ã¦ãµã¼ãã¹ã¨ã³ããã¤ã³ãã®å¤æ´ãããè¿
éãã¤å¹ççã«å¦çã§ãã¾ãã
ã¾ããã«ã¼ãã«å
ã§ã®ãã±ããå¦çãå¹çåããã¦ãã¾ã(ãã ãããã®å¹æã¯æ°ä¸ã®ãµã¼ãã¹ãæã¤å¤§è¦æ¨¡ã¯ã©ã¹ã¿ã§ããé¡èã«ãªãã¾ã)ã</p>
<p>Kubernetes v1.31ã®æç¹ã§ã¯ã<code>nftables</code>ã¢ã¼ãã¯ã¾ã æ°ããæ©è½ã®ããããã¹ã¦ã®ãããã¯ã¼ã¯ãã©ã°ã¤ã³ã¨ã®äºææ§ã確èªããã¦ããããã§ã¯ããã¾ããã
ã使ãã®ãããã¯ã¼ã¯ãã©ã°ã¤ã³ã®ããã¥ã¡ã³ãã§å¯¾å¿ç¶æ³ã確èªãã¦ãã ããã
ãã®ãããã·ã¢ã¼ãã¯Linux Nodeã®ã¿ã§å©ç¨å¯è½ã§ãã«ã¼ãã«5.13以éãå¿
è¦ã§ãã
ç§»è¡ãæ¤è¨ããéã¯ãç¹ã«NodePortãµã¼ãã¹ã«é¢é£ããä¸é¨ã®æ©è½ããiptablesã¢ã¼ãã¨nftablesã¢ã¼ãã§å®å
¨ã«åãããã«åä½ããªãç¹ã«æ³¨æãå¿
è¦ã§ãã
ããã©ã«ãè¨å®ã®å¤æ´ãå¿
è¦ãã©ããã¯ã<a href="https://kubernetes.io/docs/reference/networking/virtual-ips/#migrating-from-iptables-mode-to-nftables">ç§»è¡ã¬ã¤ã</a>ã§ç¢ºèªãã¦ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-network">SIG Network</a>ã<a href="https://github.com/kubernetes/enhancements/issues/3866">KEP #3866</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="æ°¸ç¶ããªã¥ã¼ã ã®reclaimããªã·ã¼ã«é¢ãã夿´">æ°¸ç¶ããªã¥ã¼ã ã®reclaimããªã·ã¼ã«é¢ãã夿´</h3>
<p>Kubernetes v1.31ã§ã¯ãPersistentVolumeã®reclaimããªã·ã¼ã常ã«å°éããæ©è½ããã¼ã¿ã«ãªãã¾ããã
ãã®æ©è½å¼·åã«ãããé¢é£ããPersistentVolumeClaim(PVC)ãåé¤ãããå¾ã§ããPersistentVolume(PV)ã®reclaimããªã·ã¼ã確å®ã«é©ç¨ãããããã«ãªããããªã¥ã¼ã ã®æ¼æ´©ã鲿¢ãã¾ãã</p>
<p>ããã¾ã§ã¯ãPVã¨PVCã®ã©ã¡ããå
ã«åé¤ããããã«ãã£ã¦ãç¹å®ã®æ¡ä»¶ä¸ã§PVã«è¨å®ãããreclaimããªã·ã¼ãç¡è¦ããããã¨ãããã¾ããã
ãã®çµæãreclaimããªã·ã¼ã"Delete"ã«è¨å®ããã¦ãã¦ããå¤é¨ã¤ã³ãã©ã®å¯¾å¿ããã¹ãã¬ã¼ã¸ãªã½ã¼ã¹ãåé¤ãããªãã±ã¼ã¹ãããã¾ããã
ããã«ãããä¸è²«æ§ã®æ¬ å¦ããªã½ã¼ã¹ã®ãªã¼ã¯ãçºçããå¯è½æ§ãããã¾ããã</p>
<p>ãã®æ©è½ã®å°å
¥ã«ãããPVã¨PVCã®åé¤é åºã«é¢ä¿ãªããreclaimããªã·ã¼ã®"Delete"ã確å®ã«å®è¡ãããããã¯ã¨ã³ãã¤ã³ãã©ããåºç¤ã¨ãªãã¹ãã¬ã¼ã¸ãªãã¸ã§ã¯ããåé¤ããããã¨ãKubernetesã«ãã£ã¦ä¿è¨¼ãããããã«ãªãã¾ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã<a href="https://github.com/kubernetes/enhancements/issues/2644">KEP #2644</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="ãã¤ã³ãããããµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®æ¹å">ãã¤ã³ãããããµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®æ¹å</h3>
<p><code>ServiceAccountTokenNodeBinding</code>æ©è½ããv1.31ã§ãã¼ã¿ã«ææ ¼ãã¾ããã
ãã®æ©è½ã«ãããPodã§ã¯ãªãNodeã«ã®ã¿ãã¤ã³ãããããã¼ã¯ã³ãè¦æ±ã§ããããã«ãªãã¾ããã
ãã®ãã¼ã¯ã³ã«ã¯ãNodeæ
å ±ãå«ã¾ãã¦ããããã¼ã¯ã³ã使ç¨ãããéã«Nodeã®åå¨ãæ¤è¨¼ãã¾ãã
詳ããã¯ã<a href="https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-tokens">ãã¤ã³ãããããµã¼ãã¹ã¢ã«ã¦ã³ããã¼ã¯ã³ã®ããã¥ã¡ã³ã</a>ãã覧ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4193">KEP #4193</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="è¤æ°ã®ãµã¼ãã¹cidrã®ãµãã¼ã">è¤æ°ã®ãµã¼ãã¹CIDRã®ãµãã¼ã</h3>
<p>v1.31ã§ã¯ãè¤æ°ã®ãµã¼ãã¹CIDRãæã¤ã¯ã©ã¹ã¿ã¼ã®ãµãã¼ãããã¼ã¿ã«ãªãã¾ãã(ããã©ã«ãã§ã¯ç¡å¹)ã</p>
<p>Kubernetesã¯ã©ã¹ã¿ã¼ã«ã¯ãIPã¢ãã¬ã¹ã使ç¨ããè¤æ°ã®ã³ã³ãã¼ãã³ããããã¾ã: NodeãPodãããã¦Serviceã§ãã
Nodeã¨Podã®IPç¯å²ã¯ãããããã¤ã³ãã©ã¹ãã©ã¯ãã£ããããã¯ã¼ã¯ãã©ã°ã¤ã³ã«ä¾åãããããåçã«å¤æ´ã§ãã¾ãã
ãããããµã¼ãã¹ã®IPç¯å²ã¯ãã¯ã©ã¹ã¿ã¼ä½ææã«kube-apiserverã®ãã¼ãã³ã¼ãããããã©ã°ã¨ãã¦å®ç¾©ããã¦ãã¾ããã
é·æééç¨ããã¦ããã¯ã©ã¹ã¿ã¼ãå¤§è¦æ¨¡ãªã¯ã©ã¹ã¿ã¼ã§ã¯ã管çè
ãå²ãå½ã¦ããããµã¼ãã¹CIDRç¯å²ãæ¡å¼µã縮å°ããããã¯å®å
¨ã«ç½®ãæããå¿
è¦ããããIPã¢ãã¬ã¹ã®æ¯æ¸ãåé¡ã¨ãªã£ã¦ãã¾ããã
ãããã®æä½ã¯æ£å¼ã«ãµãã¼ãããã¦ããããè¤éã§ç¹ç´°ãªã¡ã³ããã³ã¹ä½æ¥ãéãã¦è¡ããããã°ãã°ã¯ã©ã¹ã¿ã®ãã¦ã³ã¿ã¤ã ãå¼ãèµ·ããã¦ãã¾ããã
ãã®æ°æ©è½ã«ãããã¦ã¼ã¶ã¼ã¨ã¯ã©ã¹ã¿ã¼ç®¡çè
ã¯ãã¦ã³ã¿ã¤ã ãªãã§ãµã¼ãã¹CIDRç¯å²ãåçã«å¤æ´ã§ããããã«ãªãã¾ãã</p>
<p>ãã®æ©è½ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/docs/reference/networking/virtual-ips/#ip-address-objects">ä»®æ³IPã¨ãµã¼ãã¹ãããã·</a>ã®ããã¥ã¡ã³ããã¼ã¸ãã覧ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-network">SIG Network</a>ã<a href="https://github.com/kubernetes/enhancements/issues/1880">KEP #1880</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="ãµã¼ãã¹ã®ãã©ãã£ãã¯åæ£æ©è½">ãµã¼ãã¹ã®ãã©ãã£ãã¯åæ£æ©è½</h3>
<p>ãµã¼ãã¹ã®ãã©ãã£ãã¯åæ£æ©è½ããv1.31ã§ãã¼ã¿ã¨ãªããããã©ã«ãã§æå¹ã«ãªãã¾ããã</p>
<p>SIG Networkingã¯ããµã¼ãã¹ãããã¯ã¼ãã³ã°ã«ãããæé©ãªã¦ã¼ã¶ã¼ä½é¨ã¨ãã©ãã£ãã¯å¶å¾¡æ©è½ãè¦åºããããä½åº¦ãæ¹è¯ãéãã¦ãã¾ããã
ãã®çµæããµã¼ãã¹ä»æ§ã«<code>trafficDistribution</code>ãã£ã¼ã«ããå®è£
ãã¾ããã
ãã®ãã£ã¼ã«ãã¯ãã«ã¼ãã£ã³ã°ã®æ±ºå®ãè¡ãéã«ãåºç¤ã¨ãªãå®è£
ãèæ
®ãã¹ãæéã¨ãã¦æ©è½ãã¾ãã</p>
<p>ãã®æ©è½ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/#traffic-distribution-for-services-sig-network-https-github-com-kubernetes-community-tree-master-sig-network">1.30ãªãªã¼ã¹ããã°</a>ããèªã¿ããã ããã<a href="https://kubernetes.io/ja/docs/concepts/services-networking/service/#traffic-distribution">ãµã¼ãã¹</a>ã®ããã¥ã¡ã³ããã¼ã¸ãã覧ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-network">SIG Network</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4444">KEP #4444</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="kubernetes-volumeattributesclassã«ããããªã¥ã¼ã ä¿®æ£æ©è½">Kubernetes VolumeAttributesClassã«ããããªã¥ã¼ã ä¿®æ£æ©è½</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/storage/volume-attributes-classes/">VolumeAttributesClass</a> APIããv1.31ã§ãã¼ã¿ã«ãªãã¾ãã
VolumeAttributesClassã¯ããããã¸ã§ãã³ã°ãããIOã®ãããªåçãªããªã¥ã¼ã ãã©ã¡ã¼ã¿ãä¿®æ£ããããã®ãKubernetesç¬èªã®æ±ç¨APIãæä¾ãã¾ãã
ããã«ããããããã¤ãã¼ããµãã¼ããã¦ããå ´åãã¯ã¼ã¯ãã¼ãã¯ã³ã¹ãã¨ããã©ã¼ãã³ã¹ã®ãã©ã³ã¹ãåãããã«ããªã³ã©ã¤ã³ã§ããªã¥ã¼ã ãåç´ã¹ã±ã¼ãªã³ã°ã§ããããã«ãªãã¾ãã
ãã®æ©è½ã¯ãKubernetes 1.29ããã¢ã«ãã¡ã¨ãã¦æä¾ããã¦ãã¾ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã主å°ãã<a href="https://github.com/kubernetes/enhancements/issues/3751">KEP #3751</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h2 id="ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããæ°æ©è½">ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããæ°æ©è½</h2>
<p><em>ããã¯ãv1.31ã®ãªãªã¼ã¹ã§ã¢ã«ãã¡ã¨ãã¦å°å
¥ãããä¸»ãªæ¹åç¹ã®ä¸é¨ã§ãã</em></p>
<h3 id="ã¢ã¯ã»ã©ã¬ã¼ã¿ãªã©ã®ãã¼ãã¦ã§ã¢ç®¡çãæ¹åããæ°ããdra-api">ã¢ã¯ã»ã©ã¬ã¼ã¿ãªã©ã®ãã¼ãã¦ã§ã¢ç®¡çãæ¹åããæ°ããDRA API</h3>
<p>Kubernetes v1.31ã§ã¯ãåçãªã½ã¼ã¹å²ãå½ã¦(DRA)APIã¨ãã®è¨è¨ãæ´æ°ããã¾ããã
ãã®æ´æ°ã®ä¸»ãªç¦ç¹ã¯æ§é åãã©ã¡ã¼ã¿ã«ããã¾ãã
ããã«ããããªã½ã¼ã¹æ
å ±ã¨ãªã¯ã¨ã¹ããKubernetesã¨ã¯ã©ã¤ã¢ã³ãã«å¯¾ãã¦éæã«ãªããã¯ã©ã¹ã¿ã®ãªã¼ãã¹ã±ã¼ãªã³ã°ãªã©ã®æ©è½ã®å®è£
ãå¯è½ã«ãªãã¾ãã
kubeletã®DRAãµãã¼ããæ´æ°ãããkubeletã¨ã³ã³ããã¼ã«ãã¬ã¼ã³éã®ãã¼ã¸ã§ã³ã®éãã«å¯¾å¿ã§ããããã«ãªãã¾ããã
æ§é åãã©ã¡ã¼ã¿ã«ãããã¹ã±ã¸ã¥ã¼ã©ã¯Podã®ã¹ã±ã¸ã¥ã¼ãªã³ã°æã«ResourceClaimãå²ãå½ã¦ã¾ãã
DRAãã©ã¤ãã³ã³ããã¼ã©ã«ããå²ãå½ã¦ã¯ãç¾å¨ãã¯ã©ã·ãã¯DRAãã¨å¼ã°ããæ¹æ³ã§ãå¼ãç¶ããµãã¼ãããã¦ãã¾ãã</p>
<p>Kubernetes v1.31ã§ã¯ãã¯ã©ã·ãã¯DRAã«<code>DRAControlPlaneController</code>ã¨ããå¥ã®ãã£ã¼ãã£ã¼ã²ã¼ããç¨æããã¦ããããããæç¤ºçã«æå¹ã«ããå¿
è¦ãããã¾ãã
ãã®ã³ã³ããã¼ã«ãã¬ã¼ã³ã³ã³ããã¼ã©ã¼ã使ç¨ãããã¨ã§ãDRAãã©ã¤ãã¯æ§é åãã©ã¡ã¼ã¿ã§ã¯ã¾ã ãµãã¼ãããã¦ããªãå²ãå½ã¦ããªã·ã¼ãå®è£
ã§ãã¾ãã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã<a href="https://github.com/kubernetes/enhancements/issues/3063">KEP #3063</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="ã¤ã¡ã¼ã¸ããªã¥ã¼ã ã®ãµãã¼ã">ã¤ã¡ã¼ã¸ããªã¥ã¼ã ã®ãµãã¼ã</h3>
<p>Kubernetesã³ãã¥ããã£ã¯ãå°æ¥çã«äººå·¥ç¥è½(AI)ãæ©æ¢°å¦ç¿(ML)ã®ã¦ã¼ã¹ã±ã¼ã¹ãããå¤ãå®ç¾ãããã¨ãç®æãã¦ãã¾ãã</p>
<p>ãããã®ã¦ã¼ã¹ã±ã¼ã¹ãå®ç¾ããããã®è¦ä»¶ã®1ã¤ã¯ãOpen Container Initiative(OCI)äºæã®ã¤ã¡ã¼ã¸ãã¢ã¼ãã£ãã¡ã¯ã(OCIãªãã¸ã§ã¯ãã¨å¼ã°ãã)ãããã¤ãã£ãã®ããªã¥ã¼ã ã½ã¼ã¹ã¨ãã¦ç´æ¥ãµãã¼ããããã¨ã§ãã
ããã«ãããã¦ã¼ã¶ã¼ã¯OCIæ¨æºã«éä¸ã§ããOCIã¬ã¸ã¹ããªã使ç¨ãã¦ããããã³ã³ãã³ããä¿åã»é
å¸ã§ããããã«ãªãã¾ãã</p>
<p>ããã§ãv1.31ã§ã¯ãOCIã¤ã¡ã¼ã¸ãPodå
ã®ããªã¥ã¼ã ã¨ãã¦ä½¿ç¨ã§ããæ°ããã¢ã«ãã¡æ©è½ã追å ããã¾ããã
ãã®æ©è½ã«ãããã¦ã¼ã¶ã¼ã¯Podå
ã§ã¤ã¡ã¼ã¸åç
§ãããªã¥ã¼ã ã¨ãã¦æå®ãããããã³ã³ããå
ã®ããªã¥ã¼ã ãã¦ã³ãã¨ãã¦åå©ç¨ã§ãã¾ãã
ãã®æ©è½ã試ãã«ã¯ã<code>ImageVolume</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ããå¿
è¦ãããã¾ãã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã¨<a href="https://github.com/kubernetes/community/tree/master/sig-storage">SIG Storage</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4639">KEP #4639</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="podã¹ãã¼ã¿ã¹ãéããããã¤ã¹ã®å¥å
¨æ§æ
å ±ã®å
¬é">Podã¹ãã¼ã¿ã¹ãéããããã¤ã¹ã®å¥å
¨æ§æ
å ±ã®å
Ž</h3>
<p>Podã¹ãã¼ã¿ã¹ãéãã¦ããã¤ã¹ã®å¥å
¨æ§æ
å ±ãå
¬éããæ©è½ããv1.31ã§æ°ããã¢ã«ãã¡æ©è½ã¨ãã¦è¿½å ããã¾ãããããã©ã«ãã§ã¯ç¡å¹ã«ãªã£ã¦ãã¾ãã</p>
<p>Kubernetes v1.31以åã§ã¯ãPodãæ
éããããã¤ã¹ã¨é¢é£ä»ãããã¦ãããã©ãããç¥ãæ¹æ³ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#monitoring-device-plugin-resources">PodResources API</a>ã使ç¨ãããã¨ã§ããã</p>
<p>ãã®æ©è½ãæå¹ã«ããã¨ãåPod ã®<code>.status</code>å
ã®åã³ã³ããã¹ãã¼ã¿ã¹ã«<code>allocatedResourcesStatus</code>ãã£ã¼ã«ãã追å ããã¾ãã
<code>allocatedResourcesStatus</code>ãã£ã¼ã«ãã¯ãã³ã³ããã«å²ãå½ã¦ãããåããã¤ã¹ã®å¥å
¨æ§æ
å ±ãå ±åãã¾ãã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4680">KEP #4680</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="ã»ã¬ã¯ã¿ã¼ã«åºã¥ããããç´°ããªèªå¯">ã»ã¬ã¯ã¿ã¼ã«åºã¥ããããç´°ããªèªå¯</h3>
<p>ãã®æ©è½ã«ãããWebhookãªã¼ã½ã©ã¤ã¶ã¼ãå°æ¥ã®(ç¾å¨ã¯è¨è¨ããã¦ããªã)ããªã¼å
ãªã¼ã½ã©ã¤ã¶ã¼ããã©ãã«ããã£ã¼ã«ãã»ã¬ã¯ã¿ã¼ã使ç¨ãããªã¯ã¨ã¹ãã«éãã<strong>list</strong>ã¨<strong>watch</strong>ãªã¯ã¨ã¹ãã許å¯ã§ããããã«ãªãã¾ãã
ä¾ãã°ããªã¼ã½ã©ã¤ã¶ã¼ã¯æ¬¡ã®ãããªè¡¨ç¾ãå¯è½ã«ãªãã¾ã: ãã®ã¦ã¼ã¶ã¼ã¯ãã¹ã¦ã®Podããªã¹ãã§ããªããã<code>.spec.nodeName</code>ãç¹å®ã®å¤ã«ä¸è´ããPodã¯ãªã¹ãã§ããã
ãããã¯ãã¦ã¼ã¶ã¼ãåå空éå
ã®<code>confidential: true</code>ã¨ã©ãã«ä»ãããã¦<strong>ããªã</strong>ãã¹ã¦ã®Secretãç£è¦ãããã¨ã許å¯ããã
CRDãã£ã¼ã«ãã»ã¬ã¯ã¿ã¼(ãããv1.31ã§ãã¼ã¿ã«ç§»è¡)ã¨çµã¿åããããã¨ã§ãããå®å
¨ãªNodeãã¨ã®æ¡å¼µæ©è½ã使ãããã¨ãå¯è½ã«ãªãã¾ãã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4601">KEP #4601</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h3 id="å¿åapiã¢ã¯ã»ã¹ã¸ã®å¶é">å¿åAPIã¢ã¯ã»ã¹ã¸ã®å¶é</h3>
<p><code>AnonymousAuthConfigurableEndpoints</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ãããã¨ã§ãã¦ã¼ã¶ã¼ã¯èªè¨¼è¨å®ãã¡ã¤ã«ã使ç¨ãã¦ãå¿åãªã¯ã¨ã¹ããã¢ã¯ã»ã¹ã§ããã¨ã³ããã¤ã³ããè¨å®ã§ããããã«ãªãã¾ããã
ããã«ãããå¿åã¦ã¼ã¶ã¼ã«ã¯ã©ã¹ã¿ã¸ã®åºç¯ãªã¢ã¯ã»ã¹ãä¸ãã¦ãã¾ããããªRBACè¨å®ãã¹ãããã¦ã¼ã¶ã¼èªèº«ãå®ããã¨ãã§ãã¾ãã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-auth">SIG Auth</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4633">KEP #4633</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h2 id="1-31ã«ãããæ©è½ã®ææ ¼-鿍奍å-ããã³åé¤">1.31ã«ãããæ©è½ã®ææ ¼ã鿍奍åãããã³åé¤</h2>
<h3 id="gaã¸ã®ææ ¼">GAã¸ã®ææ ¼</h3>
<p>ããã§ã¯ãGA(ä¸è¬æä¾ã¨ãå¼ã°ãã)ã«ææ ¼ãããã¹ã¦ã®æ©è½ãç´¹ä»ãã¾ããæ°æ©è½ãã¢ã«ãã¡ãããã¼ã¿ã¸ã®ææ ¼ãå«ãå®å
¨ãªæ´æ°ãªã¹ãã«ã¤ãã¦ã¯ããªãªã¼ã¹ãã¼ããã覧ãã ããã</p>
<p>ãã®ãªãªã¼ã¹ã§ã¯ã以ä¸ã®11åã®æ©è½å¼·åãGAã«ææ ¼ãã¾ãã:</p>
<ul>
<li><a href="https://github.com/kubernetes/enhancements/issues/3762">PersistentVolume last phase transition time</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2305">Metric cardinality enforcement</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3836">Kube-proxy improved ingress connectivity reliability</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4009">Add CDI devices to device plugin API</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/4569">Move cgroup v1 support into maintenance mode</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/24">AppArmor support</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3017">PodHealthyPolicy for PodDisruptionBudget</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3329">Retriable and non-retriable Pod failures for Jobs</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3715">Elastic Indexed Jobs</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/3335">Allow StatefulSet to control start replica ordinal numbering</a></li>
<li><a href="https://github.com/kubernetes/enhancements/issues/2185">Random Pod selection on ReplicaSet downscaling</a></li>
</ul>
<h3 id="鿍奍åã¨åé¤">鿍奍åã¨åé¤</h3>
<p>Kubernetesã®éçºã¨æçã«ä¼´ããããã¸ã§ã¯ãå
¨ä½ã®å¥å
¨æ§ã®ããã«ãæ©è½ã鿍奍åãåé¤ãã¾ãã¯ããè¯ããã®ã«ç½®ãæããããå ´åãããã¾ãã
ãã®ããã»ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ãKubernetesã®<a href="https://kubernetes.io/ja/docs/reference/using-api/deprecation-policy/">鿍奍åã¨åé¤ã®ããªã·ã¼</a>ãã覧ãã ããã</p>
<h4 id="cgroup-v1ã®ã¡ã³ããã³ã¹ã¢ã¼ãã¸ã®ç§»è¡">cgroup v1ã®ã¡ã³ããã³ã¹ã¢ã¼ãã¸ã®ç§»è¡</h4>
<p>Kubernetesãã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ã®å¤åã«é©å¿ãç¶ããä¸ãã³ãã¥ããã£ã¯v1.31ã§cgroup v1ã®ãµãã¼ããã¡ã³ããã³ã¹ã¢ã¼ãã«ç§»è¡ãããã¨ã決å®ãã¾ããã
ãã®å¤æ´ã¯ãæ¥çå
¨ä½ã®<a href="https://kubernetes.io/ja/docs/concepts/architecture/cgroups/">cgroup v2</a>ã¸ã®ç§»è¡ã¨æ©èª¿ãåããã¦ãããæ©è½æ§ãæ¡å¼µæ§ãããã¦ããä¸è²«æ§ã®ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã®åä¸ãæä¾ãã¾ãã
Kubernetesã®ã¡ã³ããã³ã¹ã¢ã¼ãã¨ã¯ãcgroup v1ãµãã¼ãã«æ°æ©è½ã追å ãããªããã¨ãæå³ãã¾ãã
éè¦ãªã»ãã¥ãªãã£ä¿®æ£ã¯å¼ãç¶ãæä¾ããã¾ããããã°ä¿®æ£ã¯ãã¹ãã¨ãã©ã¼ãã¨ãªããé大ãªãã°ã¯å¯è½ãªå ´åä¿®æ£ããã¾ãããä¸é¨ã®åé¡ã¯æªè§£æ±ºã®ã¾ã¾ã¨ãªãå¯è½æ§ãããã¾ãã</p>
<p>ã§ããã ãæ©ãcgroup v2ã¸ã®ç§»è¡ãéå§ãããã¨ããå§ããã¾ãã
ãã®ç§»è¡ã¯ã¢ã¼ããã¯ãã£ã«ä¾åããåºç¤ã¨ãªããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã¨ã³ã³ããã©ã³ã¿ã¤ã ãcgroup v2ããµãã¼ããã¦ãããã¨ã確èªããã¯ã¼ã¯ãã¼ãã¨ã¢ããªã±ã¼ã·ã§ã³ãcgroup v2ã§æ£ããæ©è½ãããã¨ãæ¤è¨¼ããããã®ãã¹ããå«ã¿ã¾ãã</p>
<p>åé¡ãçºçããå ´åã¯ã<a href="https://github.com/kubernetes/kubernetes/issues/new/choose">issue</a>ã使ãã¦å ±åãã¦ãã ããã</p>
<p>ãã®æ©è½ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã<a href="https://github.com/kubernetes/enhancements/issues/4569">KEP #4569</a>ã®ä¸ç°ã¨ãã¦éçºãã¾ããã</p>
<h4 id="sha-1ç½²åãµãã¼ãã«é¢ããæ³¨æäºé
">SHA-1ç½²åãµãã¼ãã«é¢ããæ³¨æäºé
</h4>
<p><a href="https://go.dev/doc/go1.18#sha1">go1.18</a>(2022å¹´3æãªãªã¼ã¹)以éãcrypto/x509ã©ã¤ãã©ãªã¯SHA-1ããã·ã¥é¢æ°ã§ç½²åãããè¨¼ææ¸ãæå¦ããããã«ãªãã¾ããã
SHA-1ã¯å®å
¨ã§ãªããã¨ã確ç«ããã¦ãããå
¬çã«ä¿¡é ¼ãããèªè¨¼å±ã¯2015年以éSHA-1è¨¼ææ¸ãçºè¡ãã¦ãã¾ããã
Kubernetesã®ã³ã³ããã¹ãã§ã¯ãã¢ã°ãªã±ã¼ã·ã§ã³APIãµã¼ãã¼ãWebhookã«ä½¿ç¨ãããç§çãªèªè¨¼å±ãéãã¦SHA-1ããã·ã¥é¢æ°ã§ç½²åãããã¦ã¼ã¶ã¼æä¾ã®è¨¼ææ¸ãä¾ç¶ã¨ãã¦åå¨ããå¯è½æ§ãããã¾ãã
SHA-1ãã¼ã¹ã®è¨¼ææ¸ã使ç¨ãã¦ããå ´åã¯ãç°å¢ã«<code>GODEBUG=x509sha1=1</code>ãè¨å®ãããã¨ã§ãæç¤ºçã«ãã®ãµãã¼ããæå¹ã«ããå¿
è¦ãããã¾ãã</p>
<p>Goã®<a href="https://go.dev/blog/compat">GODEBUGã®äºææ§ããªã·ã¼</a>ã«åºã¥ãã<code>x509sha1</code> GODEBUGã¨SHA-1è¨¼ææ¸ã®ãµãã¼ãã¯ã<a href="https://tip.golang.org/doc/go1.23">go1.24ã§å®å
¨ã«åé¤ããã</a>äºå®ã§ãã
go1.24ã¯2025å¹´ååã«ãªãªã¼ã¹ãããäºå®ã§ãã
SHA-1è¨¼ææ¸ã«ä¾åãã¦ããå ´åã¯ãã§ããã ãæ©ãç§»è¡ãéå§ãã¦ãã ããã</p>
<p>SHA-1ãµãã¼ãã®çµäºææãKubernetesãªãªã¼ã¹ãgo1.24ãæ¡ç¨ããè¨ç»ãããã³ã¡ããªã¯ã¹ã¨ç£æ»ãã°ãéãã¦SHA-1è¨¼ææ¸ã®ä½¿ç¨ãæ¤åºããæ¹æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/kubernetes/issues/125689">Kubernetes issue #125689</a>ãã覧ãã ããã</p>
<h4 id="nodeã®-status-nodeinfo-kubeproxyversion-ãã£ã¼ã«ãã®éæ¨å¥¨å-kep-4004-https-github-com-kubernetes-enhancements-issues-4004">Nodeã®<code>status.nodeInfo.kubeProxyVersion</code>ãã£ã¼ã«ãã®éæ¨å¥¨å(<a href="https://github.com/kubernetes/enhancements/issues/4004">KEP 4004</a>)</h4>
<p>Kubernetes v1.31ã§ã¯ãNodeã®<code>.status.nodeInfo.kubeProxyVersion</code>ãã£ã¼ã«ãã鿍奍ã¨ãªããå°æ¥ã®ãªãªã¼ã¹ã§åé¤ãããäºå®ã§ãã
ãã®ãã£ã¼ã«ãã®å¤ãæ£ç¢ºã§ã¯ãªãã£ã(ããã¦ç¾å¨ãæ£ç¢ºã§ã¯ãªã)ããã鿍奍åããã¦ãã¾ãã
ãã®ãã£ã¼ã«ãã¯kubeletã«ãã£ã¦è¨å®ããã¾ãããkubeletã¯kube-proxyã®ãã¼ã¸ã§ã³ãkube-proxyãå®è¡ããã¦ãããã©ããã«ã¤ãã¦ä¿¡é ¼ã§ããæ
å ±ãæã£ã¦ãã¾ããã</p>
<p>v1.31ã§ã¯ã<code>DisableNodeKubeProxyVersion</code><a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ãããã©ã«ãã§<code>true</code>ã«è¨å®ãããkubeletã¯é¢é£ããNodeã®<code>.status.kubeProxyVersion</code>ãã£ã¼ã«ããè¨å®ããªããªãã¾ãã</p>
<h4 id="ã¯ã©ã¦ããããã¤ãã¼ã¨ã®å
¨ã¦ã®ã¤ã³ããªã¼çµ±åã®åé¤">ã¯ã©ã¦ããããã¤ãã¼ã¨ã®å
¨ã¦ã®ã¤ã³ããªã¼çµ±åã®åé¤</h4>
<p><a href="https://kubernetes.io/ja/blog/2024/05/20/completing-cloud-provider-migration/">以åã®è¨äº</a>ã§å¼·èª¿ããããã«ãã¯ã©ã¦ããããã¤ãã¼çµ±åã®æå¾ã«æ®ã£ã¦ããã¤ã³ããªã¼ãµãã¼ããv1.31ãªãªã¼ã¹ã®ä¸é¨ã¨ãã¦åé¤ããã¾ããã
ããã¯ãã¯ã©ã¦ããããã¤ãã¼ã¨çµ±åã§ããªããªã£ãã¨ããæå³ã§ã¯ããã¾ããã
ãã ããå¤é¨çµ±åã使ç¨ããæ¨å¥¨ã¢ããã¼ãã<strong>å¿
ã</strong>使ç¨ããå¿
è¦ãããã¾ãã
ä¸é¨ã®çµ±åã¯Kubernetesããã¸ã§ã¯ãã®ä¸é¨ã§ãããä»ã¯ãµã¼ããã¼ãã£ã®ã½ããã¦ã§ã¢ã§ãã</p>
<p>ãã®ç¯ç®ã¯ãKubernetes v1.26ããå§ã¾ã£ããå
¨ã¦ã®ã¯ã©ã¦ããããã¤ãã¼çµ±åã®Kubernetesã³ã¢ããã®å¤é¨åããã»ã¹ã®å®äºã示ãã¦ãã¾ã(<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md">KEP-2395</a>)ã
ãã®å¤æ´ã«ãããKubernetesã¯çã«ãã³ãã¼ä¸ç«ãªãã©ãããã©ã¼ã ã«è¿ã¥ãã¾ãã</p>
<p>ã¯ã©ã¦ããããã¤ãã¼çµ±åã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/ja/blog/2023/12/14/cloud-provider-integration-changes/">v1.29 ã¯ã©ã¦ããããã¤ãã¼çµ±åæ©è½ã®ããã°è¨äº</a>ããèªã¿ãã ããã
ã¤ã³ããªã¼ã®ã³ã¼ãåé¤ã«é¢ãã追å ã®èæ¯ã«ã¤ãã¦ã¯ã(<a href="https://kubernetes.io/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">v1.29 鿍奍åããã°</a>)ãã確èªãã ããã</p>
<p>å¾è
ã®ããã°ã«ã¯ãv1.29以éã®ãã¼ã¸ã§ã³ã«ç§»è¡ããå¿
è¦ãããã¦ã¼ã¶ã¼ã«ã¨ã£ã¦æç¨ãªæ
å ±ãå«ã¾ãã¦ãã¾ãã</p>
<h4 id="ã¤ã³ããªã¼ãããã¤ãã¼ã®ãã£ã¼ãã£ã¼ã²ã¼ãã®åé¤">ã¤ã³ããªã¼ãããã¤ãã¼ã®ãã£ã¼ãã£ã¼ã²ã¼ãã®åé¤</h4>
<p>Kubernetes v1.31ã§ã¯ã以ä¸ã®ã¢ã«ãã¡ãã£ã¼ãã£ã¼ã²ã¼ããåé¤ããã¾ãã: <code>InTreePluginAWSUnregister</code>ã<code>InTreePluginAzureDiskUnregister</code>ã<code>InTreePluginAzureFileUnregister</code>ã<code>InTreePluginGCEUnregister</code>ã<code>InTreePluginOpenStackUnregister</code>ãããã³<code>InTreePluginvSphereUnregister</code>ã
ãããã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ãå®éã«ã³ã¼ããã¼ã¹ããåé¤ãããã¨ãªããã¤ã³ããªã¼ã®ããªã¥ã¼ã ãã©ã°ã¤ã³ãåé¤ãããã·ããªãªã®ãã¹ãã容æã«ããããã«å°å
¥ããã¾ããã
Kubernetes 1.30ã§ãããã®ã¤ã³ããªã¼ã®ããªã¥ã¼ã ãã©ã°ã¤ã³ã鿍奍ã¨ãªã£ãããããããã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯åé·ã¨ãªãããã¯ãç®çãæãããªããªãã¾ããã
å¯ä¸æ®ã£ã¦ããCSIã®ç§»è¡ã²ã¼ãã¯<code>InTreePluginPortworxUnregister</code>ã§ãããã¯Portworxã®CSIç§»è¡ãå®äºãããã®ããªã¼å
ããªã¥ã¼ã ãã©ã°ã¤ã³ã®å餿ºåãæ´ãã¾ã§ã¢ã«ãã¡ã®ã¾ã¾ã¨ãªãã¾ãã</p>
<h4 id="kubeletã®-keep-terminated-pod-volumes-ã³ãã³ãã©ã¤ã³ãã©ã°ã®åé¤">kubeletã®<code>--keep-terminated-pod-volumes</code>ã³ãã³ãã©ã¤ã³ãã©ã°ã®åé¤</h4>
<p>2017å¹´ã«éæ¨å¥¨ã¨ãªã£ãkubeletã®ãã©ã°<code>--keep-terminated-pod-volumes</code>ããv1.31ãªãªã¼ã¹ã®ä¸é¨ã¨ãã¦åé¤ããã¾ããã</p>
<p>詳細ã«ã¤ãã¦ã¯ãPull Request <a href="https://github.com/kubernetes/kubernetes/pull/122082">#122082</a>ãã覧ãã ããã</p>
<h4 id="cephfsããªã¥ã¼ã ãã©ã°ã¤ã³ã®åé¤">CephFSããªã¥ã¼ã ãã©ã°ã¤ã³ã®åé¤</h4>
<p><a href="https://kubernetes.io/ja/docs/concepts/storage/volumes/#cephfs">CephFSããªã¥ã¼ã ãã©ã°ã¤ã³</a>ããã®ãªãªã¼ã¹ã§åé¤ããã<code>cephfs</code>ããªã¥ã¼ã ã¿ã¤ãã¯æ©è½ããªããªãã¾ããã</p>
<p>代ããã«ããµã¼ããã¼ãã£ã®ã¹ãã¬ã¼ã¸ãã©ã¤ãã¼ã¨ãã¦<a href="https://github.com/ceph/ceph-csi/">CephFS CSIãã©ã¤ãã¼</a>ã使ç¨ãããã¨ããå§ããã¾ãã
ã¯ã©ã¹ã¿ã¼ãã¼ã¸ã§ã³ãv1.31ã«ã¢ããã°ã¬ã¼ãããåã«CephFSããªã¥ã¼ã ãã©ã°ã¤ã³ã使ç¨ãã¦ããå ´åã¯ãæ°ãããã©ã¤ãã¼ã使ç¨ããããã«ã¢ããªã±ã¼ã·ã§ã³ãåãããã¤ããå¿
è¦ãããã¾ãã</p>
<p>CephFSããªã¥ã¼ã ãã©ã°ã¤ã³ã¯ãv1.28ã§æ£å¼ã«éæ¨å¥¨ã¨ãã¼ã¯ããã¦ãã¾ããã</p>
<h4 id="ceph-rbdããªã¥ã¼ã ãã©ã°ã¤ã³ã®åé¤">Ceph RBDããªã¥ã¼ã ãã©ã°ã¤ã³ã®åé¤</h4>
<p>v1.31ãªãªã¼ã¹ã§ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/storage/volumes/#rbd">Ceph RBDããªã¥ã¼ã ãã©ã°ã¤ã³</a>ã¨ãã®CSIç§»è¡ãµãã¼ããåé¤ããã<code>rbd</code>ããªã¥ã¼ã ã¿ã¤ãã¯æ©è½ããªããªãã¾ããã</p>
<p>代ããã«ãã¯ã©ã¹ã¿ã¼ã§<a href="https://github.com/ceph/ceph-csi/">RBD CSIãã©ã¤ãã¼</a>ã使ç¨ãããã¨ããå§ããã¾ãã
ã¯ã©ã¹ã¿ã¼ãã¼ã¸ã§ã³ãv1.31ã«ã¢ããã°ã¬ã¼ãããåã«Ceph RBDããªã¥ã¼ã ãã©ã°ã¤ã³ã使ç¨ãã¦ããå ´åã¯ãæ°ãããã©ã¤ãã¼ã使ç¨ããããã«ã¢ããªã±ã¼ã·ã§ã³ãåãããã¤ããå¿
è¦ãããã¾ãã</p>
<p>Ceph RBDããªã¥ã¼ã ãã©ã°ã¤ã³ã¯ãv1.28ã§æ£å¼ã«éæ¨å¥¨ã¨ãã¼ã¯ããã¦ãã¾ããã</p>
<h4 id="kube-schedulerã«ãããécsiããªã¥ã¼ã å¶éãã©ã°ã¤ã³ã®éæ¨å¥¨å">kube-schedulerã«ãããéCSIããªã¥ã¼ã å¶éãã©ã°ã¤ã³ã®éæ¨å¥¨å</h4>
<p>v1.31ãªãªã¼ã¹ã§ã¯ããã¹ã¦ã®éCSIããªã¥ã¼ã å¶éã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³ã鿍奍ã¨ãªãã<a href="https://kubernetes.io/ja/docs/reference/scheduling/config/">ããã©ã«ããã©ã°ã¤ã³</a>ããæ¢ã«éæ¨å¥¨ã¨ãªã£ã¦ããããã¤ãã®ãã©ã°ã¤ã³ãåé¤ããã¾ãã
ããã«ã¯ä»¥ä¸ãå«ã¾ãã¾ãï¼</p>
<ul>
<li><code>AzureDiskLimits</code></li>
<li><code>CinderLimits</code></li>
<li><code>EBSLimits</code></li>
<li><code>GCEPDLimits</code></li>
</ul>
<p>ãããã®ããªã¥ã¼ã ã¿ã¤ãã¯CSIã«ç§»è¡ããã¦ããããã代ããã«<code>NodeVolumeLimits</code>ãã©ã°ã¤ã³ã使ç¨ãããã¨ããå§ããã¾ãã
<code>NodeVolumeLimits</code>ãã©ã°ã¤ã³ã¯ãåé¤ããããã©ã°ã¤ã³ã¨åãæ©è½ãå¦çã§ãã¾ãã
<a href="https://kubernetes.io/ja/docs/reference/scheduling/config/">ã¹ã±ã¸ã¥ã¼ã©ã¼ã®è¨å®</a>ã§æç¤ºçã«ãããã®ãã©ã°ã¤ã³ã使ç¨ãã¦ããå ´åã¯ã鿍奍ã®ãã©ã°ã¤ã³ã<code>NodeVolumeLimits</code>ãã©ã°ã¤ã³ã«ç½®ãæãã¦ãã ããã
<code>AzureDiskLimits</code>ã<code>CinderLimits</code>ã<code>EBSLimits</code>ã<code>GCEPDLimits</code>ãã©ã°ã¤ã³ã¯å°æ¥ã®ãªãªã¼ã¹ã§åé¤ãããäºå®ã§ãã</p>
<p>ãããã®ãã©ã°ã¤ã³ã¯ãKubernetes v1.14以é鿍奍ã¨ãªã£ã¦ãããããããã©ã«ãã®ã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³ãªã¹ãããåé¤ããã¾ãã</p>
<h3 id="ãªãªã¼ã¹ãã¼ãã¨ã¢ããã°ã¬ã¼ãã«å¿
è¦ãªã¢ã¯ã·ã§ã³">ãªãªã¼ã¹ãã¼ãã¨ã¢ããã°ã¬ã¼ãã«å¿
è¦ãªã¢ã¯ã·ã§ã³</h3>
<p>Kubernetes v1.31ãªãªã¼ã¹ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.31.md">ãªãªã¼ã¹ãã¼ã</a>ãã確èªãã ããã</p>
<h4 id="schedulerqueueinghints-ãæå¹ãªå ´å-ã¹ã±ã¸ã¥ã¼ã©ã¼ã¯queueinghintã使ç¨ããããã«ãªãã¾ãã"><code>SchedulerQueueingHints</code>ãæå¹ãªå ´åãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯QueueingHintã使ç¨ããããã«ãªãã¾ãã</h4>
<p>ã¹ã±ã¸ã¥ã¼ã©ã¼ã«ãPod/Updatedã¤ãã³ãã«ç»é²ãããQueueingHintã使ç¨ãã¦ã以åã¹ã±ã¸ã¥ã¼ã«ä¸å¯è½ã ã£ãPodã®æ´æ°ãããããã¹ã±ã¸ã¥ã¼ã«å¯è½ã«ãããã©ããã夿ãããµãã¼ãã追å ããã¾ããã
ãã®æ°æ©è½ã¯ããã£ã¼ãã£ã¼ã²ã¼ã<code>SchedulerQueueingHints</code>ãæå¹ãªå ´åã«åä½ãã¾ãã</p>
<p>ããã¾ã§ãã¹ã±ã¸ã¥ã¼ã«ä¸å¯è½ãªPodãæ´æ°ãããå ´åãã¹ã±ã¸ã¥ã¼ã©ã¯å¸¸ã«Podããã¥ã¼(<code>activeQ</code> / <code>backoffQ</code>)ã«æ»ãã¦ãã¾ããã
ããããPodã¸ã®ãã¹ã¦ã®æ´æ°ãPodãã¹ã±ã¸ã¥ã¼ã«å¯è½ã«ããããã§ã¯ããã¾ããã
ç¹ã«ãç¾å¨ã®å¤ãã®ã¹ã±ã¸ã¥ã¼ãªã³ã°å¶ç´ãä¸å¤ã§ãããã¨ãèæ
®ããã¨ãããã§ã¯ããã¾ããã
æ°ããåä½ã§ã¯ãã¹ã±ã¸ã¥ã¼ã«ä¸å¯è½ãªPodãæ´æ°ãããã¨ãã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¥ã¼ã¯QueueingHint(s)ã使ç¨ãã¦ããã®æ´æ°ãPodãã¹ã±ã¸ã¥ã¼ã«å¯è½ã«ããå¯è½æ§ããããã©ããããã§ãã¯ãã¾ãã
å°ãªãã¨ã1ã¤ã®QueueingHintã<code>Queue</code>ãè¿ããå ´åã«ã®ã¿ããããã<code>activeQ</code>ã¾ãã¯<code>backoffQ</code>ã«å度ãã¥ã¼ã¤ã³ã°ãã¾ãã</p>
<p><strong>ã«ã¹ã¿ã ã¹ã±ã¸ã¥ã¼ã©ã¼ãã©ã°ã¤ã³éçºè
åãã®å¿
è¦ãªã¢ã¯ã·ã§ã³</strong>:
ãã©ã°ã¤ã³ããã®æå¦ããã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãPodèªä½ã®æ´æ°ã«ãã£ã¦è§£æ±ºãããå¯è½æ§ãããå ´åããã©ã°ã¤ã³ã¯Pod/Updateã¤ãã³ãã«å¯¾ããQueueingHintãå®è£
ããå¿
è¦ãããã¾ãã
ä¾ãã°<code>schedulable=false</code>ã©ãã«ãæã¤Podãæå¦ããã«ã¹ã¿ã ãã©ã°ã¤ã³ãéçºããã¨ãã¾ãã
<code>schedulable=false</code>ã©ãã«ãæã¤Podã¯ã<code>schedulable=false</code>ã©ãã«ãåé¤ãããã¨ã¹ã±ã¸ã¥ã¼ã«å¯è½ã«ãªãã¾ãããã®ãã©ã°ã¤ã³ã¯Pod/Updateã¤ãã³ãã«å¯¾ããQueueingHintãå®è£
ããã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãPodã§ãã®ãããªã©ãã«ã®å¤æ´ãè¡ãããå ´åã«Queueãè¿ãããã«ãã¾ãã
詳細ã«ã¤ãã¦ã¯ãPull Request <a href="https://github.com/kubernetes/kubernetes/pull/122234">#122234</a>ãã覧ãã ããã</p>
<h4 id="kubeletã®-keep-terminated-pod-volumes-ã³ãã³ãã©ã¤ã³ãã©ã°ã®åé¤-1">kubeletã®<code>--keep-terminated-pod-volumes</code>ã³ãã³ãã©ã¤ã³ãã©ã°ã®åé¤</h4>
<p>2017å¹´ã«éæ¨å¥¨ã¨ãªã£ãkubeletã®ãã©ã°<code>--keep-terminated-pod-volumes</code>ããv1.31ãªãªã¼ã¹ã®ä¸é¨ã¨ãã¦åé¤ããã¾ããã</p>
<p>詳細ã«ã¤ãã¦ã¯ãPull Request <a href="https://github.com/kubernetes/kubernetes/pull/122082">#122082</a>ãã覧ãã ããã</p>
<h2 id="å
¥ææ¹æ³">å
¥ææ¹æ³</h2>
<p>Kubernetes v1.31ã¯ã<a href="https://github.com/kubernetes/kubernetes/releases/tag/v1.31.0">GitHub</a>ã¾ãã¯<a href="https://kubernetes.io/ja/releases/download/">Kubernetesãã¦ã³ãã¼ããã¼ã¸</a>ãããã¦ã³ãã¼ãã§ãã¾ãã</p>
<p>Kubernetesãå§ããã«ã¯ã<a href="https://kubernetes.io/ja/docs/tutorials/">対話å¼ã®ãã¥ã¼ããªã¢ã«</a>ããã§ãã¯ãããã<a href="https://minikube.sigs.k8s.io/">minikube</a>ã使ç¨ãã¦ãã¼ã«ã«Kubernetesã¯ã©ã¹ã¿ãå®è¡ãã¦ãã ããã
ã¾ãã<a href="https://kubernetes.io/ja/docs/setup/independent/create-cluster-kubeadm/">kubeadm</a>ã使ç¨ãã¦ç°¡åã«v1.31ãã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ãã</p>
<h2 id="ãªãªã¼ã¹ãã¼ã ">ãªãªã¼ã¹ãã¼ã </h2>
<p>Kubernetesã¯ããã®ã³ãã¥ããã£ã®ãµãã¼ããç®èº«ãããã¦æ¸å½ãªåªåã«æ¯ãããã¦å®ç¾ãã¦ãã¾ãã
åãªãªã¼ã¹ãã¼ã ã¯ãçæ§ãé ¼ãã«ãã¦ããKubernetesãªãªã¼ã¹ãæ§æããå¤ãã®è¦ç´ ãæ§ç¯ããããã«ååãã¦åããç®èº«çãªã³ãã¥ããã£ãã©ã³ãã£ã¢ã§æ§æããã¦ãã¾ãã
ããã«ã¯ãã³ã¼ãèªä½ããããã¥ã¡ã³ãã¼ã·ã§ã³ãããã¸ã§ã¯ã管çã«è³ãã¾ã§ãã³ãã¥ããã£ã®ããããåéããå°éçãªã¹ãã«ãæã¤äººã
ãå¿
è¦ã§ãã</p>
<p>ç§ãã¡ã¯ãKubernetes v1.31ãªãªã¼ã¹ãã³ãã¥ããã£ã«æä¾ããããã«å¤ãã®æéãè²»ããã¦ãã ãã£ã<a href="https://github.com/kubernetes/sig-release/blob/master/releases/release-1.31/release-team.md">ãªãªã¼ã¹ãã¼ã </a>å
¨ä½ã«æè¬ã®æã表ãã¾ãã
ãªãªã¼ã¹ãã¼ã ã®ã¡ã³ãã¼ã¯ãåãã¦Shadowã¨ãã¦åå ãã人ãããè¤æ°ã®ãªãªã¼ã¹ãµã¤ã¯ã«ãçµé¨ããããã©ã³ã®ãã¼ã ãªã¼ãã¼ã¾ã§å¤å²ã«ãããã¾ãã
ç¹ã«ããªãªã¼ã¹ãªã¼ãã¼ã®Angelos Kolaitisã«ã¯ç¹å¥ãªæè¬ã®æã表ãã¾ãã
ãªãªã¼ã¹ãµã¤ã¯ã«ãæåã«å°ãããã¼ã å
¨ä½ããµãã¼ãããåã¡ã³ãã¼ãæå¤§éã«è²¢ç®ã§ããç°å¢ãæ´ããã¨åæã«ããªãªã¼ã¹ããã»ã¹ã®æ¹åã«ãåãçµãã§ããã¾ããã</p>
<h2 id="ããã¸ã§ã¯ãã®é²æé度">ããã¸ã§ã¯ãã®é²æé度</h2>
<p>CNCF K8s DevStatsããã¸ã§ã¯ãã¯ãKubernetesã¨æ§ã
ãªãµãããã¸ã§ã¯ãã®é²æã«é¢ããè峿·±ããã¼ã¿ãã¤ã³ããéè¨ãã¦ãã¾ãã
ããã«ã¯ãå人ã®è²¢ç®ããè²¢ç®ãã¦ãã伿¥ã®æ°ã¾ã§ããã®ã¨ã³ã·ã¹ãã ã®é²åã«é¢ããåãçµã¿ã®æ·±ãã¨åºããç¤ºãæ§ã
ãªæ
å ±ãå«ã¾ãã¦ãã¾ãã</p>
<p>14é±é(5æ7æ¥ãã8æ13æ¥ã¾ã§)ç¶ããv1.31ãªãªã¼ã¹ãµã¤ã¯ã«ã§ã¯ã113ã®ç°ãªã伿¥ã¨528ã®å人ãKubernetesã«è²¢ç®ãã¾ããã</p>
<p>ã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã å
¨ä½ã§ã¯ã379ã®ä¼æ¥ããåè¨2268人ã®è²¢ç®è
ããã¾ãã
ããã¯ãååã®ãªãªã¼ã¹ãµã¤ã¯ã«ã¨æ¯è¼ãã¦ãè²¢ç®è
æ°ãé©ç°ã®63%å¢å ãã¾ããï¼</p>
<p>ãã®ãã¼ã¿ã®åºå
¸:</p>
<ul>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1715032800000&to=1723586399000&var-period=d28&var-repogroup_name=Kubernetes&var-repo_name=kubernetes%2Fkubernetes">Kubernetesã«è²¢ç®ãã¦ãã伿¥</a></li>
<li><a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&from=1715032800000&to=1723586399000&var-period=d28&var-repogroup_name=All&var-repo_name=kubernetes%2Fkubernetes">ã¨ã³ã·ã¹ãã å
¨ä½ã¸ã®è²¢ç®</a></li>
</ul>
<p>ããã§ããè²¢ç®ã¨ã¯ãã³ãããã®ä½æãã³ã¼ãã¬ãã¥ã¼ãã³ã¡ã³ããIssueãPRã®ä½æãPRã®ã¬ãã¥ã¼(ããã°ãããã¥ã¡ã³ããå«ã)ãã¾ãã¯IssueãPRã¸ã®ã³ã¡ã³ããæãã¾ãã</p>
<p>è²¢ç®ã«èå³ãããæ¹ã¯ã<a href="https://www.kubernetes.dev/docs/guide/#getting-started">ãã®ãã¼ã¸</a>ã訪ãã¦å§ãã¦ãã ããã</p>
<p>Kubernetesããã¸ã§ã¯ãã¨ã³ãã¥ããã£å
¨ä½ã®é²æé度ã«ã¤ãã¦ãã£ã¨ç¥ãããæ¹ã¯ã<a href="https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All">DevStatsããã§ãã¯</a>ãã¦ãã ããã</p>
<h2 id="ã¤ãã³ãæ
å ±">ã¤ãã³ãæ
å ±</h2>
<p>2024å¹´8æãã11æã«ããã¦éå¬äºå®ã®Kubernetesã¨ã¯ã©ã¦ããã¤ãã£ãé¢é£ã®ã¤ãã³ãããç´¹ä»ãã¾ããKubeConãKCDããã®ä»ä¸çåå°ã§éå¬ãããæ³¨ç®ã®ã«ã³ãã¡ã¬ã³ã¹ãå«ã¾ãã¦ãã¾ããKubernetesã³ãã¥ããã£ã®ææ°æ
å ±ãå
¥æãã交æµãæ·±ãã¾ãããã</p>
<p><strong>2024å¹´8æ</strong></p>
<ul>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-open-source-summit-ai-dev-china/"><strong>KubeCon + CloudNativeCon + Open Source Summit China 2024</strong></a>: 2024å¹´8æ21æ¥-23æ¥ | 馿¸¯</li>
<li><a href="https://events.linuxfoundation.org/kubeday-japan/"><strong>KubeDay Japan</strong></a>: 2024å¹´8æ27æ¥ | æ±äº¬ãæ¥æ¬</li>
</ul>
<p><strong>2024å¹´9æ</strong></p>
<ul>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-lahore-presents-kcd-lahore-pakistan-2024/"><strong>KCD Lahore - Pakistan 2024</strong></a>: 2024å¹´9æ1æ¥ | ã©ãã¼ã«ãããã¹ã¿ã³</li>
<li><a href="https://community.cncf.io/events/details/cncf-stockholm-presents-kubertenes-birthday-bash-stockholm-a-couple-of-months-late/"><strong>KuberTENes Birthday Bash Stockholm</strong></a>: 2024å¹´9æ5æ¥ | ã¹ããã¯ãã«ã ãã¹ã¦ã§ã¼ãã³</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-australia-presents-kcd-sydney-24/"><strong>KCD Sydney '24</strong></a>: 2024å¹´9æ5æ¥-6æ¥ | ã·ããã¼ããªã¼ã¹ãã©ãªã¢</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-washington-dc-presents-kcd-washington-dc-2024/"><strong>KCD Washington DC 2024</strong></a>: 2024å¹´9æ24æ¥ | ã¯ã·ã³ãã³DCãã¢ã¡ãªã«åè¡å½</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-porto-presents-kcd-porto-2024/"><strong>KCD Porto 2024</strong></a>: 2024å¹´9æ27æ¥-28æ¥ | ãã«ãããã«ãã¬ã«</li>
</ul>
<p><strong>2024å¹´10æ</strong></p>
<ul>
<li><a href="https://events.linuxfoundation.org/kubeday-australia/"><strong>KubeDay Australia</strong></a>: 2024å¹´10æ1æ¥ | ã¡ã«ãã«ã³ããªã¼ã¹ãã©ãªã¢</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-austria-presents-kcd-austria-2024/"><strong>KCD Austria 2024</strong></a>: 2024å¹´10æ8æ¥-10æ¥ | ã¦ã£ã¼ã³ããªã¼ã¹ããªã¢</li>
<li><a href="https://community.cncf.io/events/details/cncf-kcd-uk-presents-kubernetes-community-days-uk-london-2024/"><strong>KCD UK - London 2024</strong></a>: 2024å¹´10æ22æ¥-23æ¥ | ã°ã¬ã¼ã¿ã¼ãã³ãã³ãã¤ã®ãªã¹</li>
</ul>
<p><strong>2024å¹´11æ</strong></p>
<ul>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/"><strong>KubeCon + CloudNativeCon North America 2024</strong></a>: 2024å¹´11æ12æ¥-15æ¥ | ã½ã«ãã¬ã¤ã¯ã·ãã£ãã¢ã¡ãªã«åè¡å½</li>
<li><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/kubernetes-on-edge-day/"><strong>Kubernetes on EDGE Day North America</strong></a>: 2024å¹´11æ12æ¥ | ã½ã«ãã¬ã¤ã¯ã·ãã£ãã¢ã¡ãªã«åè¡å½</li>
</ul>
<h2 id="次æãªãªã¼ã¹ã«é¢ããã¦ã§ããã¼ã®ãç¥ãã">次æãªãªã¼ã¹ã«é¢ããã¦ã§ããã¼ã®ãç¥ãã</h2>
<p>2024å¹´9æ12æ¥(æ¨)åå10æ(å¤ªå¹³æ´æé)ã«éå¬ãããKubernetes v1.31ãªãªã¼ã¹ãã¼ã ã¡ã³ãã¼ã«ããã¦ã§ããã¼ã«ãåå ãã ããããã®ãªãªã¼ã¹ã®ä¸»è¦ãªæ©è½ããã¢ããã°ã¬ã¼ãè¨ç»ã«å½¹ç«ã¤éæ¨å¥¨åããã³åé¤ãããæ©è½ã«ã¤ãã¦å¦ã¶ãã¨ãã§ãã¾ãã
詳細ããã³ç»é²ã«ã¤ãã¦ã¯ãCNCFãªã³ã©ã¤ã³ããã°ã©ã ãµã¤ãã®<a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kubernetes-131-release/">ã¤ãã³ããã¼ã¸</a>ãã覧ãã ããã</p>
<h2 id="åå æ¹æ³">åå æ¹æ³</h2>
<p>Kubernetesã«é¢ããæãç°¡åãªæ¹æ³ã¯ãããªãã®èå³ã«åã£ã<a href="https://github.com/kubernetes/community/blob/master/sig-list.md">Special Interest Groups(SIG)</a>ã®ããããã«åå ãããã¨ã§ãã
Kubernetesã³ãã¥ããã£ã«åãã¦ä½ãçºä¿¡ããããã¨ã¯ããã¾ããï¼
æ¯é±ã®<a href="https://github.com/kubernetes/community/tree/master/communication">ã³ãã¥ããã£ãã¼ãã£ã³ã°</a>ãã以ä¸ã®ãã£ã³ãã«ã§ããªãã®å£°ãå
±æãã¦ãã ããã
ç¶ç¶çãªãã£ã¼ãããã¯ã¨ãµãã¼ãã«æè¬ãããã¾ãã</p>
<ul>
<li>ææ°æ
å ±ã¯X(æ§Twitter)ã®<a href="https://x.com/kubernetesio">@Kubernetesio</a>ããã©ãã¼ãã¦ãã ãã</li>
<li><a href="https://discuss.kubernetes.io/">Discuss</a>ã§ã³ãã¥ããã£ãã£ã¹ã«ãã·ã§ã³ã«åå ãã¦ãã ãã</li>
<li><a href="http://slack.k8s.io/">Slack</a>ã§ã³ãã¥ããã£ã«åå ãã¦ãã ãã</li>
<li><a href="http://stackoverflow.com/questions/tagged/kubernetes">Stack Overflow</a>ã§è³ªåããããåçããããã¦ãã ãã</li>
<li>ããªãã®Kubernetesã«é¢ãã<a href="https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform">ã¹ãã¼ãªã¼</a>ãå
±æãã¦ãã ãã</li>
<li>Kubernetesã®ææ°æ
å ±ã¯<a href="https://kubernetes.io/blog/">ããã°</a>ã§ããã«è©³ããèªããã¨ãã§ãã¾ã</li>
<li><a href="https://github.com/kubernetes/sig-release/tree/master/release-team">Kubernetesãªãªã¼ã¹ãã¼ã </a>ã«ã¤ãã¦ãã£ã¨å¦ãã§ãã ãã</li>
</ul>
- Client-Goã¸ã®ãã£ã¼ãã£ã¼ã²ã¼ãã®å°å
¥: æè»æ§ã¨ç®¡çæ§ãå¼·åããããã«https://kubernetes.io/ja/blog/2024/08/12/feature-gates-in-client-go/Mon, 12 Aug 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/08/12/feature-gates-in-client-go/
<p>Kubernetesã³ã³ãã¼ãã³ã㯠<em>ãã£ã¼ãã£ã¼ã²ã¼ã</em> ã¨ãããªã³/ãªãã®ã¹ã¤ããã使ããã¨ã§ãæ°æ©è½ã追å ããéã®ãªã¹ã¯ã管çãã¦ãã¾ãã
<em>ãã£ã¼ãã£ã¼ã²ã¼ã</em> ã®ä»çµã¿ã¯ãAlphaãBetaãGAã¨ãã£ãåã¹ãã¼ã¸ãéãã¦ãæ°æ©è½ã®ç¶ç¶çãªå質èªå®ãå¯è½ã«ãã¾ãã</p>
<p>kube-controller-managerãkube-schedulerã®ãããªKubernetesã³ã³ãã¼ãã³ãã¯ãclient-goã©ã¤ãã©ãªã使ã£ã¦APIã¨ããã¨ããã¾ãã
Kubernetesã¨ã³ã·ã¹ãã ã¯ããã®ã©ã¤ãã©ãªãã³ã³ããã¼ã©ã¼ããã¼ã«ãWebhookãªã©ããã«ãããããã«å©ç¨ãã¦ãã¾ãã
ææ°ã®client-goã«ã¯ããèªä½ã«ãã£ã¼ãã£ã¼ã²ã¼ãæ©æ§ããããéçºè
ãã¯ã©ã¹ã¿ã¼ç®¡çè
ã¯æ°ããªã¯ã©ã¤ã¢ã³ãã®æ©è½ãæ¡ç¨ãããã©ãããå¶å¾¡ãããã¨ãã§ãã¾ãã</p>
<p>Kubernetesã«ããããã£ã¼ãã£ã¼ã²ã¼ãã«ã¤ãã¦æ·±ãç¥ãã«ã¯ã<a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ãåç
§ãã¦ãã ããã</p>
<h2 id="åæ©">åæ©</h2>
<p>client-goã®ãã£ã¼ãã£ã¼ã²ã¼ããç»å ´ããã¾ã§ã¯ãããããã®æ©è½ãç¬èªã®ããæ¹ã§ã å©ç¨ã§ããæ©è½ã¨ãã®æ©è½ã®æå¹åã®ããã®ä»çµã¿ãåºå¥ãã¦ãã¾ããã
client-goã®æ°ãã¼ã¸ã§ã³ã«ã¢ãããã¼ããããã¨ã§æå¹åã§ããæ©è½ãããã¾ããã
ãã®ä»ã®æ©è½ã«ã¤ãã¦ã¯ãå©ç¨ããããã°ã©ã ãããã¤ã§ãè¨å®ã§ããç¶æ
ã«ãã¦ããå¿
è¦ãããã¾ããã
ããä¸é¨ã®æ©è½ã«ã¯ç°å¢å¤æ°ã使ã£ã¦å®è¡æã«è¨å®å¯è½ãªãã®ãããã¾ããã
kube-apiserverãæä¾ãããã£ã¼ãã£ã¼ã²ã¼ãæ©è½ãå©ç¨ããå ´åã(è¨å®ãæ©è½å®è£
ã®ææãåå ã§)ããããæ©è½ããµãã¼ãããªãã¯ã©ã¤ã¢ã³ããµã¤ãã®ãã©ã¼ã«ããã¯æ©æ§ããã°ãã°å¿
è¦ã«ãªãã¾ããã
ãããã®ãã©ã¼ã«ããã¯æ©æ§ã§æããã«ãªã£ãåé¡ãããã°ãåé¡ã®å½±é¿ãç·©åããããã«client-goã®ãã¼ã¸ã§ã³ãåºå®ãããããã¼ã«ããã¯ãããããå¿
è¦ãããã¾ããã</p>
<p>ãããã®ãããã®ã¢ããã¼ãããclient-goãå©ç¨ããããã¤ãã®ããã°ã©ã ã«å¯¾ãã¦ã®ã¿ããã©ã«ãã§æ©è½ãæå¹åããå ´åã«ã¯ããã广ããããããã®ã§ã¯ããã¾ããã§ããã</p>
<p>åä¸ã®ã³ã³ãã¼ãã³ãã«å¯¾ãã¦æ°æ©è½ãæå¹åããã ãã§ããæ¨æºè¨å®ã®å¤æ´ãç´ã¡ã«ãã¹ã¦ã®Kubernetesã³ã³ãã¼ãã³ãã«ä¼æ¬ããå½±é¿ç¯å²ã¯ç大ãªãã®ã¨ãªã£ã¦ãã¾ããã</p>
<h2 id="client-goã«ããããã£ã¼ãã£ã¼ã²ã¼ã">client-goã«ããããã£ã¼ãã£ã¼ã²ã¼ã</h2>
<p>ãããã課é¡ã«å¯¾å¦ãããããclient-goã®å奿©è½ã¯æ°ãããã£ã¼ãã£ã¼ã²ã¼ãæ©æ§ã使ããã§ã¼ãºã«ç§»è¡ãã¾ãã
Kubernetesã³ã³ãã¼ãã³ãã®ãã£ã¼ãã£ã¼ã²ã¼ã使ç¨çµé¨ããããªããéçºè
ãã¦ã¼ã¶ã¼ã¯èª°ããæ
£ã親ããã ããæ¹ã§æ©è½ãæå¹å/ç¡å¹åã§ããããã«ãªãã¾ãã</p>
<p>client-goã®æè¿ã®ãã¼ã¸ã§ã³ã使ãã ãã§ãclient-goãç¨ãã¦ãã«ãããã½ããã¦ã§ã¢ãå©ç¨ããæ¹ã
ã«ã¨ã£ã¦ã¯ããã¤ãã®å©çãããã¾ãã</p>
<ul>
<li>ã¢ã¼ãªã¼ã¢ããã¿ã¼ã¯ããã©ã«ãã§ã¯ç¡å¹åããã¦ããclient-goã®æ©è½ã«ã¤ãã¦ãããã»ã¹åä½ã§æå¹åã§ãã¾ãã</li>
<li>æåãããããªæ©è½ã«ã¤ãã¦ã¯ãæ°ããªãã¤ããªããã«ãããã«ç¡å¹åã§ãã¾ãã</li>
<li>client-goã®ãã¹ã¦ã®æ¢ç¥ã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ç¶æ
ãè¨é²ããã¦ãããã¦ã¼ã¶ã¼ã¯æ©è½ã®æåã調æ»ãããã¨ãã§ãã¾ãã</li>
</ul>
<p>client-goãç¨ãã¦ãã«ãããã½ããã¦ã§ã¢ãéçºãã¦ããæ¹ã
ã«ã¨ã£ã¦ã¯ã次ã®ãããªå©çãããã¾ãã</p>
<ul>
<li>ç°å¢å¤æ°ãã client-goã®ãã£ã¼ãã£ã¼ã²ã¼ãã®ãªã¼ãã¼ã©ã¤ããæå®ãããã¨ãã§ãã¾ãã
client-goã®æ©è½ã«ãã°ãè¦ã¤ãã£ãå ´åã¯ãæ°ãããªãªã¼ã¹ãå¾
ããã«æ©è½ãç¡å¹åã§ãã¾ãã</li>
<li>ããã°ã©ã ã®ããã©ã«ãã®æåã夿´ããç®çã§ãéçºè
ã¯ç°å¢å¤æ°ãã¼ã¹ã®ãªã¼ãã¼ã©ã¤ããä»ã®ã½ã¼ã¹ããã®èªã¿è¾¼ã¿ã§ç½®ãæããããå®è¡æã®ãªã¼ãã¼ã©ã¤ããå®å
¨ã«ç¡å¹åããããããã¨ãã§ãã¾ãã
ãã®ã«ã¹ã¿ãã¤ãºå¯è½ãªæ¯ãèãã¯ãKubernetesã³ã³ãã¼ãã³ãã®æ¢åã®<code>--feature-gates</code>ã³ãã³ãã©ã¤ã³ãã©ã°ãæ©è½æå¹åã¡ããªã¯ã¹ããã®ã³ã°ãçµ±åããã®ã«å©ç¨ãã¾ãã</li>
</ul>
<h2 id="client-goã®ãã£ã¼ãã£ã¼ã²ã¼ãããªã¼ãã¼ã©ã¤ããã">client-goã®ãã£ã¼ãã£ã¼ã²ã¼ãããªã¼ãã¼ã©ã¤ããã</h2>
<p><strong>è£è¶³</strong>: ããã§ã¯client-goã®ãã£ã¼ãã£ã¼ã²ã¼ããå®è¡æã«ä¸æ¸ãããããã©ã«ãã®æ¹æ³ã«ã¤ãã¦èª¬æãã¾ãã
client-goã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ãåã
ã®ããã°ã©ã ã®éçºè
ãã«ã¹ã¿ãã¤ãºããããç¡å¹åããããããã¨ãã§ãã¾ãã
Kubernetesã³ã³ãã¼ãã³ãã§ã¯client-goãã£ã¼ãã£ã¼ã²ã¼ãã®ä¸æ¸ãã<code>--feature-gates</code>ãã©ã°ã§å¶å¾¡ãã¾ãã</p>
<p>client-goã®æ©è½ã¯<code>KUBE_FEATURE</code>ããå§ã¾ãååã®ç°å¢å¤æ°ãè¨å®ãããã¨ã«ãã£ã¦ãæå¹åãããç¡å¹åããããããã¨ãã§ãã¾ãã
ä¾ãã°ã<code>MyFeature</code>ã¨ããååã®æ©è½ãæå¹åããã«ã¯ã次ã®ãããªç°å¢å¤æ°ãè¨å®ãã¾ãã</p>
<pre tabindex="0"><code> KUBE_FEATURE_MyFeature=true
</code></pre><p>ãã®æ©è½ãç¡å¹åãããã¨ãã«ã¯ãç°å¢å¤æ°ã<code>false</code>ã«è¨å®ãã¾ãã</p>
<pre tabindex="0"><code> KUBE_FEATURE_MyFeature=false
</code></pre><p><strong>è£è¶³</strong>: ããã¤ãã®ãªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã§ã¯ãç°å¢å¤æ°ã¯å¤§æåå°æåãåºå¥ããã¾ãã
ãããã£ã¦<code>KUBE_FEATURE_MyFeature</code>ã¨<code>KUBE_FEATURE_MYFEATURE</code>ã¯ç°ãªãï¼ã¤ã®å¤æ°ã¨ãã¦èªèãããå ´åãããã¾ãã</p>
<h2 id="client-goã®ãã£ã¼ãã£ã¼ã²ã¼ããã«ã¹ã¿ãã¤ãºãã">client-goã®ãã£ã¼ãã£ã¼ã²ã¼ããã«ã¹ã¿ãã¤ãºãã</h2>
<p>æ¨æºã®ãã£ã¼ãã£ã¼ã²ã¼ã䏿¸ãæ©è½ã§ããç°å¢å¤æ°ãã¼ã¹ã®ä»çµã¿ã¯ãKubernetesã¨ã³ã·ã¹ãã ã®å¤ãã®ããã°ã©ã ã«ã¨ã£ã¦ååãªãã®ã¨è¨ããç¹æ®ãªã¤ã³ãã°ã¬ã¼ã·ã§ã³ãä¸è¦ãªããæ¹ã§ãã
ç°ãªãæåãå¿
è¦ã¨ããããã°ã©ã ã®ããã«ããã®ä»çµã¿ãç¬èªã®ãã£ã¼ãã£ã¼ã²ã¼ããããã¤ãã¼ã§ç½®ãæãããã¨ãã§ãã¾ãã
ããã«ããããã¾ãåããªããã¨ãåãã£ã¦ããæ©è½ãå¼·å¶çã«ç¡å¹åãããããã£ã¼ãã£ã¼ã²ã¼ããç´æ¥å¤é¨ã®è¨å®ãµã¼ãã¹ããèªã¿è¾¼ãã ããã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ãããã£ã¼ãã£ã¼ã²ã¼ãã®ä¸æ¸ããæå®ããããããã¨ãã§ããããã«ãªãã¾ãã</p>
<p>Kubernetesã³ã³ãã¼ãã³ãã¯client-goã®æ¨æºã®ãã£ã¼ãã£ã¼ã²ã¼ããããã¤ãã¼ããæ¢åã®Kubernetesãã£ã¼ãã£ã¼ã²ã¼ããããã¤ãã¼ã«å¯¾ããæ¥ãæ¨(shim)ã使ã£ã¦ç½®ãæãã¾ãã</p>
<p>å®ç¨çãªçç±ãããclient-goã®ãã£ã¼ãã£ã¼ã²ã¼ãã¯ä»ã®Kubernetesã®ãã£ã¼ãã£ã¼ã²ã¼ãã¨åæ§ã«åãæ±ããã¦ãã¾ãã
(<code>--feature-gates</code>ã³ãã³ãã©ã¤ã³ãã©ã°ã«è½ã¨ãè¾¼ã¾ããä¸ã§ãæ©è½æå¹åã¡ããªã¯ã¹ã«ç»é²ãããããã°ã©ã éå§æã«ãã°ããªããã¾ã)ã</p>
<p>æ¨æºã®ãã£ã¼ãã£ã¼ã²ã¼ããããã¤ãã¼ãç½®ãæããã«ã¯ãGatesã¤ã³ã¿ã¼ãã§ã¼ã¹ãå®è£
ããããã±ã¼ã¸åæåã®éã«ReplaceFeatureGatesãå¼ã¶å¿
è¦ãããã¾ãã
以ä¸ã¯ç°¡åãªä¾ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">import</span> (
</span></span><span style="display:flex;"><span> <span style="">â</span>k8s.io<span style="color:#666">/</span>client<span style="color:#666">-</span><span style="color:#a2f;font-weight:bold">go</span><span style="color:#666">/</span>features<span style="">â</span>
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">type</span> AlwaysEnabledGates <span style="color:#a2f;font-weight:bold">struct</span>{}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">func</span> (AlwaysEnabledGates) <span style="color:#00a000">Enabled</span>(features.Feature) <span style="color:#0b0;font-weight:bold">bool</span> {
</span></span><span style="display:flex;"><span> <span style="color:#a2f;font-weight:bold">return</span> <span style="color:#a2f;font-weight:bold">true</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#a2f;font-weight:bold">func</span> <span style="color:#00a000">init</span>() {
</span></span><span style="display:flex;"><span> features.<span style="color:#00a000">ReplaceFeatureGates</span>(AlwaysEnabledGates{})
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>å®ç¾©æ¸ã¿ã®client-goã®æ©è½ã®å®å
¨ãªä¸è¦§ãå¿
è¦ãªå ´åã¯ãRegistryã¤ã³ã¿ã¼ãã§ã¼ã¹ãå®è£
ãã¦<code>AddFeaturesToExistingFeatureGates</code>ãå¼ã¶ãã¨ã§åå¾ã§ãã¾ãã
å®å
¨ãªä¾ã¨ãã¦ã¯<a href="https://github.com/kubernetes/kubernetes/blob/64ba17c605a41700f7f4c4e27dca3684b593b2b9/pkg/features/kube_features.go#L990-L997">Kubernetesã«ãããä½¿ç¨æ¹æ³</a>ãåèã«ãã¦ãã ããã</p>
<h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>client-go v1.30ã®ãã£ã¼ãã£ã¼ã²ã¼ãã®å°å
¥ã«ãããclient-goã®æ°æ©è½ã®ãã¼ã«ã¢ã¦ããå®å
¨ãã¤ç°¡åã«å®æ½ã§ããããã«ãªãã¾ããã
ã¦ã¼ã¶ã¼ãéçºè
ã¯client-goã®æ°æ©è½ãæ¡ç¨ãããã¼ã¹ã管çã§ãã¾ãã</p>
<p>Kubernetes APIã®ä¸¡å´ã«ã¾ãããæ©è½ã®å質èªå®ã«é¢ããå
±éã®ã¡ã«ããºã ãã§ãããã¨ã«ãã£ã¦ãKubernetesã³ã³ããªãã¥ã¼ã¿ã¼ã®ä½æ¥ã¯å¹çåããã¤ã¤ããã¾ãã</p>
- SIG Nodeã®ç´¹ä»https://kubernetes.io/ja/blog/2024/06/20/sig-node-spotlight-2024/Thu, 20 Jun 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/06/20/sig-node-spotlight-2024/
<p>ã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ã®ä¸çã§ã<a href="https://kubernetes.io/ja">Kubernetes</a>ã¯å§åçãªå卿ã示ãã¦ãããä¸çä¸ã§æãè¤éã§åçãªã¢ããªã±ã¼ã·ã§ã³ã®ä¸é¨ãåããã¦ãã¾ãã
ãã®è£ã§ã¯ãSpecial Interest Groups(SIG)ã®ãããã¯ã¼ã¯ãKubernetesã®é©æ°ã¨å®å®æ§ãç½å¼ãã¦ãã¾ãã</p>
<p>仿¥ã¯ãSIG Nodeã®ã¡ã³ãã¼ã§ãã<a href="https://www.linkedin.com/in/matthias-bertschy-b427b815/">Matthias Bertschy</a>ã<a href="https://www.linkedin.com/in/gunju-kim-916b33190/">Gunju Kim</a>ã<a href="https://www.linkedin.com/in/sergeykanzhelev/">Sergey Kanzhelev</a>ã«ã話ã伺ããå½¼ãã®å½¹å²ã課é¡ãããã¦<a href="https://github.com/kubernetes/community/blob/master/sig-node/README.md">SIG Node</a>å
ã®æ³¨ç®ãã¹ãåãçµã¿ã«ã¤ãã¦å
ãå½ã¦ã¦ããã¾ãã</p>
<p><em>è¤æ°ã®åçè
ã«ããå
±ååçã®å ´åã¯ãåçè
å
¨å¡ã®ã¤ãã·ã£ã«ã§è¡¨è¨ãã¾ãã</em></p>
<h2 id="èªå·±ç´¹ä»">èªå·±ç´¹ä»</h2>
<p><strong>Arpit:</strong> æ¬æ¥ã¯ãæéãããã ãããããã¨ããããã¾ããã¾ããèªå·±ç´¹ä»ã¨SIG Nodeå
ã§ã®å½¹å²ã«ã¤ãã¦ç°¡åã«æãã¦ããã ãã¾ããï¼</p>
<p><strong>Matthias:</strong> Matthias Bertschyã¨ç³ãã¾ãããã©ã³ã¹äººã§ããã©ã³ã¹ã¢ã«ãã¹ã®è¿ããã¸ã¥ãã¼ãæ¹ã®ãã°ã«ä½ãã§ãã¾ãã2017å¹´ããKubernetesã®ã³ã³ããªãã¥ã¼ã¿ã¼ã¨ãã¦æ´»åããSIG Nodeã®ã¬ãã¥ã¢ã¼ãããã¦<a href="https://docs.prow.k8s.io/docs/overview/">Prow</a>ã®ã¡ã³ããã¼ãåãã¦ãã¾ããç¾å¨ã¯ã<a href="https://www.armosec.io/">ARMO</a>ã¨ããã»ãã¥ãªãã£ã¹ã¿ã¼ãã¢ããã§ã·ãã¢Kuberneteséçºè
ã¨ãã¦åãã¦ãã¾ããARMOã¯ã<a href="https://www.cncf.io/projects/kubescape/">Kubescape</a>ã¨ããããã¸ã§ã¯ããCNCFã«å¯è´ãã¾ããã</p>
<p><img alt="ã¸ã¥ãã¼ãæ¹ã¨ã¢ã«ãã¹" src="https://kubernetes.io/ja/blog/2024/06/20/sig-node-spotlight-2024/Lake_Geneva_and_the_Alps.jpg"></p>
<p><strong>Gunju:</strong> Gunju Kimã¨ç³ãã¾ãã<a href="https://www.navercorp.com/naver/naverMain">NAVER</a>ã§ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ã¨ãã¦åãã¦ãããæ¤ç´¢ãµã¼ãã¹ç¨ã®ã¯ã©ã¦ããã©ãããã©ã¼ã ã®éçºã«æ³¨åãã¦ãã¾ãã2021å¹´ãã空ãæéã使ã£ã¦Kubernetesããã¸ã§ã¯ãã«ã³ã³ããªãã¥ã¼ããã¦ãã¾ãã</p>
<p><strong>Sergey:</strong> Sergey Kanzhelevã¨ç³ãã¾ãã3å¹´éKubernetesã¨<a href="https://cloud.google.com/kubernetes-engine">Google Kubernetes Engine</a>ã«æºãããé·å¹´ãªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ãã«åãçµãã§ãã¾ãããç¾å¨ã¯SIG Nodeã®è°é·ãåãã¦ãã¾ãã</p>
<h2 id="sig-nodeã«ã¤ãã¦">SIG Nodeã«ã¤ãã¦</h2>
<p><strong>Arpit:</strong> ãããã¨ããããã¾ãï¼Kubernetesã¨ã³ã·ã¹ãã å
ã§ã®SIG Nodeã®è²¬ä»»ã«ã¤ãã¦ãèªè
ã®æ¹ã
ã«æ¦è¦ã説æãã¦ããã ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> SIG Nodeã¯Kubernetesã§æåã«ããããã¯æåæã«è¨ç«ãããSIGã®1ã¤ã§ãããã®SIGã¯ãKubernetesã¨Nodeãªã½ã¼ã¹ã¨ã®ãã¹ã¦ã®ããåããããã¦Nodeèªä½ã®ã¡ã³ããã³ã¹ã«è²¬ä»»ãæã£ã¦ãã¾ããããã¯ããªãåºç¯å²ã«åã³ãSIGã¯Kubernetesã®ã³ã¼ããã¼ã¹ã®å¤§é¨åãææãã¦ãã¾ãããã®åºç¯ãªæææ¨©ã®ãããSIG Nodeã¯SIG NetworkãSIG StorageãSIG Securityãªã©ä»ã®SIGã¨å¸¸ã«é£çµ¡ãåãåã£ã¦ãããKubernetesã®æ°æ©è½ãéçºã®ã»ã¨ãã©ãä½ããã®å½¢ã§SIG Nodeã«é¢ãã£ã¦ãã¾ãã</p>
<p><strong>Arpit</strong>: SIG Nodeã¯Kubernetesã®ããã©ã¼ãã³ã¹ã¨å®å®æ§ã«ã©ã®ããã«è²¢ç®ãã¦ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> Kubernetesã¯ãå®ä¾¡ãªãã¼ãã¦ã§ã¢ãæè¼ããå°åã®ç©çVMãããå¤§è¦æ¨¡ãªAI/MLæé©åãããGPUæè¼Nodeã¾ã§ããã¾ãã¾ãªãµã¤ãºã¨å½¢ç¶ã®Nodeã§åä½ãã¾ããNodeã¯æ°ãæãªã³ã©ã¤ã³ã®ã¾ã¾ã®å ´åãããã°ãã¯ã©ã¦ããããã¤ãã¼ã®ä½å°ã³ã³ãã¥ã¼ãã£ã³ã°ã§å®è¡ããã¦ãããããçå½ã§ä»»æã®ã¿ã¤ãã³ã°ã§ããªã¨ã³ãããããå¯è½æ§ãããã¾ãã</p>
<p>Nodeä¸ã®Kubernetesã¨ã¼ã¸ã§ã³ãã§ãã<a href="https://kubernetes.io/ja/docs/concepts/overview/components/#kubelet"><code>kubelet</code></a>ã¯ãããããã¹ã¦ã®ç°å¢ã§ç¢ºå®ã«åä½ããå¿
è¦ãããã¾ãã
è¿å¹´ã<code>kubelet</code>ã®æä½ããã©ã¼ãã³ã¹ã®éè¦æ§ãå¢ãã¦ãã¾ãã
ãã®çç±ã¯äºã¤ããã¾ãã
ä¸ã¤ã¯ãKubernetesãéä¿¡ãå°å£²æ¥ãªã©ã®åéã§ãããå°è¦æ¨¡ãªNodeã§ä½¿ç¨ãããããã«ãªã£ã¦ãã¦ãããå¯è½ãªéãå°ããªãªã½ã¼ã¹æ¶è²»(ãããããªã³ã)ã§åä½ãããã¨ãæ±ãããã¦ããããã§ãã
ããä¸ã¤ã¯ãAI/MLã¯ã¼ã¯ãã¼ãã§ã¯åNodeãé常ã«é«ä¾¡ãªãããæä½ã®é
å»¶ãããã1ç§ã§ãè¨ç®ã³ã¹ãã«å¤§ããªå½±é¿ãä¸ããå¯è½æ§ãããããã§ãã</p>
<h2 id="課é¡ã¨æ©ä¼">課é¡ã¨æ©ä¼</h2>
<p><strong>Arpit:</strong> SIG Nodeãä»å¾ç´é¢ããã¨äºæ³ããã課é¡ãå¯è½æ§ã«ã¤ãã¦ãã©ã®ãããªãã®ãããã§ããããï¼</p>
<p><strong>M/G/S:</strong> Kubernetesãèªçãã10å¹´ãè¿ããæ¬¡ã®10å¹´ã«åããä¸ã§ãæ°ãã種é¡ã®ã¯ã¼ã¯ãã¼ãã¸ã®å¯¾å¿ãå¼·ãæ±ãããã¦ãã¾ããSIG Nodeã¯ãã®åãçµã¿ã§éè¦ãªå½¹å²ãæãããã¨ã«ãªãã§ããããå¾ã»ã©è©³ãã説æãã¾ããããµã¤ãã«ã¼ã®KEPã¯ãããããæ°ããã¿ã¤ãã®ã¯ã¼ã¯ãã¼ãããµãã¼ãããããã®åãçµã¿ã®ä¸ä¾ã§ãã</p>
<p>ä»å¾æ°å¹´éã®ä¸»ãªèª²é¡ã¯ãæ¢åã®æ©è½ã®å質ã¨å¾æ¹äºææ§ãç¶æãã¤ã¤ãããã«é©æ°ãç¶ãã¦ãããã¨ãããã¨ã§ãã
SIG Nodeã¯ããããããKubernetesã®éçºã«ããã¦ä¸å¿çãªå½¹å²ãæ
ãç¶ããã§ãããã</p>
<p><strong>Arpit:</strong> SIG Nodeã§ç¾å¨åãçµãã§ããç ç©¶ãéçºåéã®ä¸ã§ãç¹ã«æ³¨ç®ãã¦ãããã®ã¯ããã¾ããï¼</p>
<p><strong>M/G/S:</strong> æ°ããã¿ã¤ãã®ã¯ã¼ã¯ãã¼ãã¸ã®å¯¾å¿ã¯ãç§ãã¡ã«ã¨ã£ã¦é常ã«è峿·±ãåéã§ããæè¿åãçµãã§ãããµã¤ãã«ã¼ã³ã³ããã®ç ç©¶ã¯ãã®å¥½ä¾ã¨ãããã§ãããããµã¤ãã«ã¼ã¯ãã¢ããªã±ã¼ã·ã§ã³ã®ä¸æ ¸ã¨ãªãã³ã¼ãã夿´ãããã¨ãªãããã®æ©è½ãæ¡å¼µã§ããæè»ãªã½ãªã¥ã¼ã·ã§ã³ãæä¾ãã¾ãã</p>
<p><strong>Arpit:</strong> SIG Nodeãç¶æããä¸ã§ç´é¢ãã課é¡ã¨ããããã©ã®ããã«å
æããããæãã¦ãã ããã</p>
<p><strong>M/G/S:</strong> SIG Nodeãç´é¢ããæå¤§ã®èª²é¡ã¯ããã®åºç¯ãªè²¬ä»»ç¯å²ã¨æ°å¤ãã®æ©è½è¦æã¸ã®å¯¾å¿ã§ãããã®èª²é¡ã«åãçµããããç§ãã¡ã¯æ°ããªã¬ãã¥ã¢ã¼ã®åå ãç©æ¥µçã«å¼ã³ããã¦ãã¾ããã¾ãã常ã«ããã»ã¹ã®æ¹åã«åªãããã£ã¼ãããã¯ã«è¿
éã«å¯¾å¿ã§ããä½å¶ãæ´ãã¦ãã¾ããããã«ãåãªãªã¼ã¹ã®å¾ã«ã¯SIG Nodeã®ãã¼ãã£ã³ã°ã§ãã£ã¼ãããã¯ã»ãã·ã§ã³ãéå¬ããåé¡ç¹ãæ¹åãå¿
è¦ãªåéãç¹å®ããå
·ä½çãªè¡åè¨ç»ãç«ã¦ã¦ãã¾ãã</p>
<p><strong>Arpit:</strong> SIG Nodeãç¾å¨æ³¨ç®ãã¦ããæè¡ããKubernetesã¸ã®å°å
¥ãæ¤è¨ãã¦ããæ°ããæ©è½ãªã©ã¯ããã¾ããï¼</p>
<p><strong>M/G/S:</strong> SIG Nodeã¯ãKubernetesãä¾åãã¦ãããã¾ãã¾ãªã³ã³ãã¼ãã³ãã®éçºã«ç©æ¥µçã«é¢ä¸ãããã®é²å±ãæ³¨ææ·±ãè¦å®ã£ã¦ãã¾ããããã«ã¯ã<a href="(/ja/docs/setup/production-environment/container-runtimes/)">ã³ã³ããã©ã³ã¿ã¤ã </a>(<a href="https://containerd.io/">containerd</a>ã<a href="https://cri-o.io/">CRI-O</a>ãªã©)ãOSã®æ©è½ãå«ã¾ãã¾ããä¾ãã°ãç¾å¨ <em>cgroup v1</em> ã®å»æ¢ã¨åé¤ãè¿«ã£ã¦ãã¾ãããããã«å¯¾ãã¦Kubernetesã¦ã¼ã¶ã¼ãåæ»ã«ç§»è¡ã§ãããããSIG Nodeã¨Kubernetesããã¸ã§ã¯ãå
¨ä½ã§åãçµãã§ãã¾ããã¾ããcontainerdããã¼ã¸ã§ã³<code>2.0</code>ããªãªã¼ã¹ããäºå®ã§ãããããã«ã¯éæ¨å¥¨æ©è½ã®åé¤ãå«ã¾ãã¦ãããKubernetesã¦ã¼ã¶ã¼ã«ãå½±é¿ãåã¶ã¨èãããã¾ãã</p>
<p><strong>Arpit:</strong> SIG Nodeã®ã¡ã³ããã¼ã¨ãã¦ã®çµé¨ã®ä¸ã§ãç¹ã«èªãã«æãæãåºæ·±ãçµé¨ãææãå
±æãã¦ããã ãã¾ããï¼</p>
<p><strong>Mathias:</strong> æé«ã®ç¬éã¯ãç§ã®æåã®KEP(<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-lifecycle/#container-probes"><code>startupProbe</code></a>ã®å°å
¥)ãã¤ãã«GA(General Availability)ã«ææ ¼ããã¨ãã ã¨æãã¾ããã¾ããç§ã®è²¢ç®ãã³ã³ããªãã¥ã¼ã¿ã¼ã«ãã£ã¦æ¥ã
使ç¨ããã¦ããã®ãè¦ãã®ã楽ããã§ããä¾ãã°ãã¹ã«ãã·ã¥ã³ãããã«ããããããLGTMãä¿æããããã«ä½¿ç¨ãããGitHubããªã¼ããã·ã¥ãå«ãã³ã¡ã³ããªã©ã§ãã</p>
<h2 id="ãµã¤ãã«ã¼ã³ã³ãã">ãµã¤ãã«ã¼ã³ã³ãã</h2>
<p><strong>Arpit:</strong> Kubernetesã®æèã«ããããµã¤ãã«ã¼ã³ã³ããã®æ¦å¿µã¨ãã®é²åã«ã¤ãã¦ãããå°ã詳ããæãã¦ããã ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> <a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/sidecar-containers/">ãµã¤ãã«ã¼ã³ã³ãã</a>ã®æ¦å¿µã¯ãKubernetesãè¤åã³ã³ããã®ã¢ã¤ãã¢ãå°å
¥ãã2015å¹´ã«ããã®ã¼ãã¾ããåãPodå
ã§ã¡ã¤ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨ä¸¦è¡ãã¦å®è¡ããããããã®è¿½å ã³ã³ããã¯ãã³ã¢ã®ã³ã¼ããã¼ã¹ã夿´ãããã¨ãªãã¢ããªã±ã¼ã·ã§ã³ã®æ©è½ãæ¡å¼µã»å¼·åããæ¹æ³ã¨ãã¦è¦ããã¦ãã¾ããããµã¤ãã«ã¼ã®åæã®æ¡ç¨è
ã¯ã«ã¹ã¿ã ã¹ã¯ãªããã¨è¨å®ã使ç¨ãã¦ç®¡çãã¦ãã¾ãããããã®ã¢ããã¼ãã¯ä¸è²«æ§ã¨ã¹ã±ã¼ã©ããªãã£ã®é¢ã§èª²é¡ãããã¾ããã</p>
<p><strong>Arpit:</strong> ãµã¤ãã«ã¼ã³ã³ãããç¹ã«æçãªå
·ä½çãªã¦ã¼ã¹ã±ã¼ã¹ãä¾ãå
±æãã¦ããã ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> ãµã¤ãã«ã¼ã³ã³ããã¯ããã¾ãã¾ãªæ¹æ³ã§ã¢ããªã±ã¼ã·ã§ã³ã®æ©è½ãå¼·åããããã«ä½¿ç¨ã§ããå¤ç¨éãªãã¼ã«ã§ã:</p>
<ul>
<li><strong>ãã®ã³ã°ã¨ã¢ãã¿ãªã³ã°:</strong> ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãPodå
ã®ä¸»è¦ã¢ããªã±ã¼ã·ã§ã³ã³ã³ãããããã°ã¨ã¡ããªã¯ã¹ãåéããä¸å¤®ã®ãã®ã³ã°ããã³ã¢ãã¿ãªã³ã°ã·ã¹ãã ã«éä¿¡ã§ãã¾ãã</li>
<li><strong>ãã©ãã£ãã¯ã®ãã£ã«ã¿ãªã³ã°ã¨ã«ã¼ãã£ã³ã°:</strong> ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãPodå
ã®ä¸»è¦ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨ã®éã®ãã©ãã£ãã¯ããã£ã«ã¿ãªã³ã°ããã³ã«ã¼ãã£ã³ã°ã§ãã¾ãã</li>
<li><strong>æå·åã¨å¾©å·å:</strong> ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãPodå
ã®ä¸»è¦ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨å¤é¨ãµã¼ãã¹ã®éã§æµãããã¼ã¿ãæå·åããã³å¾©å·åã§ãã¾ãã</li>
<li><strong>ãã¼ã¿åæ:</strong> ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãPodå
ã®ä¸»è¦ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã¨å¤é¨ãã¼ã¿ãã¼ã¹ããµã¼ãã¹ã®éã§ãã¼ã¿ãåæã§ãã¾ãã</li>
<li><strong>ãã©ã¼ã«ãã¤ã³ã¸ã§ã¯ã·ã§ã³:</strong> ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãPodå
ã®ä¸»è¦ã¢ããªã±ã¼ã·ã§ã³ã³ã³ããã«éå®³ãæ³¨å
¥ããé害ã«å¯¾ããèæ§ããã¹ãã§ãã¾ãã</li>
</ul>
<p><strong>Arpit:</strong> ææ¡ã«ããã¨ãä¸é¨ã®ä¼æ¥ããµã¤ãã«ã¼æ©è½ã追å ããKubernetesã®ãã©ã¼ã¯ã使ç¨ãã¦ããããã§ãããã®æ©è½ã®æ¡ç¨ç¶æ³ãã³ãã¥ããã£ã®é¢å¿åº¦ã«ã¤ãã¦ãä½ãè¦è§£ããèããããã ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> æ¡ç¨çãæ¸¬å®ããå
·ä½çãªææ¨ã¯ããã¾ããããKEPã¯ã³ãã¥ããã£ãã大ããªé¢å¿ãéãã¦ãã¾ããç¹ã«Istioã®ãããªãµã¼ãã¹ã¡ãã·ã¥ãã³ãã¼ã¯ãã¢ã«ãã¡ãã¹ããã§ã¼ãºã«ç©æ¥µçã«åå ãã¾ãããKEPã®å¯è¦æ§ã¯ã夿°ã®ããã°æç¨¿ãã¤ã³ã¿ãã¥ã¼ãè¬æ¼ãã¯ã¼ã¯ã·ã§ãããéãã¦ããã«å®è¨¼ããã¦ãã¾ããKEPã¯ããããã¯ã¼ã¯ãããã·ããã®ã³ã°ã·ã¹ãã ãã»ãã¥ãªãã£å¯¾çãªã©ãKubernetesã®Podå
ã®ã¡ã¤ã³ã³ã³ããã¨ä¸¦è¡ãã¦è¿½å æ©è½ãæä¾ããéè¦ã®å¢å ã«å¯¾å¿ãã¦ãã¾ããã³ãã¥ããã£ã¯ããã®æ©è½ã®åºç¯ãªæ¡ç¨ãä¿é²ããããã«ãæ¢åã®ã¯ã¼ã¯ãã¼ãã«å¯¾ãã容æãªç§»è¡ãã¹ãæä¾ãããã¨ã®éè¦æ§ãèªèãã¦ãã¾ãã</p>
<p><strong>Arpit:</strong> æ¬çªç°å¢ã§ãµã¤ãã«ã¼ã³ã³ããã使ç¨ãã¦ãã伿¥ã®æ³¨ç®ãã¹ãä¾ãæåäºä¾ã¯ããã¾ããï¼</p>
<p><strong>M/G/S:</strong> æ¬çªç°å¢ã§ã®åºç¯ãªæ¡ç¨ãæå¾
ããã«ã¯ã¾ã æ©ããã¾ãã1.29ãªãªã¼ã¹ã¯2024å¹´1æ11æ¥ããGoogle Kubernetes Engine(GKE)ã§å©ç¨å¯è½ã«ãªã£ãã°ããã§ãã¦ããã¼ãµã«ã¤ã³ã¸ã§ã¯ã¿ã¼ãä»ãã¦å¹æçã«æå¹åã使ç¨ããæ¹æ³ã«é¢ããå
æ¬çãªããã¥ã¡ã³ããã¾ã å¿
è¦ã§ãã人æ°ã®ãããµã¼ãã¹ã¡ãã·ã¥ãã©ãããã©ã¼ã ã§ããIstioãããã¤ãã£ããµã¤ãã«ã¼ãæå¹ã«ããããã®é©åãªããã¥ã¡ã³ããä¸è¶³ãã¦ãããããéçºè
ããã®æ°æ©è½ã使ãå§ããã®ãé£ãããªã£ã¦ãã¾ãããããããã¤ãã£ããµã¤ãã«ã¼ã®ãµãã¼ããæçããããã¥ã¡ã³ããæ¹åãããã«ã¤ãã¦ãæ¬çªç°å¢ã§ã®ãã®æè¡ã®ããåºç¯ãªæ¡ç¨ãæå¾
ã§ãã¾ãã</p>
<p><strong>Arpit:</strong> ææ¡ã§ã¯ããµã¤ãã«ã¼æ©è½ãå®ç¾ããããã«åæåããã³ã³ããã«<code>restartPolicy</code>ãã£ã¼ã«ããå°å
¥ãããã¨ã示ããã¦ãã¾ãããã®æ¹æ³ã§ãå
ã»ã©æãããã課é¡ãã©ã®ããã«è§£æ±ºã§ããã®ãã詳ããæãã¦ããã ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> åæåããã³ã³ããã«<code>restartPolicy</code>ãã£ã¼ã«ããå°å
¥ããææ¡ã¯ãæ¢åã®ã¤ã³ãã©ã¹ãã©ã¯ãã£ãæ´»ç¨ãããµã¤ãã«ã¼ã®ç®¡çãç°¡ç´ åãããã¨ã§ãæ¦èª¬ããã課é¡ã«å¯¾å¦ãã¾ãããã®ã¢ããã¼ãã¯ãPodã®ä»æ§ã«æ°ãããã£ã¼ã«ãã追å ãããã¨ãé¿ãã管çãããããä¿ã¡ã¤ã¤ããããªãè¤éããåé¿ãã¾ããæ¢åã®åæåããã³ã³ããã®ã¡ã«ããºã ãå©ç¨ãããã¨ã§ããµã¤ãã«ã¼ã¯Podã®èµ·åæã«é常ã®åæåã³ã³ããã¨ä¸¦è¡ãã¦å®è¡ã§ããä¸è²«ããåæåã®é åºã確ä¿ãã¾ãããããã«ããµã¤ãã«ã¼ç¨ã®åæåã³ã³ããã®åèµ·åããªã·ã¼ã<code>Always</code>ã«è¨å®ãããã¨ã§ãã¡ã¤ã³ã¢ããªã±ã¼ã·ã§ã³ã³ã³ãããçµäºããå¾ãããã®ã³ã°ãã¢ãã¿ãªã³ã°ãªã©ã®ç¶ç¶çãªãµã¼ãã¹ãã¯ã¼ã¯ãã¼ãã®çµäºã¾ã§ç¶æã§ãã¾ãã</p>
<p><strong>Arpit:</strong> åæåããã³ã³ããã«<code>restartPolicy</code>ãã£ã¼ã«ããå°å
¥ãããã¨ã¯ãæ¢åã®Kubernetesè¨å®ã¨ã®å¾æ¹äºææ§ã«ã©ã®ãããªå½±é¿ãä¸ãã¾ããï¼</p>
<p><strong>M/G/S:</strong> åæåããã³ã³ããã«<code>restartPolicy</code>ãã£ã¼ã«ããå°å
¥ãã¦ããæ¢åã®Kubernetesè¨å®ã¨ã®å¾æ¹äºææ§ã¯ç¶æããã¾ããæ¢åã®åæåããã³ã³ããã¯å¾æ¥éãã«æ©è½ãç¶ããæ°ãã<code>restartPolicy</code>ãã£ã¼ã«ãã¯ãæç¤ºçã«ãµã¤ãã«ã¼ã¨ãã¦æå®ãããåæåããã³ã³ããã«ã®ã¿é©ç¨ããã¾ãããã®ã¢ããã¼ãã«ãããæ¢åã®ã¢ããªã±ã¼ã·ã§ã³ããããã¤ã¡ã³ããæ°æ©è½ã«ãã£ã¦ä¸æããããã¨ã¯ãªããåæã«ãµã¤ãã«ã¼ããã广çã«å®ç¾©ããã³ç®¡çããæ¹æ³ãæä¾ããã¾ãã</p>
<h2 id="sig-nodeã¸ã®è²¢ç®">SIG Nodeã¸ã®è²¢ç®</h2>
<p><strong>Arpit:</strong> æ°ããã¡ã³ãã¼ãç¹ã«åå¿è
ãè²¢ç®ããã®ã«æé©ãªæ¹æ³ã¯ä½ã§ããããï¼</p>
<p><strong>M/G/S:</strong> æ°ããã¡ã³ãã¼ãåå¿è
ã¯ããµã¤ãã«ã¼ã«é¢ããKEP(Kubernetes Enhancement Proposal)ã«å¯¾ãã¦ã以ä¸ã®æ¹æ³ã§è²¢ç®ã§ãã¾ã:</p>
<ul>
<li><strong>èªç¥åº¦ã®åä¸:</strong> ãµã¤ãã«ã¼ã®å©ç¹ã¨ä½¿ç¨ä¾ãç´¹ä»ããã³ã³ãã³ãã使ãã¾ããããã«ãããä»ã®äººã
ã«ãã®æ©è½ã®çè§£ãæ·±ãã¦ããããæ¡ç¨ãä¿ããã¨ãã§ãã¾ãã</li>
<li><strong>ãã£ã¼ãããã¯ã®æä¾:</strong> ãµã¤ãã«ã¼ã®ä½¿ç¨çµé¨(è¯ãç¹ãæªãç¹ã)ãå
±æãã¦ãã ããããã®ãã£ã¼ãããã¯ã¯ãæ©è½ã®æ¹åã使ããããã®åä¸ã«å½¹ç«ã¡ã¾ãã</li>
<li><strong>ã¦ã¼ã¹ã±ã¼ã¹ã®å
±æ:</strong> æ¬çªç°å¢ã§ãµã¤ãã«ã¼ã使ç¨ãã¦ããå ´åã¯ããã®çµé¨ãä»ã®äººã¨å
±æãã¦ãã ãããå®éã®ä½¿ç¨ä¾ã示ããã¨ã§ããã®æ©è½ã®ä¾¡å¤ãå®è¨¼ããä»ã®äººã
ã®æ¡ç¨ãä¿é²ã§ãã¾ãã</li>
<li><strong>ããã¥ã¡ã³ãã®æ¹å:</strong> ãã®æ©è½ã®ããã¥ã¡ã³ãã®æç¢ºåãæ¡å
ã«ãååãã ãããããåãããããããã¥ã¡ã³ãã¯ãä»ã®äººã
ããµã¤ãã«ã¼ãçè§£ããæ´»ç¨ããå©ãã«ãªãã¾ãã</li>
</ul>
<p>ãµã¤ãã«ã¼ã«é¢ããKEP以å¤ã«ããSIG Nodeã§ã¯ããå¤ãã®è²¢ç®è
ãå¿
è¦ã¨ãã¦ããåéãããã¾ã:</p>
<ul>
<li>
<p><strong>ãã¹ãã«ãã¬ãã¸ã®åä¸:</strong> SIG Nodeã§ã¯ãKubernetesã³ã³ãã¼ãã³ãã®ãã¹ãã«ãã¬ãã¸ãç¶ç¶çã«æ¹åããæ¹æ³ã模索ãã¦ãã¾ãã</p>
</li>
<li>
<p><strong>CI(ç¶ç¶çã¤ã³ãã°ã¬ã¼ã·ã§ã³)ã®ç¶æ:</strong> SIG Nodeã¯ãKubernetesã³ã³ãã¼ãã³ããæ§ã
ãªç¶æ³ä¸ã§æå¾
éãã«åä½ãããã¨ã確èªãããããä¸é£ã®ã¨ã³ããã¼ã¨ã³ã(e2e)ãã¹ãã管çãã¦ãã¾ãã</p>
</li>
</ul>
<h1 id="çµè«">çµè«</h1>
<p>SIG Nodeã¯ãKubernetesã®çºå±ã«ããã¦éè¦ãªå½¹å²ãæããã¦ãã¾ãã
ã¯ã©ã¦ããã¤ãã£ãã»ã³ã³ãã¥ã¼ãã£ã³ã°ã®çµ¶ããå¤åããç°å¢ã®ä¸ã§ãKubernetesã®ä¿¡é ¼æ§ã¨é©å¿æ§ã確ä¿ãç¶ãã¦ãã¾ãã
MatthiasãGunjuãSergeyã¨ãã£ãç®èº«çãªã¡ã³ãã¼ãå
é ã«ç«ã¡ãSIG Nodeã¯é©æ°ã®æåç·ã«ç«ã¡ç¶ãã¦ãã¾ãã
å½¼ãã®åªåã«ãããKubernetesã¯æ°ããªå°å¹³ãç®æãã¦åé²ãç¶ãã¦ããã®ã§ãã</p>
- Kubernetesã®10å¹´éã®æ´å²https://kubernetes.io/ja/blog/2024/06/06/10-years-of-kubernetes/Thu, 06 Jun 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/06/06/10-years-of-kubernetes/
<p><img alt="KCSEU 2024 group photo" src="https://kubernetes.io/ja/blog/2024/06/06/10-years-of-kubernetes/kcseu2024.jpg"></p>
<p>10å¹´åã®2014å¹´6æ6æ¥ãKubernetesã®<a href="https://github.com/kubernetes/kubernetes/commit/2c4b3a562ce34cddc3f8218a2c4d11c7310e6d56">æåã®ã³ããã</a>ãGitHubã«ããã·ã¥ããã¾ããã
GoãBashãMarkdownã§æ¸ããã250ã®ãã¡ã¤ã«ã¨47,501è¡ã®ã³ã¼ããå«ããã®æåã®ã³ããããã仿¥ã®Kubernetesããã¸ã§ã¯ãã®å§ã¾ãã§ããã
ãããã10å¹´å¾ã®ä»æ¥ãKubernetesã44ãå½ãã<a href="https://www.cncf.io/reports/kubernetes-project-journey-report/">8,000社以ä¸ã®ä¼æ¥</a>ã<a href="https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1">88,000人以ä¸ã®ã³ã³ããªãã¥ã¼ã¿ã¼</a>ãæãããããã¾ã§ã§æå¤§ã®ãªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ãã®ä¸ã¤ã«æé·ããã¨ã¯èª°ãäºæ³ããã§ããããã</p>
<img src="kcscn2019.jpg" alt="KCSCN 2019" class="left" style="max-width: 20em; margin: 1em" >
<p>ãã®ãã¤ã«ã¹ãã¼ã³ã¯Kubernetesã ãã§ãªããããããçã¾ããã¯ã©ã¦ããã¤ãã£ãã¨ã³ã·ã¹ãã ã«ã¨ã£ã¦ãéè¦ãªãã®ã§ãã
CNCFã«ã¯<a href="https://all.devstats.cncf.io/d/18/overall-project-statistics-table?orgId=1">ç´200ã®ããã¸ã§ã¯ã</a>ãããã<a href="https://all.devstats.cncf.io/d/18/overall-project-statistics-table?orgId=1">240,000人以ä¸ã®ã³ã³ããªãã¥ã¼ã¿ã¼</a>ããã®ã³ã³ããªãã¥ã¼ã·ã§ã³ãããã¾ãã
ã¾ããããåºãã¨ã³ã·ã¹ãã ã®ä¸ã§ãæ°å人ã®ã³ã³ããªãã¥ã¼ã¿ã¼ããã¾ãã
Kubernetesã仿¥ã®å§¿ã«ãªããã®ã¯ãå½¼ãã<a href="https://www.cncf.io/blog/2022/05/18/slashdata-cloud-native-continues-to-grow-with-more-than-7-million-developers-worldwide/">700ä¸äººä»¥ä¸ã®éçºè
</a>ãããã«å¤ãã®ã¦ã¼ã¶ã¼ã³ãã¥ããã£ãã¨ã³ã·ã¹ãã ãå½¢ä½ãæå©ãããã¦ããããããã§ãã</p>
<h2 id="kubernetesã®å§ã¾ã-æè¡ã®åæ">Kubernetesã®å§ã¾ã - æè¡ã®åæ</h2>
<p>Kubernetesã®å
ã¨ãªãã¢ã¤ãã£ã¢ã¯ã(<a href="https://blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/">2013å¹´ã«ç»å ´ãã</a>)æåã®ã³ããããæåã®ãããã¿ã¤ãã®åããåå¨ãã¦ãã¾ããã
2000年代åé ãã ã¼ã¢ã®æ³åãæå¹ã«æ©è½ãã¦ãã¾ããã
ã³ã³ãã¥ã¼ãã£ã³ã°ãã¼ãã¦ã§ã¢ã¯é常ã«éãé度ã§ã¾ãã¾ãå¼·åã«ãªããããã«å¯¾å¿ãã¦ã¢ããªã±ã¼ã·ã§ã³ãã¾ãã¾ãè¤éåãã¦ããã¾ããã
ãã®ãã¼ãã¦ã§ã¢ã®ã³ã¢ãã£ãã£åã¨ã¢ããªã±ã¼ã·ã§ã³ã®è¤éåã®çµã¿åããã«ãããã½ããã¦ã§ã¢ããã¼ãã¦ã§ã¢ããããã«æ½è±¡åããå¿
è¦ãçãã解決çãç¾ãå§ãã¾ããã</p>
<p>彿ã®å¤ãã®ä¼æ¥ã¨åæ§ã«Googleãæ¥éã«æ¡å¤§ãã¦ãããå社ã®ã¨ã³ã¸ãã¢ãã¡ã¯Linuxã«ã¼ãã«å
ã§ã®éé¢ã®å½¢æ
ãä½ãåºãã¨ããã¢ã¤ãã¢ã«èå³ãæã£ã¦ãã¾ããã
Googleã®ã¨ã³ã¸ãã¢ãRohit Sethã¯ãã®ã³ã³ã»ããã<a href="https://lwn.net/Articles/199643/">2006å¹´ã®ã¡ã¼ã«</a>ã§èª¬æãã¾ããã</p>
<blockquote>
<p>ã¯ã¼ã¯ãã¼ãã®ã¡ã¢ãªãã¿ã¹ã¯ãªã©ã®ã·ã¹ãã ãªã½ã¼ã¹ã®ä½¿ç¨ã追跡ãã課éããæ§é ã示ãããã«ã³ã³ããã¨ããç¨èªã使ç¨ãã¾ãã</p>
</blockquote>
<img src="future.png" alt="The future of Linux containers" class="right" style="max-width: 20em; margin: 1em">
<p>2013å¹´3æãPyConã§Solomon Hykesãè¡ã£ã5åéã®ã©ã¤ããã³ã°ãã¼ã¯<a href="https://youtu.be/wW9CAH9nSLs?si=VtK_VFQHymOT7BIB">The future of Linux Containers</a>ã§ã¯ãLinuxã³ã³ããã使ããã³ä½¿ç¨ããããã®ãªã¼ãã³ã½ã¼ã¹ãã¼ã«ã§ãããDockerããç´¹ä»ããã¾ããã
Dockerã¯Linuxã³ã³ããã«ä½¿ããããããããããããã¾ã§ä»¥ä¸ã«å¤ãã®ã¦ã¼ã¶ã¼ãå©ç¨ã§ããããã«ãªãã¾ããã
Dockerã®äººæ°ãæ¥ä¸æããLinuxã³ã³ããã®æ½è±¡åã誰ããå©ç¨ã§ããããã«ãããã¨ã§ãã¢ããªã±ã¼ã·ã§ã³ãããç§»æ¤æ§ãé«ããåç¾æ§ã®ããæ¹æ³ã§å®è¡ã§ããããã«ãªãã¾ããã
ããããä¾ç¶ã¨ãã¦ã¹ã±ã¼ã«ã®åé¡ã¯æ®ã£ã¦ãã¾ããã</p>
<p>Googleã®ã¢ããªã±ã¼ã·ã§ã³ãªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ãã¹ã±ã¼ã«ã§ç®¡çããBorgã·ã¹ãã ã¯ã2000年代åã°ã«Linuxã³ã³ãããæ¡ç¨ãã¾ããã
ãã®å¾ãGoogleã¯Omegaã¨å¼ã°ããã·ã¹ãã ã®æ°ãã¼ã¸ã§ã³ã®éçºãéå§ãã¾ããã
Borgã¨Omegaã·ã¹ãã ã«ç²¾éãã¦ããGoogleã®ã¨ã³ã¸ãã¢ãã¡ã¯ãDockerã«ãã£ã¦é§åããã³ã³ããåã®äººæ°ãç®ã®å½ããã«ãã¾ããã
ããã¦Brendan Burnsã®<a href="https://kubernetes.io/blog/2018/07/20/the-history-of-kubernetes-the-community-behind-it/">ããã°</a>ã§èª¬æããã¦ããããã«ããªã¼ãã³ã½ã¼ã¹ã®ã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã·ã§ã³ã·ã¹ãã ã®å¿
è¦æ§ã ãã§ãªãããã®ãå¿
ç¶æ§ããèªèãã¾ããã
ãã®èªèã¯2013å¹´ç§ã«Joe BedaãBrendan BurnsãCraig McLuckieãVille AikasãTim HockinãDawn ChenãBrian GrantãDaniel Smithãå«ãå°ããªãã¼ã ã«Kubernetesã®ããã¸ã§ã¯ããå§ããã¤ã³ã¹ãã¬ã¼ã·ã§ã³ãä¸ãã¾ããã</p>
<h2 id="kubernetesã®10å¹´é">Kubernetesã®10å¹´é</h2>
<img src="kubeconeu2017.jpg" alt="KubeCon EU 2017" class="left" style="max-width: 20em; margin: 1em">
<p>Kubernetesã®æ´å²ã¯2014å¹´6æ6æ¥ã®ãã®æ´å²çãªã³ãããã¨ã2014å¹´6æ10æ¥ã®<a href="https://youtu.be/YrxnVKZeqK8?si=Q_wYBFn7dsS9H3k3">DockerCon 2014ã§ã®Googleã¨ã³ã¸ãã¢Eric Brewerã«ããåºèª¿è¬æ¼</a>(ããã³ããã«å¯¾å¿ãã<a href="https://cloudplatform.googleblog.com/2014/06/an-update-on-container-support-on-google-cloud-platform.html">Googleããã°</a>)ã§ã®ããã¸ã§ã¯ãçºè¡¨ããå§ã¾ãã¾ãã</p>
<p>ãã®å¾ã®1å¹´éã§ã主ã«<a href="https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&var-period_name=Before%20joining%20CNCF&var-metric=contributors">Googleã¨Red Hatããã®ã³ã³ããªãã¥ã¼ã¿ã¼</a>ã«ããå°ããªã³ãã¥ããã£ãããã¸ã§ã¯ãã«åãçµã¿ã<a href="https://cloudplatform.googleblog.com/2015/07/Kubernetes-V1-Released.html">2015å¹´7æ21æ¥ã«ãã¼ã¸ã§ã³1.0ã®ãªãªã¼ã¹</a>ã«è³ãã¾ããã
1.0ã¨åæã«ãGoogleã¯KubernetesãLinux Foundationã®æ°ãã«è¨ç«ãããé¨éã§ãã<a href="https://www.cncf.io/announcements/2015/06/21/new-cloud-native-computing-foundation-to-drive-alignment-among-container-technologies/">Cloud Native Computing Foundation (CNCF)</a>ã«å¯è´ãããã¨ãçºè¡¨ãã¾ããã</p>
<p>1.0ã«å°éãããã®ã®ãKubernetesããã¸ã§ã¯ãã¯ä¾ç¶ã¨ãã¦ä½¿ãã«ããçè§£ãã«ãããã®ã§ããã
Kubernetesã®ã³ã³ããªãã¥ã¼ã¿ã¼ã§ããKelsey Hightowerã¯ããã¸ã§ã¯ãã®ä½¿ããããã®æ¬ ç¹ã«ç¹ã«æ³¨ç®ãã2016å¹´7æ7æ¥ã«å½¼ã®æåãª<a href="https://github.com/kelseyhightower/kubernetes-the-hard-way/commit/9d7ace8b186f6ebd2e93e08265f3530ec2fba81c">"Kubernetes the Hard Way"ã¬ã¤ãã®æåã®ã³ããã</a>ãããã·ã¥ãã¾ããã</p>
<p>ããã¸ã§ã¯ãã¯æåã®1.0ãªãªã¼ã¹ä»¥æ¥å¤§ããå¤ãããããã¤ãã®å¤§ããªææãçµé¨ãã¾ããã
ãã¨ãã°ã<a href="https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/">1.16ã§ã®Custom Resource Definition (CRD)ã®GA</a>ãã<a href="https://kubernetes.io/blog/2021/12/08/dual-stack-networking-ga/">1.23ã§ã®å®å
¨ãªãã¥ã¢ã«ã¹ã¿ãã¯ãµãã¼ãã®éå§</a>ãªã©ã§ãã
ã¾ãã<a href="https://kubernetes.io/blog/2021/07/14/upcoming-changes-in-kubernetes-1-22/">1.22ã§ã®åºã使ç¨ããã¦ãããã¼ã¿çAPIã®åé¤</a>ãã<a href="https://kubernetes.io/blog/2020/12/02/dockershim-faq/">Dockershimã®å»æ¢</a>ããå¦ãã ã³ãã¥ããã£ã®ãæè¨ããããã¾ãã</p>
<p>1.0以éã®æ³¨ç®ãã¹ãã¢ãããã¼ãããã¤ã«ã¹ãã¼ã³ãããã³ã¤ãã³ãã«ã¯ä»¥ä¸ã®ãã®ãããã¾ãã</p>
<ul>
<li>2016å¹´12æ - <a href="https://kubernetes.io/blog/2016/12/kubernetes-1-5-supporting-production-workloads/">Kubernetes 1.5</a>ã§CRIã®æåã®ãµãã¼ãã¨ã¢ã«ãã¡çWindowsãã¼ããµãã¼ãã«ããã©ã³ã¿ã¤ã ãã©ã°ã¤ã³æ©è½ãå°å
¥ããã¾ãããã¾ããOpenAPIãåãã¦ç»å ´ããã¯ã©ã¤ã¢ã³ããæ¡å¼µãããAPIãèªèã§ããããã«ãªãã¾ããã
<ul>
<li>ãã®ãªãªã¼ã¹ã§ã¯ãStatefulSetã¨PodDisruptionBudgetããã¼ã¿çã§å°å
¥ããã¾ããã</li>
</ul>
</li>
<li>2017å¹´4æ - <a href="https://kubernetes.io/blog/2017/04/rbac-support-in-kubernetes/">ãã¼ã«ãã¼ã¹ã¢ã¯ã»ã¹å¶å¾¡(RBAC)</a>ã®å°å
¥ã</li>
<li>2017å¹´6æ - <a href="https://kubernetes.io/blog/2017/06/kubernetes-1-7-security-hardening-stateful-application-extensibility-updates/">Kubernetes 1.7</a>ã§ThirdPartyResource (TPR)ãCustomResourceDefinition (CRD)ã«ç½®ãæãããã¾ããã</li>
<li>2017å¹´12æ - <a href="https://kubernetes.io/blog/2017/12/kubernetes-19-workloads-expanded-ecosystem/">Kubernetes 1.9</a>ã§ã¯Workload APIãGA(ä¸è¬æä¾)ã¨ãªãã¾ããããªãªã¼ã¹ããã°ã«ã¯ãKubernetesã§æããã使ç¨ããããªãã¸ã§ã¯ãã®ä¸ã¤ã§ããDeploymentã¨ReplicaSetã¯ã1年以ä¸ã®å®éã®ä½¿ç¨ã¨ãã£ã¼ãããã¯ãçµã¦å®å®ãã¾ãããã¨æ¸ããã¦ãã¾ãã</li>
<li>2018å¹´12æ - Kubernetes 1.13ã§Container Storage Interface (CSI)ãGAã«éãã¾ãããã¾ãæå°éã®ã¯ã©ã¹ã¿ã¼ããã¼ãã¹ãã©ããããããã®kubeadmãã¼ã«ãGAã«éããCoreDNSãããã©ã«ãã®DNSãµã¼ãã¼ã¨ãªãã¾ããã</li>
<li>2019å¹´9æ - Kubernetes 1.16ã§<a href="https://kubernetes.io/blog/2019/09/18/kubernetes-1-16-release-announcement/">Custom Resource DefinitionãGAã«éã</a>ã¾ããã</li>
<li>2020å¹´8æ - <a href="https://kubernetes.io/blog/2016/12/kubernetes-1-5-supporting-production-workloads/">Kubernetes 1.19</a>ã§ãªãªã¼ã¹ã®ãµãã¼ãæéã1å¹´ã«å»¶é·ããã¾ããã</li>
<li>2020å¹´12æ - Kubernetes 1.20ã§<a href="https://kubernetes.io/blog/2020/12/18/kubernetes-1.20-pod-impersonation-short-lived-volumes-in-csi/">Dockershimã廿¢</a>ããã¾ããã</li>
<li>2021å¹´4æ - <a href="https://kubernetes.io/blog/2021/07/20/new-kubernetes-release-cadence/#:~:text=On%20April%2023%2C%202021%2C%20the,Kubernetes%20community's%20contributors%20and%20maintainers.">Kubernetesã®ãªãªã¼ã¹é »åº¦ã夿´</a>ãããå¹´é4åãã3åã«æ¸å°ããã¾ããã</li>
<li>2021å¹´7æ - åºã使ç¨ããã¦ãããã¼ã¿çAPIã<a href="https://kubernetes.io/blog/2021/07/14/upcoming-changes-in-kubernetes-1-22/">Kubernetes 1.22ã§åé¤</a>ããã¾ããã</li>
<li>2022å¹´5æ - Kubernetes 1.24ã§<a href="https://kubernetes.io/blog/2022/05/03/kubernetes-1-24-release-announcement/">ãã¼ã¿çAPIãããã©ã«ãã§ç¡å¹</a>ã«ãããã¢ããã°ã¬ã¼ãã®ç«¶åãæ¸ããã¨ã¨ãã«<a href="https://kubernetes.io/dockershim">Dockershimãåé¤</a>ããã¾ããããã®çµæã<a href="https://www.youtube.com/watch?v=a03Hh1kd6KE">å¤ãã®ã¦ã¼ã¶ã¼ã®æ··ä¹±</a>ãå¼ãèµ·ããã¾ãã(ãã®å¾ã<a href="https://github.com/kubernetes/community/tree/master/communication/contributor-comms">ã³ãã¥ãã±ã¼ã·ã§ã³ãæ¹åãã¾ãã</a>)ã</li>
<li>2022å¹´12æ - Kubernetes 1.26ã§ã¯AI/ML/ãããã¯ã¼ã¯ãã¼ãã®ãµãã¼ããå¼·åããããã®å¤§è¦æ¨¡ãªãããããã³<a href="https://kubernetes.io/blog/2022/12/29/scalable-job-tracking-ga/">Job APIã®ãªã¼ãã¼ãã¼ã«</a>ãè¡ããã¾ããã</li>
</ul>
<p><strong>PS:</strong> ããã¸ã§ã¯ããã©ãã ãé²åãããèªåã§è¦ã¦ã¿ããã§ããï¼
ã³ãã¥ããã£ã¡ã³ãã¼ã®Carlos SantanaãAmim Moises Salum KnabbenãJames Spurinã使ãã<a href="https://github.com/spurin/kubernetes-v1.0-lab">Kubernetes 1.0ã¯ã©ã¹ã¿ã¼ãç«ã¡ä¸ããããã®ãã¥ã¼ããªã¢ã«</a>ããã§ãã¯ãã¦ã¿ã¦ãã ããã</p>
<hr>
<p>Kubernetesã«ã¯æ°ãåããªãã»ã©ã®æ¡å¼µãããã¤ã³ããããã¾ãã
ãã¨ãã¨ã¯Dockerå°ç¨ã«è¨è¨ããã¦ãã¾ããããç¾å¨ã§ã¯CRIæ¨æºã«æºæ ããä»»æã®ã³ã³ããã©ã³ã¿ã¤ã ããã©ã°ã¤ã³ã§ãã¾ãã
ä»ã«ãã¹ãã¬ã¼ã¸ç¨ã®CSIããããã¯ã¼ãã³ã°ç¨ã®CNIãªã©ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãããã¾ãã
ããã¦ããã¯ã§ãããã¨ã®ã»ãã®ä¸é¨ã«éãã¾ããã
éå»10å¹´éã§æ°ãããã¿ã¼ã³ãããã¤ãç»å ´ãã¾ããã
ä¾ãã°ã<a href="https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/">Custom Resource Definition</a> (CRD)ã使ç¨ãã¦ãµã¼ããã¼ãã£ã®ã³ã³ããã¼ã©ã¼ããµãã¼ããããã¨ãã§ãã¾ãã
ããã¯ç¾å¨Kubernetesã¨ã³ã·ã¹ãã ã®å¤§ããªä¸é¨ã¨ãªã£ã¦ãã¾ãã</p>
<p>ãã®ããã¸ã§ã¯ããæ§ç¯ããã³ãã¥ããã£ãããã®10å¹´éã§é常ã«å¤§ãããªãã¾ããã
<a href="https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1">DevStats</a>ã使ç¨ããã¨ããã®10å¹´éã§Kubernetesã<a href="https://www.cncf.io/reports/kubernetes-project-journey-report/">ä¸çã§2çªç®ã«å¤§ããªãªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ã</a>ã«ããé©ç°çãªã³ã³ããªãã¥ã¼ã·ã§ã³ã®éã確èªã§ãã¾ãã</p>
<ul>
<li><strong>88,474</strong>人ã®ã³ã³ããªãã¥ã¼ã¿ã¼</li>
<li><strong>15,121</strong>人ã®ã³ã¼ãã³ããã¿ã¼</li>
<li><strong>4,228,347</strong>ä»¶ã®ã³ã³ããªãã¥ã¼ã·ã§ã³</li>
<li><strong>158,530</strong>ä»¶ã®Issue</li>
<li><strong>311,787</strong>ä»¶ã®Pull Request</li>
</ul>
<h2 id="仿¥ã®kubernetes">仿¥ã®Kubernetes</h2>
<img src="welcome.jpg" alt="KubeCon NA 2023" class="left" style="max-width: 20em; margin: 1em">
<p>åæã®é ãããã®ããã¸ã§ã¯ãã¯æè¡çè½åãå©ç¨ç¶æ³ãããã³ã³ã³ããªãã¥ã¼ã·ã§ã³ã®é¢ã§é©ç°çãªæé·ãéãã¦ãã¾ããã
ããã¸ã§ã¯ãã¯ä»ããªãã¦ã¼ã¶ã¼ã«ããè¯ããµã¼ãã¹ãæä¾ããããã«ç©æ¥µçã«æ¹åã«åãçµãã§ãã¾ãã</p>
<p>次åã®1.31ãªãªã¼ã¹ã§ã¯ãé·æã«ãããéè¦ãªããã¸ã§ã¯ãã®å®æãç¥ãã¾ãã
ããã¯ã¤ã³ããªã¼ã¯ã©ã¦ããããã¤ãã¼ã®ã³ã¼ãã®åé¤ã§ãã
ãã®<a href="https://kubernetes.io/blog/2024/05/20/completing-cloud-provider-migration/">Kubernetesã®æ´å²ä¸æå¤§ã®ãã¤ã°ã¬ã¼ã·ã§ã³</a>ã§ã¯ãç´150ä¸è¡ã®ã³ã¼ããåé¤ãããã³ã¢ã³ã³ãã¼ãã³ãã®ãã¤ããªãµã¤ãºãç´40%忏ããã¾ããã
ããã¸ã§ã¯ãã®åæã«ã¯ãæ¡å¼µæ§ãæåã®éµã§ãããã¨ã¯æããã§ããã
ãããããã®æ¡å¼µæ§ãã©ã®ããã«å®ç¾ãããã¯å¸¸ã«æç¢ºã§ã¯ããã¾ããã§ããã
ãã®ãã¤ã°ã¬ã¼ã·ã§ã³ã«ãããKubernetesã®æ ¸ã¨ãªãã³ã¼ããã¼ã¹ãããã¾ãã¾ãªãã³ãã¼åºæã®æ©è½ãåé¤ããã¾ããã
ãã³ãã¼åºæã®æ©è½ã¯ãä»å¾ã¯<a href="https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/">Custom Resource Definition (CRD)</a>ã<a href="https://gateway-api.sigs.k8s.io/">Gateway API</a>ãªã©ã®ä»ã®ãã©ã°ã¤ã³æ¡å¼µæ©è½ããã¿ã¼ã³ã«ãã£ã¦ããããæä¾ãããããã«ãªãã¾ãã</p>
<p>Kubernetesã¯ãè¨å¤§ãªã¦ã¼ã¶ã¼ãã¼ã¹ã«ãµã¼ãã¹ãæä¾ããä¸ã§æ°ããªèª²é¡ã«ãç´é¢ãã¦ãããã³ãã¥ããã£ã¯ããã«é©å¿ãã¦ãã¾ãã
ãã®ä¸ä¾ããæ°ããã³ãã¥ããã£ææã®registry.k8s.ioã¸ã®ã¤ã¡ã¼ã¸ãã¹ãã£ã³ã°ã®ç§»è¡ã§ãã
ã¦ã¼ã¶ã¼ã«äºåã³ã³ãã¤ã«æ¸ã¿ã®ãã¤ããªã¤ã¡ã¼ã¸ãæä¾ããããã®ã¨ã°ã¬ã¹ã®å¸¯åå¹
ã¨ã³ã¹ãã¯é常ã«å¤§ããªãã®ã¨ãªã£ã¦ãã¾ãã
ãã®æ°ããã¬ã¸ã¹ããªã®å¤æ´ã«ãããã³ãã¥ããã£ã¯ãããã®ä¾¿å©ãªã¤ã¡ã¼ã¸ãããã³ã¹ãå¹çããã³ããã©ã¼ãã³ã¹å¹çã®é«ãæ¹æ³ã§æä¾ãç¶ãããã¨ãã§ãã¾ãã
å¿
ã<a href="https://kubernetes.io/blog/2022/11/28/registry-k8s-io-faster-cheaper-ga/">ããã°è¨äº</a>ããã§ãã¯ããregistry.k8s.ioã使ç¨ããããã«æ´æ°ãã¦ãã ããï¼</p>
<h2 id="kubernetesã®æªæ¥">Kubernetesã®æªæ¥</h2>
<img src="lts.jpg" alt="" class="right" width="300px" style="max-width: 20em; margin: 1em">
<p>10å¹´ãçµã¡ãKubernetesã®æªæ¥ã¯ä¾ç¶ã¨ãã¦æããè¦ãã¾ãã
ã³ãã¥ããã£ã¯ã¦ã¼ã¶ã¼ä½é¨ã®æ¹åã¨ããã¸ã§ã¯ãã®æç¶å¯è½æ§ãåä¸ããã夿´ãåªå
ãã¦ãã¾ãã
ã¢ããªã±ã¼ã·ã§ã³éçºã®ä¸çã¯é²åãç¶ãã¦ãããKubernetesãããã«åããã¦å¤åãã¦ããæºåãã§ãã¦ãã¾ãã</p>
<p>2024å¹´ã«ã¯AIã®ç»å ´ããã¤ã¦ããããªã¯ã¼ã¯ãã¼ãã¿ã¤ããéè¦ãªãã®ã¸ã¨å¤ãã¾ããã
忣ã³ã³ãã¥ã¼ãã£ã³ã°ã¨ã¯ã¼ã¯ãã¼ãã¹ã±ã¸ã¥ã¼ãªã³ã°ã¯å¸¸ã«äººå·¥ç¥è½(AI)ãæ©æ¢°å¦ç¿(ML)ãããã³é«æ§è½ã³ã³ãã¥ã¼ãã£ã³ã°(HPC)ã¯ã¼ã¯ãã¼ãã®ãªã½ã¼ã¹éç´çãªãã¼ãºã¨å¯æ¥ã«é¢é£ãã¦ãã¾ããã
ã³ã³ããªãã¥ã¼ã¿ã¼ã¯ãæ°ããéçºãããã¯ã¼ã¯ãã¼ãã®ãã¼ãºã¨ãããã«Kubernetesãã©ã®ããã«æé©ã«å¯¾å¿ã§ãããã«æ³¨ç®ãã¦ãã¾ãã
æ°ãã<a href="https://github.com/kubernetes/community/tree/master/wg-serving">Serving Working Group</a>ã¯ãã³ãã¥ããã£ããããã®ã¯ã¼ã¯ãã¼ãã®ãã¼ãºã«å¯¾å¦ããããã«ã©ã®ããã«çµç¹åããã¦ãããã®ä¸ä¾ã§ãã
ä»å¾æ°å¹´ã§Kubernetesããã¾ãã¾ãªç¨®é¡ã®ãã¼ãã¦ã§ã¢ã管çããè½åãããã¼ãã¦ã§ã¢å
¨ä½ã§ãã£ã³ã¯ãã¨ã«å®è¡ãããå¤§è¦æ¨¡ãªãããã¹ã¿ã¤ã«ã®ã¯ã¼ã¯ãã¼ãã®ã¹ã±ã¸ã¥ã¼ãªã³ã°è½åã«é¢ãã¦æ¹åãè¦ãããã§ãããã</p>
<p>Kubernetesãåãå·»ãã¨ã³ã·ã¹ãã ã¯æé·ãç¶ããé²åãã¦ããã¾ãã
å°æ¥çã«ã¯ã¤ã³ããªã¼ãã³ãã¼ã³ã¼ãã®ãã¤ã°ã¬ã¼ã·ã§ã³ãã¬ã¸ã¹ããªã®å¤æ´ãªã©ãããã¸ã§ã¯ãã®æç¶å¯è½æ§ãç¶æããããã®åãçµã¿ãã¾ãã¾ãéè¦ã«ãªãã§ãããã</p>
<p>Kubernetesã®æ¬¡ã®10å¹´ã¯ãã¦ã¼ã¶ã¼ã¨ã¨ã³ã·ã¹ãã ãããã¦ä½ãããããã«è²¢ç®ãã人ã
ã«ãã£ã¦å°ãããã§ãããã
ã³ãã¥ããã£ã¯æ°ããã³ã³ããªãã¥ã¼ã¿ã¼ãæè¿ãã¦ãã¾ãã
ã³ã³ããªãã¥ã¼ã·ã§ã³ã«é¢ãã詳細ã¯ã<a href="https://k8s.dev/contributors">æ°ããã³ã³ããªãã¥ã¼ã¿ã¼åãã®ã¬ã¤ã</a>ã§ç¢ºèªã§ãã¾ãã</p>
<p>Kubernetesã®æªæ¥ãä¸ç·ã«ç¯ãã¦ãããã¨ã楽ãã¿ã«ãã¦ãã¾ãï¼</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2024/06/06/10-years-of-kubernetes/kcsna2023.jpg"
alt="KCSNA 2023"/>
</figure>
- Kuberneteså²ä¸æå¤§ã®ç§»è¡ä½æ¥ãå®äºhttps://kubernetes.io/ja/blog/2024/05/20/completing-cloud-provider-migration/Mon, 20 May 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/05/20/completing-cloud-provider-migration/
<p>Kubernetes v1.7以éãKubernetesããã¸ã§ã¯ãã¯ãã¯ã©ã¦ããããã¤ãã¼ã¨ã®çµ±åæ©è½ãKubernetesã®ã³ã¢ã³ã³ãã¼ãã³ãããåé¢ããã¨ããéå¿çãªç®æ¨ã追æ±ãã¦ãã¾ãã(<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md">KEP-2395</a>)ã
ãã®çµ±åæ©è½ã¯Kubernetesã®åæã®éçºã¨æé·ã«éè¦ãªå½¹å²ãæããã¤ã¤ããï¼ã¤ã®éè¦ãªè¦å ã«ãã£ã¦ãã®åé¢ãæ¨é²ããã¾ããã
1ã¤ã¯ãä½ç¾ä¸è¡ãã®Goã³ã¼ãã«ããã£ã¦ãã¹ã¦ã®ã¯ã©ã¦ããããã¤ãã¼ã®ãã¤ãã£ããµãã¼ããç¶æãããã¨ã®è¤éããå¢å¤§ãã¦ãããã¨ããã1ã¤ã¯ãKubernetesãçã«ãã³ãã¼ãã¥ã¼ãã©ã«ãªãã©ãããã©ã¼ã ã¨ãã¦ç¢ºç«ãããã¨ãã顿ã§ãã</p>
<p>å¤ãã®ãªãªã¼ã¹ãçµã¦ããã¹ã¦ã®ã¯ã©ã¦ããããã¤ãã¼çµ±åããKubernetesã®ã³ã¢ãªãã¸ããªããå¤é¨ãã©ã°ã¤ã³ã«æ£å¸¸ã«ç§»è¡ããããã¨ãåã°ããæãã¾ãã
å½åã®ç®çãéæãããã¨ã«å ãã¦ãç´150ä¸è¡ã®ã³ã¼ããåé¤ããã³ã¢ã³ã³ãã¼ãã³ãã®ãã¤ããªãµã¤ãºãç´40%忏ãããã¨ã§ãKubernetesã大å¹
ã«åçåãã¾ããã</p>
<p>ãã®ç§»è¡ã¯ãå½±é¿ãåããã³ã³ãã¼ãã³ãã夿°ãããGoogle CloudãAWSãAzureãOpenStackãvSphereã®5ã¤ã®åæã¯ã©ã¦ããããã¤ãã¼ã®çµã¿è¾¼ã¿çµ±åã«ä¾åãã¦ããéè¦ãªã³ã¼ããã¹ããã£ããããè¤éã§é·æã«ããã使¥ã¨ãªãã¾ããã
ãã®ç§»è¡ãæåãããããã«ãç§ãã¡ã¯4ã¤ã®æ°ãããµãã·ã¹ãã ãä¸ããæ§ç¯ããå¿
è¦ãããã¾ããã</p>
<ol>
<li><strong>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼</strong> (<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md">KEP-2392</a>)</li>
<li><strong>APIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·</strong> (<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy">KEP-1281</a>)</li>
<li><strong>kubeletã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³</strong> (<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers">KEP-2133</a>)</li>
<li><strong><a href="https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-">CSI</a>ã使ç¨ããã¹ãã¬ã¼ã¸ã®ç§»è¡</strong> (<a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md">KEP-625</a>)</li>
</ol>
<p>åãµãã·ã¹ãã ã¯ãçµã¿è¾¼ã¿æ©è½ã¨åçã®æ©è½ãå®ç¾ããããã«ä¸å¯æ¬ ã§ãããå®å
¨ã§ä¿¡é ¼ã§ããç§»è¡ãã¹ã使ç¨ãã¦åãµãã·ã¹ãã ãGAã¬ãã«ã®æç度ã«ããããã«ãããã¤ãã®ãªãªã¼ã¹ãå¿
è¦ã§ããã
以ä¸ã«ãåãµãã·ã¹ãã ã®è©³ç´°ã説æãã¾ãã</p>
<h3 id="ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼">ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼</h3>
<p>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã¯ããã®åãçµã¿ã§å°å
¥ãããæåã®å¤é¨ã³ã³ãã¼ãã³ãã§ããã<code>kube-controller-manager</code>ã¨<code>kubelet</code>ã®ãã¡ãã¯ã©ã¦ãAPIã¨ç´æ¥ããåãããæ©è½ãç½®ãæãããã®ã§ãã
ãã®éè¦ãªã³ã³ãã¼ãã³ãã¯ããã¼ããå®è¡ããã¦ããã¯ã©ã¦ãã®ãªã¼ã¸ã§ã³ã¨ã¾ã¼ã³ã示ãã¡ã¿ãã¼ã¿ã©ãã«ããã¯ã©ã¦ããããã¤ãã¼ã®ã¿ãç¥ã£ã¦ããIPã¢ãã¬ã¹ãé©ç¨ãããã¨ã«ããããã¼ããåæåããå½¹å²ãæ
ã£ã¦ãã¾ãã
ããã«ãLoadBalancerã¿ã¤ãã®Serviceã«å¯¾ãã¦ã¯ã©ã¦ããã¼ããã©ã³ãµã¼ããããã¸ã§ãã³ã°ãããµã¼ãã¹ã³ã³ããã¼ã©ã¼ãå®è¡ãã¾ãã</p>
<p><img alt="Kubernetesã®ã³ã³ãã¼ãã³ã" src="https://kubernetes.io/images/docs/components-of-kubernetes.svg"></p>
<p>詳細ã«ã¤ãã¦ã¯ãKubernetesããã¥ã¡ã³ãã®<a href="https://kubernetes.io/ja/docs/concepts/architecture/cloud-controller/">ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼</a>ãåç
§ãã¦ãã ããã</p>
<h3 id="apiãµã¼ãã¼ãããã¯ã¼ã¯ãããã·">APIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·</h3>
<p>2018å¹´ã«SIG API Machineryã¨å
±åã§éå§ãããAPIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·ããã¸ã§ã¯ãã¯ã<code>kube-apiserver</code>å
ã®SSHãã³ãã©ã¼æ©è½ãç½®ãæãããã¨ãç®çã¨ãã¦ãã¾ããã
ãã®ãã³ãã©ã¼ã¯ãKubernetesã®ã³ã³ããã¼ã«ãã¬ã¼ã³ã¨ãã¼ãã¨ã®ãã©ãã£ãã¯ãå®å
¨ã«ãããã·ããããã«ä½¿ç¨ããã¦ãã¾ãããããããã®SSHãã³ãã«ã確ç«ããããã«ã<code>kube-apiserver</code>å
ã«çµã¿è¾¼ã¾ãããããã¤ãã¼åºæã®å®è£
ã®è©³ç´°ã«å¤§ããä¾åãã¦ãã¾ããã</p>
<p>ç¾å¨ãAPIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·ã¯ã<code>kube-apiserver</code>å
ã®GAã¬ãã«ã®æ¡å¼µãã¤ã³ãã¨ãªã£ã¦ãã¾ãã
ããã¯ãAPIãµã¼ãã¼ãããã¼ãã¸ã®ãã©ãã£ãã¯ãå®å
¨ãªãããã·ãä»ãã¦ã«ã¼ãã£ã³ã°ã§ããæ±ç¨çãªãããã·ã¡ã«ããºã ãæä¾ããAPIãµã¼ãã¼ãå®è¡ããã¦ããã¯ã©ã¦ããããã¤ãã¼ãèªèããå¿
è¦ããªããªãã¾ããã
ãã®ããã¸ã§ã¯ãã§ã¯ãæ¬çªç°å¢ã§ã®æ¡ç¨ãé²ãã§ããKonnectivityããã¸ã§ã¯ããå°å
¥ããã¾ããã</p>
<p>APIãµã¼ãã¼ãããã¯ã¼ã¯ãããã·ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes-sigs/apiserver-network-proxy#readme">README</a>ãåç
§ãã¦ãã ããã</p>
<h3 id="kubeletã®ã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³">kubeletã®ã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³</h3>
<p><code>kubelet</code>ã®ã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³ã¯ãGoogle CloudãAWSãã¾ãã¯Azureã§ãã¹ãããã¦ããã¤ã¡ã¼ã¸ã¬ã¸ã¹ããªã®ã¯ã¬ãã³ã·ã£ã«ãåçã«åå¾ãã<code>kubelet</code>ã®çµã¿è¾¼ã¿æ©è½ãç½®ãæããããã«éçºããã¾ããã
徿¥ã®æ©è½ã¯ä¾¿å©ã§ã<code>kubelet</code>ãGCRãECRãã¾ãã¯ACRããã¤ã¡ã¼ã¸ãåå¾ããããã®çæéã®ãã¼ã¯ã³ãã·ã¼ã ã¬ã¹ã«åå¾ã§ããããã«ãã¦ãã¾ããã
ããããKubernetesã®ä»ã®é åã¨åæ§ã«ãããããµãã¼ãããã«ã¯ã<code>kubelet</code>ãç°ãªãã¯ã©ã¦ãç°å¢ã¨APIã«ã¤ãã¦ç¹å®ã®ç¥èãæã¤å¿
è¦ãããã¾ããã</p>
<p>2019å¹´ã«å°å
¥ãããã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼ãã©ã°ã¤ã³ã¡ã«ããºã ã¯ã<code>kubelet</code>ãæ§ã
ãªã¯ã©ã¦ãã§ãã¹ãããã¦ããã¤ã¡ã¼ã¸ã®ã¯ã¬ãã³ã·ã£ã«ãåçã«æä¾ãããã©ã°ã¤ã³ãã¤ããªãå®è¡ããããã®æ±ç¨çãªæ¡å¼µãã¤ã³ããæä¾ãã¾ãã
ãã®æ¡å¼µæ§ã«ããã<code>kubelet</code>ã®çæéã®ãã¼ã¯ã³ãåå¾ããæ©è½ããæåã®3ã¤ã®ã¯ã©ã¦ããããã¤ãã¼ãè¶
ãã¦æ¡å¼µããã¾ããã</p>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/containers/images/#kubelet-credential-provider">èªè¨¼ãããã¤ã¡ã¼ã¸ãã«ã®ããã®kubeletã¯ã¬ãã³ã·ã£ã«ãããã¤ãã¼</a>ãåç
§ãã¦ãã ããã</p>
<h3 id="ã¹ãã¬ã¼ã¸ãã©ã°ã¤ã³ã®kubernetesã³ã¢ããcsiã¸ã®ç§»è¡">ã¹ãã¬ã¼ã¸ãã©ã°ã¤ã³ã®Kubernetesã³ã¢ããCSIã¸ã®ç§»è¡</h3>
<p>Container Storage Interface(CSI)ã¯ãKubernetesããã®ã»ãã®ã³ã³ãããªã¼ã±ã¹ãã¬ã¼ã¿ã¼ã«ããã¦ãããã¯ããã³ãã¡ã¤ã«ã¹ãã¬ã¼ã¸ã·ã¹ãã ã管çããããã®ã³ã³ããã¼ã«ãã¬ã¼ã³æ¨æºã§ããã1.13ã§GAã«ãªãã¾ããã
ããã¯ãKubernetesã«ç´æ¥çµã¿è¾¼ã¾ãã¦ããããªã¥ã¼ã ãã©ã°ã¤ã³ããKubernetesã¯ã©ã¹ã¿ã¼å
ã®Podã¨ãã¦å®è¡ã§ãããã©ã¤ãã¼ã«ç½®ãæããããã«è¨è¨ããã¾ããã
ãããã®ãã©ã¤ãã¼ã¯ãKubernetes APIãä»ãã¦<code>kube-controller-manager</code>ã¹ãã¬ã¼ã¸ã³ã³ããã¼ã©ã¼ã¨éä¿¡ãããã¼ã«ã«ã®gRPCã¨ã³ããã¤ã³ããä»ãã¦<code>kubelet</code>ã¨éä¿¡ãã¾ãã
ç¾å¨ããã¹ã¦ã®ä¸»è¦ãªã¯ã©ã¦ãã¨ã¹ãã¬ã¼ã¸ãã³ãã¼ã«ããã£ã¦100以ä¸ã®CSIãã©ã¤ãã¼ãå©ç¨å¯è½ã§ãããKubernetesã§ã¹ãã¼ããã«ãªã¯ã¼ã¯ãã¼ããç¾å®ã®ãã®ã¨ãªã£ã¦ãã¾ãã</p>
<p>ãã ããKubernetesã³ã¢ã®ããªã¥ã¼ã APIã®æ¢åã®ãã¹ã¦ã®ã¦ã¼ã¶ã¼ãã©ã®ããã«æ±ããã¨ãã大ããªèª²é¡ãæ®ã£ã¦ãã¾ããã
APIã®å¾æ¹äºææ§ãç¶æããããã«ãKubernetesã³ã¢ã®ããªã¥ã¼ã APIãåçã®CSI APIã«å¤æããAPIãã©ã³ã¹ã¬ã¼ã·ã§ã³å±¤ãã³ã³ããã¼ã©ã¼ã«çµã¿è¾¼ã¿ã¾ããã
ããã«ããããã¹ã¦ã®ã¹ãã¬ã¼ã¸æä½ãCSIãã©ã¤ãã¼ã«ãªãã¤ã¬ã¯ããããã¨ãã§ããAPIãåé¤ããã«Kubernetesã³ã¢ã®ããªã¥ã¼ã ãã©ã°ã¤ã³ã®ã³ã¼ããåé¤ããéãéãã¾ããã</p>
<p>Kubernetesã³ã¢ã®ã¹ãã¬ã¼ã¸ã®ç§»è¡ã®è©³ç´°ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/">Kubernetes In-Tree to CSI Volume Migration Moves to Beta</a>ãåç
§ãã¦ãã ããã</p>
<h2 id="ä»å¾ã®å±æ">ä»å¾ã®å±æ</h2>
<p>ãã®ç§»è¡ã¯ãããæ°å¹´ã®SIG Cloud Providerããã£ã¨ã注åãã¦ãããã¨ã§ããã
ãã®éè¦ãªãã¤ã«ã¹ãã¼ã³ãéæãããã¨ã§ãããã¾ã§ã«æ§ç¯ãã¦ããå¤é¨ãµãã·ã¹ãã ãæ´»ç¨ãã¦ãKubernetesã¨ã¯ã©ã¦ããããã¤ãã¼ãããè¯ãçµ±åããããã®æ°ãã驿°çãªæ¹æ³ã模索ããåãçµã¿ã«ã·ãããã¦ããã¾ãã
ããã«ã¯ãã¯ã©ã¹ã¿ã¼å
ã®ãã¼ãããããªãã¯ã¯ã©ã¦ãã¨ãã©ã¤ãã¼ãã¯ã©ã¦ãã®ä¸¡æ¹ã§å®è¡ã§ãããã¤ããªããç°å¢ã§Kubernetesãããè³¢ããããã¨ããå¤é¨ãããã¤ãã¼ã®éçºè
ãçµ±åã®åãçµã¿ãç°¡ç´ åã»åçåããããã®ããè¯ããã¼ã«ã¨ãã¬ã¼ã ã¯ã¼ã¯ãæä¾ãããã¨ãå«ã¾ãã¾ãã</p>
<p>æ°æ©è½ããã¼ã«ããã¬ã¼ã ã¯ã¼ã¯ã®éçºãé²ã䏿¹ã§ãSIG Cloud Providerã¯ãã¹ãã®éè¦æ§ãå¿ãã¦ã¯ãã¾ããã
SIGã®å°æ¥ã®æ´»åã®ãã1ã¤ã®éç¹åéã¯ãããå¤ãã®ãããã¤ãã¼ãå«ããããã®ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãã¹ãã®æ¹åã§ãã
ãã®åãçµã¿ã®æçµç®æ¨ã¯ãã§ããã ãå¤ãã®ãããã¤ãã¼ãå«ããã¹ããã¬ã¼ã ã¯ã¼ã¯ã使ããKubernetesã³ãã¥ããã£ã«å¯¾ãã¦ãKubernetesç°å¢ã«é¢ããæé«ã¬ãã«ã®ä¿¡é ¼æ§ãæä¾ãããã¨ã§ãã</p>
<p>v1.29ããåã®ãã¼ã¸ã§ã³ã®Kubernetesã使ç¨ãã¦ãã¦ãã¾ã å¤é¨ã¯ã©ã¦ããããã¤ãã¼ã«ç§»è¡ãã¦ããªãå ´åã¯ã以åã®ããã°è¨äº<a href="https://kubernetes.io/blog/2023/12/14/cloud-provider-integration-changes/">Kubernetes 1.29: Cloud Provider Integrations Are Now Separate Components</a>ã確èªãããã¨ããããããã¾ãã
ãã®è¨äºã§ã¯ãç§ãã¡ãè¡ã£ã夿´ã«ã¤ãã¦è©³ç´°ãªæ
å ±ãæä¾ããå¤é¨ãããã¤ãã¼ã¸ã®ç§»è¡æ¹æ³ã«ã¤ãã¦ã¬ã¤ãã³ã¹ãæä¾ãã¦ãã¾ãã
v1.31以éãKubernetesã³ã¢ã®ã¯ã©ã¦ããããã¤ãã¼ã¯æ°¸ç¶çã«ç¡å¹åãããKubernetesã®ã³ã¢ã³ã³ãã¼ãã³ãããåé¤ããã¾ãã</p>
<p>è²¢ç®ã«èå³ãããæ¹ã¯ã<a href="https://github.com/kubernetes/community/tree/master/sig-cloud-provider#meetings">éé±ã®SIGãã¼ãã£ã³ã°</a>ã«ãã²ãåå ãã ããï¼</p>
- Gateway API v1.1: ãµã¼ãã¹ã¡ãã·ã¥ãGRPCRouteãããã¦æ´ãªãé²åhttps://kubernetes.io/ja/blog/2024/05/09/gateway-api-v1-1/Thu, 09 May 2024 09:00:00 -0800https://kubernetes.io/ja/blog/2024/05/09/gateway-api-v1-1/
<p><img alt="Gateway API logo" src="https://kubernetes.io/blog/2024/05/09/gateway-api-v1-1/gateway-api-logo.svg"></p>
<p>æ¨å¹´10æã®Gateway APIã®æ£å¼ãªãªã¼ã¹å¾ãKubernetes SIG Networkã¯<a href="https://gateway-api.sigs.k8s.io/">Gateway API</a>ã®v1.1ãªãªã¼ã¹ãçºè¡¨ãã¾ããã
ãã®ãªãªã¼ã¹ã§ã¯ãããã¤ãã®æ©è½ã <em>æ¨æºæ©è½</em> (GA)ã«ææ ¼ãã¦ãã¾ãã
ç¹ã«ãµã¼ãã¹ã¡ãã·ã¥ã¨GRPCRouteã®ãµãã¼ããå«ã¾ãã¾ãã
ã¾ããã»ãã·ã§ã³ç¶æã¨ã¯ã©ã¤ã¢ã³ãè¨¼ææ¸ã®æ¤è¨¼ãå«ãæ°ããå®é¨çæ©è½ãå°å
¥ãã¦ãã¾ãã</p>
<h2 id="æ°æ©è½">æ°æ©è½</h2>
<h3 id="gaã¸ã®ææ ¼">GAã¸ã®ææ ¼</h3>
<p>ãã®ãªãªã¼ã¹ã§ã¯ã4ã¤ã®å¾
æã®æ©è½ãæ¨æºæ©è½ã«ææ ¼ãã¾ããã
ããã«ããããããã®æ©è½ã¯å®é¨çãªæ®µéã忥ãããã¨ã«ãªãã¾ãã
GAã¸ã®ææ ¼ãè¡ãããã¨ãããã¨ã¯ãAPIã®è¨è¨ã«å¯¾ããé«ãä¿¡é ¼æ§ã示ãã¨ã¨ãã«ã徿¹äºææ§ãä¿è¨¼ãããã®ã§ãã
ä»ã®Kubernetes APIã¨åæ§ã«ãGAã¸ææ ¼ããæ©è½ãæéã¨ã¨ãã«å¾æ¹äºææ§ãä¿ã¡ãªããé²åãã¦ããã¾ãã
ä»å¾ããããã®æ°æ©è½ã®ãããªãæ¹è¯ã¨æ¹åãè¡ããããã¨ãæå¾
ãã¦ãã¾ãã
ãããã®ä»çµã¿ã«ã¤ãã¦è©³ããã¯ãGateway APIã®<a href="https://gateway-api.sigs.k8s.io/concepts/versioning/">ãã¼ã¸ã§ãã³ã°ããªã·ã¼</a>ãã覧ãã ããã</p>
<h4 id="ãµã¼ãã¹ã¡ãã·ã¥ã®ãµãã¼ã-https-gateway-api-sigs-k8s-io-mesh"><a href="https://gateway-api.sigs.k8s.io/mesh/">ãµã¼ãã¹ã¡ãã·ã¥ã®ãµãã¼ã</a></h4>
<p>Gateway APIã®ãµã¼ãã¹ã¡ãã·ã¥ãµãã¼ãã«ããããµã¼ãã¹ã¡ãã·ã¥ã¦ã¼ã¶ã¼ã¯åãAPIã使ç¨ãã¦Ingressãã©ãã£ãã¯ã¨ã¡ãã·ã¥ãã©ãã£ãã¯ã管çãããã¨ãå¯è½ã«ãªãã¾ãã
ããã«ããåãããªã·ã¼ã¨ã«ã¼ãã£ã³ã°ã¤ã³ã¿ã¼ãã§ã¼ã¹ãåå©ç¨ãããã¨ãã§ãã¾ãã
ã¾ããGateway API v1.1ã§ã¯ãHTTPRouteãªã©ã®ã«ã¼ããServiceã<code>parentRef</code>ã¨ãã¦æã¤ãã¨ãã§ããããã«ãªããç¹å®ã®ãµã¼ãã¹ã¸ã®ãã©ãã£ãã¯ã®åä½ãå¶å¾¡ã§ãã¾ãã
詳細ã«ã¤ãã¦ã¯ã<a href="https://gateway-api.sigs.k8s.io/mesh/">Gateway APIã®ãµã¼ãã¹ã¡ãã·ã¥ããã¥ã¡ã³ã</a>ããèªã¿ããã ããã<a href="https://gateway-api.sigs.k8s.io/implementations/#service-mesh-implementation-status">Gateway APIã®å®è£
ãªã¹ã</a>ãã覧ãã ããã</p>
<p>ä¾ãã°ãã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ã«ã°ã©ãã®æ·±é¨ã«ããã¯ã¼ã¯ãã¼ãã«å¯¾ãã¦ãHTTPRouteã使ç¨ãã¦ã«ããªã¢ãããã¤ã¡ã³ããè¡ããã¨ãã§ãã¾ãã
以ä¸ã¯ãã®ä¾ã§ãï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>gateway.networking.k8s.io/v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>HTTPRoute<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>color-canary<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">namespace</span>:<span style="color:#bbb"> </span>faces<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">parentRefs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>color<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Service<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">group</span>:<span style="color:#bbb"> </span><span style="color:#b44">""</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">80</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">rules</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">backendRefs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>color<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">80</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">weight</span>:<span style="color:#bbb"> </span><span style="color:#666">50</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>color2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">80</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">weight</span>:<span style="color:#bbb"> </span><span style="color:#666">50</span><span style="color:#bbb">
</span></span></span></code></pre></div><p>ããã«ãããåå空é<code>faces</code>å
ã®<code>color</code>ãµã¼ãã¹ã«éä¿¡ããããã©ãã£ãã¯ããå
ã®<code>color</code>ãµã¼ãã¹ã¨<code>color2</code>ãµã¼ãã¹ã®éã§50対50ã«åå²ããã¾ãã
ãã®è¨å®ã¯ç§»æ¤æ§ãé«ããããã¡ãã·ã¥ããå¥ã®ã¡ãã·ã¥ã¸ç°¡åã«ç§»è¡ã§ãã¾ãã</p>
<h4 id="grpcroute-https-gateway-api-sigs-k8s-io-guides-grpc-routing"><a href="https://gateway-api.sigs.k8s.io/guides/grpc-routing/">GRPCRoute</a></h4>
<p>ãã§ã«GRPCRouteã®å®é¨çæ©è½ãã¼ã¸ã§ã³ã使ç¨ãã¦ããå ´åã使ç¨ãã¦ããã³ã³ããã¼ã©ã¼ãGRPCRoute v1ããµãã¼ãããããã¢ãããã¼ããããã¾ã§ãæ¨æºãã¼ã¸ã§ã³ã®GRPCRouteã¸ã®ã¢ããã°ã¬ã¼ãã¯æ§ãããã¨ããå§ããã¾ãã
ããã¾ã§ã¯ã<code>v1alpha2</code>ã¨<code>v1</code>ã®ä¸¡æ¹ã®APIãã¼ã¸ã§ã³ãå«ãv1.1ã®å®é¨çãã£ã³ãã«ãã¼ã¸ã§ã³ã®GRPCRouteã«ã¢ããã°ã¬ã¼ããã¦ãåé¡ããã¾ããã</p>
<h4 id="parentreference-port-https-gateway-api-sigs-k8s-io-reference-spec-gateway-networking-k8s-io-2fv1-parentreference"><a href="https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.ParentReference">ParentReference Port</a></h4>
<p>ParentReferenceã«portãã£ã¼ã«ãã追å ããã¾ããã
ããã«ããããªã½ã¼ã¹ãGatewayã®ãªã¹ãã¼ãServiceããããã¯ä»ã®è¦ªãªã½ã¼ã¹(å®è£
ã«ãã£ã¦ç°ãªãã¾ã)ã«é¢é£ä»ãããã¨ãã§ããããã«ãªãã¾ããã
ãã¼ãã«ãã¤ã³ããããã¨ã§ãè¤æ°ã®ãªã¹ãã¼ã«ä¸åº¦ã«é¢é£ä»ãããã¨ãå¯è½ã§ãã</p>
<p>ä¾ãã°ãHTTPRouteãGatewayã®ç¹å®ã®ãªã¹ãã¼ã«é¢é£ä»ããéããªã¹ãã¼åã§ã¯ãªããªã¹ãã¼ã®ãã¼ããæå®ã§ããããã«ãªãã¾ããã
ããã«ãããä¸ã¤ã¾ãã¯è¤æ°ã®ç¹å®ã®ãªã¹ãã¼ã«é¢é£ä»ãããã¨ãã§ãã¾ãã</p>
<p>詳細ã«ã¤ãã¦ã¯ã<a href="https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways">Gatewayã¸ã®é¢é£ä»ã</a>ãåç
§ãã¦ãã ããã</p>
<h4 id="é©åæ§ãããã¡ã¤ã«ã¨ã¬ãã¼ã-https-gateway-api-sigs-k8s-io-concepts-conformance-conformance-profiles"><a href="https://gateway-api.sigs.k8s.io/concepts/conformance/#conformance-profiles">é©åæ§ãããã¡ã¤ã«ã¨ã¬ãã¼ã</a></h4>
<p>é©åæ§ã¬ãã¼ãã®APIãæ¡å¼µãããå®è£
ã®åä½ã¢ã¼ããæå®ãã<code>mode</code>ãã£ã¼ã«ãã¨ãGateway APIã®ãã£ãã«(æ¨æºçã¾ãã¯å®é¨çæ©è½ç)ãããã<code>gatewayAPIChannel</code>ã追å ããã¾ããã
<code>gatewayAPIVersion</code>ã¨<code>gatewayAPIChannel</code>ã¯ããã¹ãçµæã®ç°¡åãªèª¬æã¨ã¨ãã«ããã¹ãã¹ã¤ã¼ãã®ä»çµã¿ã«ãã£ã¦èªåçã«å
¥åãããããã«ãªãã¾ããã
ã¬ãã¼ãã®æ§æãããä½ç³»çã«æ´çãããå®è£
è
ã¯ãã¹ãã®å®è¡æ¹æ³ã«é¢ããæ
å ±ã追å ããåç¾æé ãæä¾ã§ããããã«ãªãã¾ããã</p>
<h3 id="å®é¨çæ©è½çãã£ã³ãã«ã¸ã®æ°æ©è½è¿½å ">å®é¨çæ©è½çãã£ã³ãã«ã¸ã®æ°æ©è½è¿½å </h3>
<h4 id="gatewayã®ã¯ã©ã¤ã¢ã³ãè¨¼ææ¸ã®æ¤è¨¼-https-gateway-api-sigs-k8s-io-geps-gep-91"><a href="https://gateway-api.sigs.k8s.io/geps/gep-91/">Gatewayã®ã¯ã©ã¤ã¢ã³ãè¨¼ææ¸ã®æ¤è¨¼</a></h4>
<p>Gatewayã®åãªã¹ãã¼ã§ã¯ã©ã¤ã¢ã³ãè¨¼ææ¸ã®æ¤è¨¼ãè¨å®ã§ããããã«ãªãã¾ããã
ããã¯ã<code>tls</code>å
ã«æ°ãã追å ããã<code>frontendValidation</code>ãã£ã¼ã«ãã«ãã£ã¦å®ç¾ããã¦ãã¾ãã
ãã®ãã£ã¼ã«ãã§ã¯ãã¯ã©ã¤ã¢ã³ããæç¤ºããè¨¼ææ¸ãæ¤è¨¼ããããã®ä¿¡é ¼ã¢ã³ã«ã¼ã¨ãã¦ä½¿ç¨ã§ããCAè¨¼ææ¸ã®ãªã¹ããè¨å®ã§ãã¾ãã</p>
<p>以ä¸ã®ä¾ã¯ãConfigMapã®<code>foo-example-com-ca-cert</code>ã«ä¿åããã¦ããCAè¨¼ææ¸ã使ç¨ãã¦ãGatewayãªã¹ãã¼ã®<code>foo-https</code>ã«æ¥ç¶ããã¯ã©ã¤ã¢ã³ãã®è¨¼ææ¸ãæ¤è¨¼ããæ¹æ³ã示ãã¦ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>gateway.networking.k8s.io/v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Gateway<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>client-validation-basic<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">gatewayClassName</span>:<span style="color:#bbb"> </span>acme-lb<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">listeners</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>foo-https<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">protocol</span>:<span style="color:#bbb"> </span>HTTPS<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">443</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">hostname</span>:<span style="color:#bbb"> </span>foo.example.com<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">tls</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">certificateRefs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Secret<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">group</span>:<span style="color:#bbb"> </span><span style="color:#b44">""</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>foo-example-com-cert<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">frontendValidation</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">caCertificateRefs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>ConfigMap<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">group</span>:<span style="color:#bbb"> </span><span style="color:#b44">""</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>foo-example-com-ca-cert<span style="color:#bbb">
</span></span></span></code></pre></div><h4 id="ã»ãã·ã§ã³ç¶æã¨backendlbpolicy-https-gateway-api-sigs-k8s-io-geps-gep-1619"><a href="https://gateway-api.sigs.k8s.io/geps/gep-1619/">ã»ãã·ã§ã³ç¶æã¨BackendLBPolicy</a></h4>
<p>Gateway APIã«<a href="https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.SessionPersistence">ã»ãã·ã§ã³ç¶ææ©è½</a>ãå°å
¥ããã¾ããã
ããã¯æ°ããããªã·ã¼(<a href="https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1alpha2.BackendLBPolicy">BackendLBPolicy</a>)ã«ãã£ã¦ãµã¼ãã¹ã¬ãã«ã§è¨å®ã§ããããã«HTTPRouteã¨GRPCRouteå
ã®ãã£ã¼ã«ãã使ç¨ãã¦ã«ã¼ãã¬ãã«ã§ãè¨å®å¯è½ã§ãã
BackendLBPolicyã¨ã«ã¼ãã¬ãã«ã®APIã¯ãã»ãã·ã§ã³ã®ã¿ã¤ã ã¢ã¦ããã»ãã·ã§ã³åãã»ãã·ã§ã³ã¿ã¤ããã¯ããã¼ã®æå¹æéã¿ã¤ããªã©ãåãã»ãã·ã§ã³ç¶æã®è¨å®ãæä¾ãã¾ãã</p>
<p>以ä¸ã¯ã<code>foo</code>ãµã¼ãã¹ã«ã¯ããã¼ãã¼ã¹ã®ã»ãã·ã§ã³ç¶æãæå¹ã«ãã<code>BackendLBPolicy</code>ã®è¨å®ä¾ã§ãã
ã»ãã·ã§ã³åã<code>foo-session</code>ã«è¨å®ãã絶対ã¿ã¤ã ã¢ã¦ãã¨ã¢ã¤ãã«ã¿ã¤ã ã¢ã¦ããå®ç¾©ããã¯ããã¼ãã»ãã·ã§ã³ã¯ããã¼ã¨ãã¦è¨å®ãã¦ãã¾ãï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>gateway.networking.k8s.io/v1alpha2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>BackendLBPolicy<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>lb-policy<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">namespace</span>:<span style="color:#bbb"> </span>foo-ns<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">targetRefs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">group</span>:<span style="color:#bbb"> </span>core<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>service<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>foo<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">sessionPersistence</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">sessionName</span>:<span style="color:#bbb"> </span>foo-session<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">absoluteTimeout</span>:<span style="color:#bbb"> </span>1h<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">idleTimeout</span>:<span style="color:#bbb"> </span>30m<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">type</span>:<span style="color:#bbb"> </span>Cookie<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">cookieConfig</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">lifetimeType</span>:<span style="color:#bbb"> </span>Session<span style="color:#bbb">
</span></span></span></code></pre></div><h3 id="ãã®ä»ã®å¤æ´ç¹">ãã®ä»ã®å¤æ´ç¹</h3>
<h4 id="tlsé¢é£ç¨èªã®æç¢ºå-https-gateway-api-sigs-k8s-io-geps-gep-2907"><a href="https://gateway-api.sigs.k8s.io/geps/gep-2907/">TLSé¢é£ç¨èªã®æç¢ºå</a></h4>
<p>APIå
¨ä½ã§TLSé¢é£ã®ç¨èªãçµ±ä¸ããåãçµã¿ã®ä¸ç°ã¨ãã¦ãBackendTLSPolicyã«äºææ§ã®ãªã夿´ãå ãã¾ããã
ããã«ãããæ°ããAPIãã¼ã¸ã§ã³(v1alpha3)ãå°å
¥ããã¾ããã
æ¢åã®v1alpha2ã使ç¨ãã¦ããå ´åã¯ããã¼ã¿ã®ããã¯ã¢ãããå¤ããã¼ã¸ã§ã³ã®ã¢ã³ã¤ã³ã¹ãã¼ã«ãªã©ãé©åãªå¯¾å¿ãå¿
è¦ã§ãã</p>
<p>v1alpha2ã®BackendTLSPolicyãã£ã¼ã«ãã¸ã®åç
§ã¯ãv1alpha3ã«æ´æ°ããå¿
è¦ãããã¾ãã
主ãªå¤æ´ç¹ã¯ä»¥ä¸ã®éãã§ãï¼</p>
<ul>
<li><code>targetRef</code>ã<code>targetRefs</code>ã«å¤æ´(è¤æ°ã®ã¿ã¼ã²ããã¸ã®é©ç¨ãå¯è½ã«)</li>
<li><code>tls</code>ã<code>validation</code>ã«å¤æ´</li>
<li><code>tls.caCertRefs</code>ã<code>validation.caCertificateRefs</code>ã«å¤æ´</li>
<li><code>tls.wellKnownCACerts</code>ã<code>validation.wellKnownCACertificates</code>ã«å¤æ´</li>
</ul>
<p>ãã®ãªãªã¼ã¹ã«å«ã¾ãããã¹ã¦ã®å¤æ´ç¹ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.1.0">v1.1.0ãªãªã¼ã¹ãã¼ã</a>ãã覧ãã ããã</p>
<h2 id="gateway-apiã®èæ¯">Gateway APIã®èæ¯</h2>
<p>Gateway APIã®ã¢ã¤ãã¢ã¯ã2019å¹´ã®KubeCon San Diegoã§æ¬¡ä¸ä»£ã®Ingress APIã¨ãã¦<a href="https://youtu.be/Ne9UJL6irXY?si=wgtC9w8PMB5ZHil2">æåã«ææ¡</a>ããã¾ããã
ãã以æ¥ããã°ãããã³ãã¥ããã£ãå½¢æããããããã<a href="https://www.youtube.com/watch?v=V3Vu_FWb4l4">Kuberneteså²ä¸æãååçãªAPI</a>ãéçºãã¦ãã¾ããã
ããã¾ã§ã«200人以ä¸ããã®APIã«è²¢ç®ãã¦ããããã®æ°ã¯ä»ãå¢ãç¶ãã¦ãã¾ãã</p>
<p>ã¡ã³ããã¼ã¯ããªãã¸ããªã¸ã®ã³ããããè°è«ãã¢ã¤ãã¢ããããã¯ä¸è¬çãªãµãã¼ããªã©ãããããå½¢ã§Gateway APIã«è²¢ç®ãã¦ãã ãã£ã <em>å
¨ã¦ã®æ¹ã
</em> ã«æè¬ã®æã表ãã¾ãã
ãã®ããã«ç®èº«çã§æ´»çºãªã³ãã¥ããã£ã®ãµãã¼ããªãã§ã¯ãããã¾ã§å°éãããã¨ã¯ã§ãã¾ããã§ããã</p>
<h2 id="å®éã«ä½¿ã£ã¦ã¿ã¾ããã">å®éã«ä½¿ã£ã¦ã¿ã¾ããã</h2>
<p>Gateway APIã®ç¹å¾´ã¨ãã¦ãææ°çã使ç¨ããããã«Kubernetesãã®ãã®ãææ°ã«ããå¿
è¦ãããã¾ããã
Kubernetes 1.26以éã§ããã°ããã®ãã¼ã¸ã§ã³ã®Gateway APIãããã«å©ç¨éå§ã§ãã¾ãã</p>
<p>APIã試ãã«ã¯ã<a href="https://gateway-api.sigs.k8s.io/guides/">ã¹ã¿ã¼ãã¬ã¤ã</a>ãã覧ãã ããã</p>
<h2 id="éçºã«åå ãã¾ããã">éçºã«åå ãã¾ããã</h2>
<p>Ingressããµã¼ãã¹ã¡ãã·ã¥åãã®Kubernetesã«ã¼ãã£ã³ã°APIã®æªæ¥ãå½¢ä½ããã£ã³ã¹ãããããããã¾ãã</p>
<ul>
<li><a href="https://gateway-api.sigs.k8s.io/guides">ã¦ã¼ã¶ã¼ã¬ã¤ã</a>ã§ã対å¿å¯è½ãªã¦ã¼ã¹ã±ã¼ã¹ããã§ãã¯ãã¦ã¿ã¦ãã ããã</li>
<li><a href="https://gateway-api.sigs.k8s.io/implementations/">æ¢åã®Gatewayã³ã³ããã¼ã©ã¼</a>ãå®éã«è©¦ãã¦ã¿ãã®ãããããã§ãã</li>
<li>ããã«ã<a href="https://gateway-api.sigs.k8s.io/contributing/">ã³ãã¥ããã£ã¸ã®åå </a>ããå¾
ã¡ãã¦ãã¾ããä¸ç·ã«Gateway APIã®æªæ¥ãç¯ãã¦ããã¾ãããï¼</li>
</ul>
<h2 id="é¢é£ããkubernetesããã°è¨äº">é¢é£ããKubernetesããã°è¨äº</h2>
<ul>
<li><a href="https://kubernetes.io/blog/2023/11/28/gateway-api-ga/">New Experimental Features in Gateway API v1.0</a>
11/2023</li>
<li><a href="https://kubernetes.io/blog/2023/10/31/gateway-api-ga/">Gateway API v1.0: GA Release</a>
10/2023</li>
<li><a href="https://kubernetes.io/blog/2023/10/25/introducing-ingress2gateway/">Introducing ingress2gateway; Simplifying Upgrades to Gateway API</a>
10/2023</li>
<li><a href="https://kubernetes.io/blog/2023/08/29/gateway-api-v0-8/">Gateway API v0.8.0: Introducing Service Mesh Support</a>
08/2023</li>
</ul>
- DIY: Kubernetesã§èªåã ãã®ã¯ã©ã¦ããæ§ç¯ããã(ãã¼ã3)https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/Fri, 05 Apr 2024 07:40:00 +0000https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/
<p>Kubernetesã®ä¸ã§Kubernetesãå®è¡ããã¨ããæãè峿·±ããã§ã¼ãºã«è¿ã¥ãã¦ãã¾ãã
ãã®è¨äºã§ã¯ãKamajiãCluster APIãªã©ã®ãã¯ããã¸ã¼ã¨ãããã®KubeVirtã¨ã®çµ±åã«ã¤ãã¦èª¬æãã¾ãã</p>
<p>以åã®è°è«ã§ã¯ã<a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/">ãã¢ã¡ã¿ã«ä¸ã§ã®Kubernetesã®æºå</a>ã¨ã<a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2">Kubernetesãä»®æ³ãã·ã³ç®¡çã·ã¹ãã ã«å¤ããæ¹æ³</a>ã«ã¤ãã¦èª¬æãã¾ããã
ãã®è¨äºã§ã¯ãä¸è¨ã®ãã¹ã¦ã使ç¨ãã¦ãæ¬æ ¼çãªç®¡ç対象ã®Kubernetesãæ§ç¯ããã¯ã³ã¯ãªãã¯ã§ä»®æ³Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ããæ¹æ³ã説æãã¦ãã·ãªã¼ãºãç· ããããã¾ãã</p>
<p>ã¾ããCluster APIã«ã¤ãã¦è©³ããè¦ã¦ããã¾ãããã</p>
<h2 id="cluster-api">Cluster API</h2>
<p>Cluster APIã¯ãKubernetesã®æ¡å¼µæ©è½ã§ãå¥ã®Kubernetesã¯ã©ã¹ã¿ã¼å
ã§ã«ã¹ã¿ã ãªã½ã¼ã¹ã¨ãã¦Kubernetesã¯ã©ã¹ã¿ã¼ã管çã§ããããã«ãããã®ã§ãã</p>
<p>Cluster APIã®ä¸»ãªç®çã¯ãKubernetesã¯ã©ã¹ã¿ã¼ã®åºæ¬çãªã¨ã³ãã£ãã£ãè¨è¿°ãããã®ã©ã¤ããµã¤ã¯ã«ã管çããããã®çµ±ä¸ãããã¤ã³ã¿ã¼ãã§ã¼ã¹ãæä¾ãããã¨ã§ãã
ããã«ãããã¯ã©ã¹ã¿ã¼ã®ä½æãæ´æ°ãåé¤ã®ããã»ã¹ãèªååããã¹ã±ã¼ãªã³ã°ã¨ã¤ã³ãã©ã¹ãã©ã¯ãã£ã®ç®¡çãç°¡ç´ åã§ãã¾ãã</p>
<p>Cluster APIã®ã³ã³ããã¹ãã§ã¯ã<strong>管çã¯ã©ã¹ã¿ã¼</strong>ã¨<strong>ããã³ãã¯ã©ã¹ã¿ã¼</strong>ã®2ã¤ã®ç¨èªãããã¾ãã</p>
<ul>
<li><strong>管çã¯ã©ã¹ã¿ã¼</strong>ã¯ãä»ã®ã¯ã©ã¹ã¿ã¼ã®ãããã¤ã¨ç®¡çã«ä½¿ç¨ãããKubernetesã¯ã©ã¹ã¿ã¼ã§ãã
ãã®ã¯ã©ã¹ã¿ã¼ã«ã¯ãå¿
è¦ãªãã¹ã¦ã®Cluster APIã³ã³ãã¼ãã³ããå«ã¾ãã¦ãããããã³ãã¯ã©ã¹ã¿ã¼ã®è¨è¿°ãä½æãæ´æ°ãæ
å½ãã¾ããå¤ãã®å ´åããã®ç®çã§ã®ã¿ä½¿ç¨ããã¾ãã</li>
<li><strong>ããã³ãã¯ã©ã¹ã¿ã¼</strong>ã¯ãã¦ã¼ã¶ã¼ã¯ã©ã¹ã¿ã¼ã¾ãã¯Cluster APIã使ç¨ãã¦ãããã¤ãããã¯ã©ã¹ã¿ã¼ã§ãã
ãããã¯ã管çã¯ã©ã¹ã¿ã¼ã§é¢é£ãããªã½ã¼ã¹ãè¨è¿°ãããã¨ã§ä½æããã¾ãããã®å¾ãã¨ã³ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ã¨ãµã¼ãã¹ããããã¤ããããã«ä½¿ç¨ããã¾ãã</li>
</ul>
<p>ããã³ãã¯ã©ã¹ã¿ã¼ã¯ãç©ççã«ç®¡çã¯ã©ã¹ã¿ã¼ã¨åãã¤ã³ãã©ã¹ãã©ã¯ãã£ä¸ã§å®è¡ããå¿
è¦ã¯å¿
ããããªããã¨ãçè§£ãããã¨ãéè¦ã§ãã
ãããå¤ãã®å ´åããããã¯å¥ã®å ´æã§å®è¡ããã¦ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi1.svg"
alt="Cluster APIã使ç¨ãã管çKubernetesã¯ã©ã¹ã¿ã¼ã¨ããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®ç¸äºä½ç¨ã示ãå³"/> <figcaption>
<p>Cluster APIã使ç¨ãã管çKubernetesã¯ã©ã¹ã¿ã¼ã¨ããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®ç¸äºä½ç¨ã示ãå³</p>
</figcaption>
</figure>
<p>Cluster APIã¯ããã®åä½ã®ããã« <em>ãããã¤ãã¼</em> ã®æ¦å¿µãå©ç¨ãã¾ãã
ãããã¤ãã¼ã¯ã使ãããã¯ã©ã¹ã¿ã¼ã®ç¹å®ã®ã³ã³ãã¼ãã³ããæ
å½ããåå¥ã®ã³ã³ããã¼ã©ã¼ã§ãã
Cluster APIå
ã«ã¯ããã¤ãã®ç¨®é¡ã®ãããã¤ãã¼ãããã¾ãã
主ãªãã®ã¯æ¬¡ã®ã¨ããã§ãã</p>
<ul>
<li><strong>ã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¤ãã¼</strong>: ä»®æ³ãã·ã³ãç©çãµã¼ãã¼ãªã©ã®ã³ã³ãã¥ã¼ãã£ã³ã°ã¤ã³ãã©ã¹ãã©ã¯ãã£ãæä¾ããå½¹å²ãæ
ãã¾ãã</li>
<li><strong>ã³ã³ããã¼ã«ãã¬ã¼ã³ãããã¤ãã¼</strong>: kube-apiserverãkube-schedulerãkube-controller-managerãªã©ã®Kubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ãæä¾ãã¾ãã</li>
<li><strong>ãã¼ãã¹ãã©ãããããã¤ãã¼</strong>: 使ãããä»®æ³ãã·ã³ããµã¼ãã¼ç¨ã®cloud-initè¨å®ã®çæã«ä½¿ç¨ããã¾ãã</li>
</ul>
<p>å§ããã«ã¯ãCluster APIèªä½ã¨å種ãããã¤ãã¼ã1ã¤ãã¤ã¤ã³ã¹ãã¼ã«ããå¿
è¦ãããã¾ãã
ãµãã¼ãããã¦ãããããã¤ãã¼ã®å®å
¨ãªãªã¹ãã¯ããã¸ã§ã¯ãã®<a href="https://cluster-api.sigs.k8s.io/reference/providers.html">ããã¥ã¡ã³ã</a>ã§ç¢ºèªã§ãã¾ãã</p>
<p>ã¤ã³ã¹ãã¼ã«ã«ã¯<code>clusterctl</code>ã¦ã¼ãã£ãªãã£ãããã宣è¨çãªæ¹æ³ã¨ãã¦<a href="https://github.com/kubernetes-sigs/cluster-api-operator">Cluster API Operator</a>ã使ç¨ã§ãã¾ãã</p>
<h2 id="ãããã¤ãã¼ã®é¸æ">ãããã¤ãã¼ã®é¸æ</h2>
<h3 id="ã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¤ãã¼">ã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¤ãã¼</h3>
<p>KubeVirtã使ç¨ãã¦Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ããã«ã¯<a href="https://github.com/kubernetes-sigs/cluster-api-provider-kubevirt">KubeVirt Infrastructure Provider</a>ãã¤ã³ã¹ãã¼ã«ããå¿
è¦ãããã¾ãã
ããã«ãããCluster APIãåä½ãã管çã¯ã©ã¹ã¿ã¼ã¨åãå ´æã§ãã¯ã¼ã«ã¼ãã¼ãç¨ã®ä»®æ³ãã·ã³ããããã¤ã§ããããã«ãªãã¾ãã</p>
<h3 id="ã³ã³ããã¼ã«ãã¬ã¼ã³ãããã¤ãã¼">ã³ã³ããã¼ã«ãã¬ã¼ã³ãããã¤ãã¼</h3>
<p><a href="https://github.com/clastix/kamaji">Kamaji</a>ããã¸ã§ã¯ãã¯ã管çã¯ã©ã¹ã¿ã¼å
ã®ã³ã³ããã¨ãã¦ããã³ãã¯ã©ã¹ã¿ã¼ã®Kubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ãå®è¡ããããã®ã½ãªã¥ã¼ã·ã§ã³ãæä¾ãã¦ãã¾ãã
ãã®ã¢ããã¼ãã«ã¯ãããã¤ãã®éè¦ãªå©ç¹ãããã¾ãã</p>
<ul>
<li><strong>è²»ç¨å¯¾å¹æ</strong>: ã³ã³ããã¼ã«ãã¬ã¼ã³ãã³ã³ããã§å®è¡ãããã¨ã§ãã¯ã©ã¹ã¿ã¼ãã¨ã«åå¥ã®ã³ã³ããã¼ã«ãã¬ã¼ã³ãã¼ãã使ç¨ããå¿
è¦ããªããªããã¤ã³ãã©ã¹ãã©ã¯ãã£ã®ã³ã¹ãã大å¹
ã«åæ¸ã§ãã¾ãã</li>
<li><strong>å®å®æ§</strong>: è¤éãªå¤å±¤ãããã¤ã¡ã³ãæ¹å¼ãæé¤ãããã¨ã§ã¢ã¼ããã¯ãã£ãç°¡ç´ åã§ãã¾ãã
ä»®æ³ãã·ã³ãé æ¬¡èµ·åãã¦ãããã®ä¸ã«etcdã¨Kubernetesã³ã³ãã¼ãã³ããã¤ã³ã¹ãã¼ã«ããã®ã§ã¯ãªããKuberneteså
ã§é常ã®ã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦ãããã¤ããã³å®è¡ããããªãã¬ã¼ã¿ã¼ã«ãã£ã¦ç®¡çãããã·ã³ãã«ãªã³ã³ããã¼ã«ãã¬ã¼ã³ãããã¾ãã</li>
<li><strong>ã»ãã¥ãªãã£</strong>: ã¯ã©ã¹ã¿ã¼ã®ã³ã³ããã¼ã«ãã¬ã¼ã³ã¯ã¨ã³ãã¦ã¼ã¶ã¼ããé ããã¦ããããã®ã³ã³ãã¼ãã³ãã侵害ãããå¯è½æ§ãæ¸ãããã¯ã©ã¹ã¿ã¼ã®è¨¼ææ¸ã¹ãã¢ã¸ã®ã¦ã¼ã¶ã¼ã¢ã¯ã»ã¹ãæé¤ãã¾ããã¦ã¼ã¶ã¼ã«è¦ããªãã³ã³ããã¼ã«ãã¬ã¼ã³ãæ§æãããã®ã¢ããã¼ãã¯ãã¯ã©ã¦ããããã¤ãã¼ã«ãã£ã¦é »ç¹ã«ä½¿ç¨ããã¦ãã¾ãã</li>
</ul>
<h3 id="ãã¼ãã¹ãã©ãããããã¤ãã¼">ãã¼ãã¹ãã©ãããããã¤ãã¼</h3>
<p><a href="https://github.com/kubernetes-sigs/cluster-api/tree/main/bootstrap">Kubeadm</a>ããã¼ãã¹ãã©ãããããã¤ãã¼ã¨ãã¦ä½¿ç¨ãã¾ãã
ããã¯ãCluster APIã§ã¯ã©ã¹ã¿ã¼ãæºåããããã®æ¨æºçãªæ¹æ³ã§ãã
ãã®ãããã¤ãã¼ã¯ãCluster APIèªä½ã®ä¸é¨ã¨ãã¦éçºããã¦ãã¾ããkubeletã¨kubeadmãã¤ã³ã¹ãã¼ã«ãããæºåæ¸ã¿ã®ã·ã¹ãã ã¤ã¡ã¼ã¸ã®ã¿ãå¿
è¦ã§ãcloud-initã¨ignitionã®å½¢å¼ã§ã³ã³ãã£ã°ãçæã§ãã¾ãã</p>
<p>Talos LinuxãCluster APIçµç±ã§ã®ãããã¸ã§ãã³ã°ããµãã¼ããã¦ããããã®ããã®<a href="https://github.com/siderolabs/cluster-api-bootstrap-provider-talos">ãããã¤ãã¼</a>ã<a href="https://github.com/siderolabs/cluster-api-bootstrap-provider-talos">ç¨æããã¦ãã</a>ãã¨ã¯æ³¨ç®ã«å¤ãã¾ãã
<a href="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/">ååã®è¨äº</a>ã§ã¯ããã¢ã¡ã¿ã«ãã¼ãã§ç®¡çã¯ã©ã¹ã¿ã¼ãã»ããã¢ããããããã«Talos Linuxã使ç¨ããæ¹æ³ã«ã¤ãã¦èª¬æãã¾ããããããã³ãã¯ã©ã¹ã¿ã¼ããããã¸ã§ãã³ã°ããã«ã¯ãKamaji+Kubeadmã®ã¢ããã¼ãã®æ¹ãåªãã¦ãã¾ãã
ã³ã³ããã¸ã®Kubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ã®ãããã¤ã容æã«ãããããã³ã³ããã¼ã«ãã¬ã¼ã³ã¤ã³ã¹ã¿ã³ã¹ç¨ã«åå¥ã®ä»®æ³ãã·ã³ãç¨æããå¿
è¦ç¡ããªãã¾ãã
ããã«ããã管çãç°¡ç´ åãããã³ã¹ãã忏ããã¾ãã</p>
<h2 id="åä½ã®ä»çµã¿">åä½ã®ä»çµã¿</h2>
<p>Cluster APIã®ä¸»è¦ãªãªãã¸ã§ã¯ãã¯Clusterãªã½ã¼ã¹ã§ãä»ã®ãã¹ã¦ã®ãªã½ã¼ã¹ã®è¦ªã¨ãªãã¾ãã
é常ããã®ãªã½ã¼ã¹ã¯ä»ã®2ã¤ã®ãªã½ã¼ã¹ãåç
§ãã¾ãã
<strong>ã³ã³ããã¼ã«ãã¬ã¼ã³</strong>ãè¨è¿°ãããªã½ã¼ã¹ã¨<strong>ã¤ã³ãã©ã¹ãã©ã¯ãã£</strong>ãè¨è¿°ãããªã½ã¼ã¹ã§ãã
ãããããåå¥ã®ãããã¤ãã¼ã«ãã£ã¦ç®¡çããã¾ãã</p>
<p>Clusterã¨ã¯ç°ãªããããã2ã¤ã®ãªã½ã¼ã¹ã¯æ¨æºåããã¦ãããããã®ãªã½ã¼ã¹ã®ç¨®é¡ã¯ä½¿ç¨ãã¦ããç¹å®ã®ãããã¤ãã¼ã«ä¾åãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi2.svg"
alt="Cluster APIã«ãããClusterãªã½ã¼ã¹ã¨ããããªã³ã¯ãããªã½ã¼ã¹ã®é¢ä¿ã示ãå³"/> <figcaption>
<p>Cluster APIã«ãããClusterãªã½ã¼ã¹ã¨ããããªã³ã¯ãããªã½ã¼ã¹ã®é¢ä¿ã示ãå³</p>
</figcaption>
</figure>
<p>Cluster APIã«ã¯ãMachineDeploymentã¨ããååã®ãªã½ã¼ã¹ãããã¾ãã
ããã¯ç©çãµã¼ãã¼ãä»®æ³ãã·ã³ãã«ããããããã¼ãã®ã°ã«ã¼ããè¨è¿°ãããã®ã§ãã
ãã®ãªã½ã¼ã¹ã¯ãDeploymentãReplicaSetãPodãªã©ã®æ¨æºã®Kubernetesãªã½ã¼ã¹ã¨åæ§ã«æ©è½ãããã¼ãã®ã°ã«ã¼ãã宣è¨çã«è¨è¿°ããèªåçã«ã¹ã±ã¼ãªã³ã°ããããã®ã¡ã«ããºã ãæä¾ãã¾ãã</p>
<p>ã¤ã¾ããMachineDeploymentãªã½ã¼ã¹ã使ç¨ããã¨ãã¯ã©ã¹ã¿ã¼ã®ãã¼ãã宣è¨çã«è¨è¿°ã§ããæå®ããããã©ã¡ã¼ã¿ã¼ã¨è¦æ±ãããã¬ããªã«æ°ã«å¿ãã¦ããã¼ãã®ä½æãåé¤ãæ´æ°ãèªååã§ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/machinedeploymentres.svg"
alt="Cluster APIã«ãããClusterãªã½ã¼ã¹ã¨ãã®åãªã½ã¼ã¹ã®é¢ä¿ã示ãå³"/> <figcaption>
<p>Cluster APIã«ãããMachineDeploymentãªã½ã¼ã¹ã¨ãã®åãªã½ã¼ã¹ã®é¢ä¿ã示ãå³</p>
</figcaption>
</figure>
<p>ãã·ã³ã使ããããã«ãMachineDeploymentã¯ããã·ã³èªä½ãçæããããã®ãã³ãã¬ã¼ãã¨ããã®cloud-initè¨å®ãçæããããã®ãã³ãã¬ã¼ããåç
§ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/clusterapi3.svg"
alt="Cluster APIã«ãããClusterãªã½ã¼ã¹ã¨ããããªã³ã¯ãããªã½ã¼ã¹ã®é¢ä¿ã示ãå³"/> <figcaption>
<p>Cluster APIã«ãããMachineDeploymentãªã½ã¼ã¹ã¨ããããªã³ã¯ãããªã½ã¼ã¹ã®é¢ä¿ã示ãå³</p>
</figcaption>
</figure>
<p>Cluster APIã使ç¨ãã¦æ°ããKubernetesã¯ã©ã¹ã¿ã¼ããããã¤ããã«ã¯ã以ä¸ã®ãªã½ã¼ã¹ã®ã»ãããæºåããå¿
è¦ãããã¾ãã</p>
<ul>
<li>ä¸è¬çãªClusterãªã½ã¼ã¹</li>
<li>Kamajiãéç¨ããã³ã³ããã¼ã«ãã¬ã¼ã³ãæ
å½ããKamajiControlPlaneãªã½ã¼ã¹</li>
<li>KubeVirtå
ã®ã¯ã©ã¹ã¿ã¼è¨å®ãè¨è¿°ããKubevirtClusterãªã½ã¼ã¹</li>
<li>ä»®æ³ãã·ã³ãã³ãã¬ã¼ããæ
å½ããKubevirtMachineTemplateãªã½ã¼ã¹</li>
<li>ãã¼ã¯ã³ã¨cloud-initã®çæãæ
å½ããKubeadmConfigTemplateãªã½ã¼ã¹</li>
<li>ããã¤ãã®ã¯ã¼ã«ã¼ã使ããããã®å°ãªãã¨ã1ã¤ã®MachineDeployment</li>
</ul>
<h2 id="ã¯ã©ã¹ã¿ã¼ã®ä»ä¸ã">ã¯ã©ã¹ã¿ã¼ã®ä»ä¸ã</h2>
<p>ã»ã¨ãã©ã®å ´åããã§ååã§ããã使ç¨ãããããã¤ãã¼ã«ãã£ã¦ã¯ãä»ã®ãªã½ã¼ã¹ãå¿
è¦ã«ãªãå ´åãããã¾ãã
ãããã¤ãã¼ã®ç¨®é¡ãã¨ã«ä½æããããªã½ã¼ã¹ã®ä¾ã¯ã<a href="https://github.com/clastix/cluster-api-control-plane-provider-kamaji?tab=readme-ov-file#-supported-capi-infrastructure-providers">Kamajiããã¸ã§ã¯ãã®ããã¥ã¡ã³ã</a>ã§ç¢ºèªã§ãã¾ãã</p>
<p>ãã®æ®µéã§ãã§ã«ä½¿ç¨å¯è½ãªããã³ãKubernetesã¯ã©ã¹ã¿ã¼ãã§ãã¦ãã¾ãããããã¾ã§ã®ã¨ãããAPIã¯ã¼ã«ã¼ã¨ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¤ã³ã¹ãã¼ã«ã«æ¨æºã§å«ã¾ããããã¤ãã®ã³ã¢ãã©ã°ã¤ã³(<strong>kube-proxy</strong>ã¨<strong>CoreDNS</strong>)ããå«ã¾ãã¦ãã¾ããã
å®å
¨ã«çµ±åããã«ã¯ãããã«ããã¤ãã®ã³ã³ãã¼ãã³ããã¤ã³ã¹ãã¼ã«ããå¿
è¦ãããã¾ãã</p>
<p>追å ã®ã³ã³ãã¼ãã³ããã¤ã³ã¹ãã¼ã«ããã«ã¯ãåå¥ã®<a href="https://github.com/kubernetes-sigs/cluster-api-addon-provider-helm">Cluster API Add-on Provider for Helm</a>ãã<a href="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/">åã®è¨äº</a>ã§èª¬æãã<a href="https://fluxcd.io/">FluxCD</a>ã使ç¨ã§ãã¾ãã</p>
<p>FluxCDã§ãªã½ã¼ã¹ã使ããéãCluster APIã«ãã£ã¦çæãããkubeconfigãåç
§ãããã¨ã§ã¿ã¼ã²ããã¯ã©ã¹ã¿ã¼ãæå®ã§ãã¾ãã
ããããã¨ã¤ã³ã¹ãã¼ã«ã¯ç´æ¥ãã®ã¯ã©ã¹ã¿ã¼ã«å¯¾ãã¦å®è¡ããã¾ãã
ãã®ããã«ãFluxCDã¯ç®¡çã¯ã©ã¹ã¿ã¼ã¨ã¦ã¼ã¶ã¼ããã³ãã¯ã©ã¹ã¿ã¼ã®ä¸¡æ¹ã§ãªã½ã¼ã¹ã管çããããã®æ±ç¨ãã¼ã«ã«ãªãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/fluxcd.svg"
alt="管çã¯ã©ã¹ã¿ã¼ã¨ããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®ä¸¡æ¹ã«ã³ã³ãã¼ãã³ããã¤ã³ã¹ãã¼ã«ã§ããfluxcdã®ç¸äºä½ç¨ã¹ãã¼ã ã示ãå³"/> <figcaption>
<p>管çã¯ã©ã¹ã¿ã¼ã¨ããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®ä¸¡æ¹ã«ã³ã³ãã¼ãã³ããã¤ã³ã¹ãã¼ã«ã§ããfluxcdã®ç¸äºä½ç¨ã¹ãã¼ã ã示ãå³</p>
</figcaption>
</figure>
<p>ããã§è°è«ããã¦ããã³ã³ãã¼ãã³ãã¨ã¯ä½ã§ããããï¼ä¸è¬çã«ããã®ã»ããã«ã¯ä»¥ä¸ãå«ã¾ãã¾ãã</p>
<h3 id="cniãã©ã°ã¤ã³">CNIãã©ã°ã¤ã³</h3>
<p>ããã³ãKubernetesã¯ã©ã¹ã¿ã¼å
ã®Podéã®éä¿¡ã確ä¿ããã«ã¯ãCNIãã©ã°ã¤ã³ããããã¤ããå¿
è¦ãããã¾ãã
ãã®ãã©ã°ã¤ã³ã¯ãPodå士ãç¸äºã«éä¿¡ã§ããããã«ããä»®æ³ãããã¯ã¼ã¯ã使ãã徿¥ã¯ã¯ã©ã¹ã¿ã¼ã®ã¯ã¼ã«ã¼ãã¼ãä¸ã«Daemonsetã¨ãã¦ãããã¤ããã¾ãã
é©åã ã¨æãCNIãã©ã°ã¤ã³ãé¸ãã§ã¤ã³ã¹ãã¼ã«ã§ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components1.svg"
alt="ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼å
ã«ã¤ã³ã¹ãã¼ã«ãããCNIãã©ã°ã¤ã³ã示ãå³"/> <figcaption>
<p>ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼å
ã«ã¤ã³ã¹ãã¼ã«ãããCNIãã©ã°ã¤ã³ã示ãå³</p>
</figcaption>
</figure>
<h3 id="ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼">ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼</h3>
<p>ãã®ä¸é¨ã¬ã¹ãã³ã¹ã«ã¤ãã¦ã¯ã以ä¸ã®ããã«Markdownè¨æ³ãä¿®æ£ããã®ãè¯ãã¨æãã¾ãã</p>
<p>ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼(CCM)ã®ä¸»ãªå½¹å²ã¯ãKubernetes ãã¯ã©ã¦ãã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¤ãã¼ã®ç°å¢(ãã®å ´åã¯ãããã³ãKubernetesã®ãã¹ã¦ã®ã¯ã¼ã«ã¼ããããã¸ã§ãã³ã°ããã¦ãã管çKubernetesã¯ã©ã¹ã¿ã¼)ã¨çµ±åãããã¨ã§ãã
CCMãå®è¡ããã¿ã¹ã¯ã¯æ¬¡ã®ã¨ããã§ãã</p>
<ol>
<li>LoadBalancer ã¿ã¤ãã®ãµã¼ãã¹ã使ãããã¨ãCCM ã¯ã¯ã©ã¦ããã¼ããã©ã³ãµã¼ã®ä½æããã»ã¹ãéå§ãã¾ããããã«ããããã©ãã£ãã¯ã Kubernetes ã¯ã©ã¹ã¿ã¼ã«èªå°ããã¾ãã</li>
<li>ã¯ã©ã¦ãã¤ã³ãã©ã¹ãã©ã¯ãã£ãããã¼ããåé¤ãããå ´åãCCM ã¯ã¯ã©ã¹ã¿ã¼ããããã®ãã¼ãã確å®ã«åé¤ããã¯ã©ã¹ã¿ã¼ã®ç¾å¨ã®ç¶æ
ãç¶æãã¾ãã</li>
<li>CCM ã使ç¨ããå ´åããã¼ãã¯ç¹å¥ãª taint (<code>node.cloudprovider.kubernetes.io/uninitialized</code>) ãä»ãã¦ã¯ã©ã¹ã¿ã¼ã«è¿½å ããã¾ããããã«ãããå¿
è¦ã«å¿ãã¦è¿½å ã®ãã¸ãã¹ãã¸ãã¯ãå¦çã§ãã¾ããåæåãæ£å¸¸ã«å®äºããã¨ããã® taint ããã¼ãããåé¤ããã¾ãã</li>
</ol>
<p>ã¯ã©ã¦ããããã¤ãã¼ã«ãã£ã¦ã¯ãCCM ãããã³ãã¯ã©ã¹ã¿ã¼ã®å
é¨ã¨å¤é¨ã®ä¸¡æ¹ã§åä½ããå ´åãããã¾ãã</p>
<p><a href="https://github.com/kubevirt/cloud-provider-kubevirt">KubeVirt Cloud Provider</a>ã¯ãå¤é¨ã®è¦ªç®¡çã¯ã©ã¹ã¿ã¼ã«ã¤ã³ã¹ãã¼ã«ããããã«è¨è¨ããã¦ãã¾ãã
ãããã£ã¦ãããã³ãã¯ã©ã¹ã¿ã¼ã§LoadBalancerã¿ã¤ãã®ãµã¼ãã¹ã使ããã¨è¦ªã¯ã©ã¹ã¿ã¼ã§LoadBalancerãµã¼ãã¹ã®ä½æãéå§ããããã©ãã£ãã¯ãããã³ãã¯ã©ã¹ã¿ã¼ã«èªå°ããã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components2.svg"
alt="ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å¤é¨ã«ã¤ã³ã¹ãã¼ã«ãããCloud Controller Managerã¨ãããã管çãã親ããåã¸ã®Kubernetesã¯ã©ã¹ã¿ã¼éã®ãµã¼ãã¹ã®ãããã³ã°ã示ãå³"/> <figcaption>
<p>ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å¤é¨ã«ã¤ã³ã¹ãã¼ã«ãããCloud Controller Managerã¨ãããã管çãã親ããåã¸ã®Kubernetesã¯ã©ã¹ã¿ã¼éã®ãµã¼ãã¹ã®ãããã³ã°ã示ãå³</p>
</figcaption>
</figure>
<h3 id="csiãã©ã¤ãã¼">CSIãã©ã¤ãã¼</h3>
<p>Container Storage Interface(CSI)ã¯ãKubernetesã§ã¹ãã¬ã¼ã¸ãæä½ããããã«ã2ã¤ã®ä¸»è¦ãªé¨åã«åããã¦ãã¾ãã</p>
<ul>
<li><strong>csi-controller</strong>: ãã®ã³ã³ãã¼ãã³ãã¯ãã¯ã©ã¦ããããã¤ãã¼ã®APIã¨å¯¾è©±ãã¦ãããªã¥ã¼ã ã®ä½æãåé¤ãã¢ã¿ããããã¿ãããããã³ãµã¤ãºå¤æ´ãè¡ã責任ãããã¾ãã</li>
<li><strong>csi-node</strong>: ãã®ã³ã³ãã¼ãã³ãã¯åãã¼ãã§å®è¡ãããkubeletããè¦æ±ãããPodã¸ã®ããªã¥ã¼ã ã®ãã¦ã³ãã容æã«ãã¾ãã</li>
</ul>
<p><a href="https://github.com/kubevirt/csi-driver">KubeVirt CSI Driver</a>ã使ç¨ããã³ã³ããã¹ãã§ã¯ãã¦ãã¼ã¯ãªæ©ä¼ãçã¾ãã¾ãã
KubeVirtã®ä»®æ³ãã·ã³ã¯ç®¡çKubernetesã¯ã©ã¹ã¿ã¼ã§Kubernetesã®ãã«æ©è½ã®APIãå©ç¨ã§ããç°å¢ã§å®è¡ããããããã¦ã¼ã¶ã¼ã®ããã³ãã¯ã©ã¹ã¿ã¼ã®å¤é¨ã§csi-controllerãå®è¡ããéãéããã¾ãã
ãã®ã¢ããã¼ãã¯KubeVirtã³ãã¥ããã£ã§äººæ°ããããããã¤ãã®éè¦ãªå©ç¹ãããã¾ãã</p>
<ul>
<li><strong>ã»ãã¥ãªãã£</strong>: ãã®æ¹æ³ã§ã¯ãã¨ã³ãã¦ã¼ã¶ã¼ããã¯ã©ã¦ãã®å
é¨APIãé ããKubernetesã¤ã³ã¿ã¼ãã§ã¼ã¹ãä»ãã¦ã®ã¿ãªã½ã¼ã¹ã¸ã®ã¢ã¯ã»ã¹ãæä¾ãã¾ããããã«ãããã¦ã¼ã¶ã¼ã¯ã©ã¹ã¿ã¼ãã管çã¯ã©ã¹ã¿ã¼ã¸ã®ç´æ¥ã¢ã¯ã»ã¹ã®ãªã¹ã¯ã軽æ¸ããã¾ãã</li>
<li><strong>ã·ã³ãã«ãã¨å©ä¾¿æ§</strong>: ã¦ã¼ã¶ã¼ã¯èªåã®ã¯ã©ã¹ã¿ã¼ã§è¿½å ã®ã³ã³ããã¼ã©ã¼ã管çããå¿
è¦ããªããããã¢ã¼ããã¯ãã£ãç°¡ç´ åããã管çã®è² æ
ã軽æ¸ããã¾ãã</li>
</ul>
<p>ãã ããcsi-nodeã¯ãåãã¼ãã®kubeletã¨ç´æ¥ããåããããããå¿
ç¶çã«ããã³ãã¯ã©ã¹ã¿ã¼å
ã§å®è¡ããå¿
è¦ãããã¾ãã
ãã®ã³ã³ãã¼ãã³ãã¯ãPodã¸ã®ããªã¥ã¼ã ã®ãã¦ã³ãã¨ãã¦ã³ãè§£é¤ãæ
å½ããã¯ã©ã¹ã¿ã¼ãã¼ãã§ç´æ¥çºçããããã»ã¹ã¨ã®ç·å¯ãªçµ±åãå¿
è¦ã§ãã</p>
<p>KubeVirt CSIãã©ã¤ãã¼ã¯ãããªã¥ã¼ã ã®è¦æ±ã®ããã®ãããã·ã¨ãã¦æ©è½ãã¾ãã
ããã³ãã¯ã©ã¹ã¿ã¼å
ã§PVCã使ãããã¨ã管çã¯ã©ã¹ã¿ã¼ã«PVCã使ããã使ãããPVãä»®æ³ãã·ã³ã«æ¥ç¶ããã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components3.svg"
alt="ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å
é¨ã¨å¤é¨ã®ä¸¡æ¹ã«ã¤ã³ã¹ãã¼ã«ãããCSIãã©ã°ã¤ã³ã®ã³ã³ãã¼ãã³ãã¨ãããã管çãã親ããåã¸ã®Kubernetesã¯ã©ã¹ã¿ã¼éã®æ°¸ç¶ããªã¥ã¼ã ã®ãããã³ã°ã示ãå³"/> <figcaption>
<p>ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å
é¨ã¨å¤é¨ã®ä¸¡æ¹ã«ã¤ã³ã¹ãã¼ã«ãããCSIãã©ã°ã¤ã³ã®ã³ã³ãã¼ãã³ãã¨ãããã管çãã親ããåã¸ã®Kubernetesã¯ã©ã¹ã¿ã¼éã®æ°¸ç¶ããªã¥ã¼ã ã®ãããã³ã°ã示ãå³</p>
</figcaption>
</figure>
<h3 id="ã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼">ã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼</h3>
<p><a href="https://github.com/kubernetes/autoscaler">ã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼</a>ã¯ããã¾ãã¾ãªã¯ã©ã¦ãAPIã¨é£æºã§ããæ±ç¨çãªã³ã³ãã¼ãã³ãã§ãããCluster APIã¨ã®çµ±åã¯å©ç¨å¯è½ãªæ©è½ã®1ã¤ã«éãã¾ããã
é©åã«è¨å®ããã«ã¯ã2ã¤ã®ã¯ã©ã¹ã¿ã¼ã¸ã®ã¢ã¯ã»ã¹ãå¿
è¦ã§ãã
ããã³ãã¯ã©ã¹ã¿ã¼ã§ã¯Podã追跡ããæ°ãããã¼ãã追å ããå¿
è¦æ§ã夿ãã管çããKubernetesã¯ã©ã¹ã¿ã¼(管çKubernetesã¯ã©ã¹ã¿ã¼)ã§ã¯MachineDeploymentãªã½ã¼ã¹ã¨å¯¾è©±ããã¬ããªã«æ°ã調æ´ãã¾ãã</p>
<p>Cluster Autoscalerã¯é常ããã³ãKubernetesã¯ã©ã¹ã¿ã¼å
ã§å®è¡ããã¾ãããä»åã®ã±ã¼ã¹ã§ã¯ãåè¿°ã¨åãçç±ããã¯ã©ã¹ã¿ã¼å¤ã«ã¤ã³ã¹ãã¼ã«ãããã¨ããå§ããã¾ãã
ãã®ã¢ããã¼ãã¯ãããã³ãã¯ã©ã¹ã¿ã¼ã®ã¦ã¼ã¶ã¼ã管çã¯ã©ã¹ã¿ã¼ã®ç®¡çAPIã«ã¢ã¯ã»ã¹ã§ããªãããã«ãããããã¡ã³ããã³ã¹ãããç°¡åã§ãããå®å
¨ã§ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/components4.svg"
alt="ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å¤é¨ã«ã¤ã³ã¹ãã¼ã«ãããCloud Controller Managerã示ãå³"/> <figcaption>
<p>ãã¹ããããKubernetesã¯ã©ã¹ã¿ã¼ã®ã¹ãã¼ã ã«ããã¦ãããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã®å¤é¨ã«ã¤ã³ã¹ãã¼ã«ãããCluster Autoscalerã示ãå³</p>
</figcaption>
</figure>
<h3 id="konnectivity">Konnectivity</h3>
<p>ãã1ã¤è¿½å ã®ã³ã³ãã¼ãã³ãã«ã¤ãã¦è¨åãããã¨æãã¾ãã
<a href="https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/">Konnectivity</a>ã§ãã
å¾ã§ããã³ãKubernetesã¯ã©ã¹ã¿ã¼ã§webhookã¨APIã¢ã°ãªã²ã¼ã·ã§ã³ã¬ã¤ã¤ã¼ãåä½ãããããã«ããããããããå¿
è¦ã«ãªãã§ãããã
ãã®ãããã¯ã«ã¤ãã¦ã¯ãç§ã®<a href="https://kubernetes.io/blog/2021/12/22/kubernetes-in-kubernetes-and-pxe-bootable-server-farm/#webhooks-and-api-aggregation-layer">以åã®è¨äº</a>ã§è©³ãã説æãã¦ãã¾ãã</p>
<p>ä¸è¨ã®ã³ã³ãã¼ãã³ãã¨ã¯ç°ãªããKamajiã§ã¯ãKonnectivityãç°¡åã«æå¹ã«ããkube-proxyãCoreDNSã¨ä¸¦ãã§ãããã³ãã¯ã©ã¹ã¿ã¼ã®ã³ã¢ã³ã³ãã¼ãã³ãã®1ã¤ã¨ãã¦ç®¡çã§ãã¾ãã</p>
<h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>ããã§ãåçã¹ã±ã¼ãªã³ã°ãããªã¥ã¼ã ã®èªåãããã¸ã§ãã³ã°ããã¼ããã©ã³ãµã¼ã®æ©è½ãåãããå®å
¨ã«æ©è½ããKubernetesã¯ã©ã¹ã¿ã¼ãã§ãã¾ããã</p>
<p>ä»å¾ã¯ãããã³ãã¯ã©ã¹ã¿ã¼ããã®ã¡ããªã¯ã¹ããã°ã®åéãæ¤è¨ããã¨ããã§ãããããããã¯ãã®è¨äºã®ç¯å²ãè¶
ãã¦ãã¾ãã</p>
<p>ãã¡ãããKubernetesã¯ã©ã¹ã¿ã¼ããããã¤ããããã«å¿
è¦ãªã³ã³ãã¼ãã³ãã¯ãã¹ã¦ã1ã¤ã®Helmãã£ã¼ãã«ããã±ã¼ã¸åããçµ±ä¸ãããã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦ãããã¤ã§ãã¾ãã
ããã¯ããªã¼ãã³ãªPaaSãã©ãããã©ã¼ã ã§ãã<a href="https://cozystack.io/">Cozystack</a>ã§ããã¿ã³ãã¯ãªãã¯ããã ãã§ç®¡ç対象ã®Kubernetesã¯ã©ã¹ã¿ã¼ã®ãããã¤ãæ´çããæ¹æ³ãã®ãã®ã§ãã
Cozystackã§ã¯ãè¨äºã§èª¬æãããã¹ã¦ã®ãã¯ããã¸ã¼ãç¡æã§è©¦ããã¨ãã§ãã¾ãã</p>
- DIY: Kubernetesã§èªåã ãã®ã¯ã©ã¦ããæ§ç¯ããã(ãã¼ã2)https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/Fri, 05 Apr 2024 07:35:00 +0000https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/
<p>Kubernetesã¨ã³ã·ã¹ãã ã ãã使ã£ã¦èªåã ãã®ã¯ã©ã¦ããæ§ç¯ããæ¹æ³ã«ã¤ãã¦ãä¸é£ã®è¨äºãç¶ãã¦ãã¾ãã
<a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/">ååã®è¨äº</a>ã§ã¯ãTalos Linuxã¨Flux CDããã¼ã¹ã«ããåºæ¬çãªKubernetes ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã®æºåæ¹æ³ã説æãã¾ããã
ãã®è¨äºã§ã¯ãKubernetesã«ããããã¾ãã¾ãªä»®æ³åãã¯ããã¸ã¼ãããã¤ãç´¹ä»ãã主ã«ã¹ãã¬ã¼ã¸ã¨ãããã¯ã¼ã¯ãä¸å¿ã«ãKuberneteså
ã§ä»®æ³ãã·ã³ãå®è¡ããããã«å¿
è¦ãªç°å¢ãæ´ãã¾ãã</p>
<p>KubeVirtãLINSTORãKube-OVNãªã©ã®ãã¯ããã¸ã¼ã«ã¤ãã¦åãä¸ããäºå®ã§ãã</p>
<p>ãããæåã«ãä»®æ³ãã·ã³ãå¿
è¦ãªçç±ã¨ãã¯ã©ã¦ãã®æ§ç¯ã«Dockerã³ã³ããã使ç¨ããã ãã§ã¯ä¸ååã§ããçç±ã説æãã¾ãããã
ãã®çç±ã¯ãã³ã³ãããååãªã¬ãã«ã®åé¢ãæä¾ãã¦ããªããã¨ã«ããã¾ãã
ç¶æ³ã¯å¹´ã
æ¹åããã¦ãã¾ãããã³ã³ããã®ãµã³ãããã¯ã¹ããè±åºãã¦ã·ã¹ãã ã®ç¹æ¨©ãææ ¼ãããèå¼±æ§ãè¦ã¤ãããã¨ãããããã¾ãã</p>
<p>䏿¹ãKubernetesã¯ãã¨ãã¨ãã«ãããã³ãã·ã¹ãã ã¨ãã¦è¨è¨ããã¦ããªãã£ããããåºæ¬çãªä½¿ç¨ãã¿ã¼ã³ã§ã¯ãç¬ç«ããããã¸ã§ã¯ããéçºãã¼ã ãã¨ã«å¥ã
ã®Kubernetesã¯ã©ã¹ã¿ã¼ã使ãããã¨ãä¸è¬çã§ãã</p>
<p>ä»®æ³ãã·ã³ã¯ãã¯ã©ã¦ãç°å¢ã§ããã³ãå士ãåé¢ããããã®ä¸»è¦ãªææ®µã§ãã
ä»®æ³ãã·ã³å
ã§ã¯ãã¦ã¼ã¶ã¼ã¯ç®¡çè
権éã§ã³ã¼ããããã°ã©ã ãå®è¡ã§ãã¾ãããããã¯ä»ã®ããã³ããç°å¢èªä½ã«å½±é¿ãä¸ãã¾ããã
ã¤ã¾ããä»®æ³ãã·ã³ã¯<a href="https://kubernetes.io/docs/concepts/security/multi-tenancy/#isolation">ãã¼ããã«ãããã³ã·ã¼åé¢</a>ãå®ç¾ããããã³ãéã§ä¿¡é ¼é¢ä¿ããªãç°å¢ã§ãå®å
¨ã«å®è¡ã§ãã¾ãã</p>
<h2 id="kubernetes-ã«ãããä»®æ³åãã¯ããã¸ã¼">Kubernetes ã«ãããä»®æ³åãã¯ããã¸ã¼</h2>
<p>Kubernetesã®ä¸çã«ä»®æ³åããããããã¯ããã¸ã¼ã¯ããã¤ãããã¾ããã<a href="https://kubevirt.io/">KubeVirt</a>ã¨<a href="https://katacontainers.io/">Kata Containers</a>ãæãä¸è¬çã§ãã
ãã ãããããã®å使¹å¼ã¯ç°ãªããã¨ãçè§£ãã¦ããå¿
è¦ãããã¾ãã</p>
<p><strong>Kata Containers</strong>ã¯ãCRI(Container Runtime Interface)ãå®è£
ãã¦ãããæ¨æºã®ã³ã³ãããä»®æ³ãã·ã³å
ã§å®è¡ãããã¨ã§ã追å ã®åé¢ã¬ãã«ãæä¾ãã¾ãã
ãã ãããããã¯åä¸ã®Kubernetesã¯ã©ã¹ã¿ã¼å
ã§åä½ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/kata-containers.svg"
alt="ã³ã³ãããä»®æ³ãã·ã³å
ã§å®è¡ãããã¨ã«ãããKata Containersãã³ã³ããã®åé¢ã確ä¿ããæ¹æ³ã示ãå³"/> <figcaption>
<p>ã³ã³ãããä»®æ³ãã·ã³å
ã§å®è¡ãããã¨ã«ãããKata Containersãã³ã³ããã®åé¢ã確ä¿ããæ¹æ³ã示ãå³</p>
</figcaption>
</figure>
<p>KubeVirtã¯ãKubernetes APIã使ç¨ãã¦å¾æ¥ã®ä»®æ³ãã·ã³ãå®è¡ã§ãã¾ãã
KubeVirtã®ä»®æ³ãã·ã³ã¯ãã³ã³ããå
ã®é常ã®Linuxããã»ã¹ã¨ãã¦å®è¡ããã¾ãã
ã¤ã¾ããKubeVirtã§ã¯ãã³ã³ãããä»®æ³ãã·ã³(QEMU)ããã»ã¹ãå®è¡ããããã®ãµã³ãããã¯ã¹ã¨ãã¦ä½¿ç¨ããã¾ãã
ããã¯ã以ä¸ã®å³ã§ãKubeVirtã«ãããä»®æ³ãã·ã³ã®ã©ã¤ããã¤ã°ã¬ã¼ã·ã§ã³ã®å®è£
æ¹æ³ãè¦ãã¨æããã§ãã
ãã¤ã°ã¬ã¼ã·ã§ã³ãå¿
è¦ãªå ´åãä»®æ³ãã·ã³ã¯ããã³ã³ããããå¥ã®ã³ã³ããã«ç§»åãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/kubevirt-migration.svg"
alt="KubeVirtã«ããã¦ãä»®æ³ãã·ã³ãããã³ã³ããããå¥ã®ã³ã³ããã¸ã©ã¤ããã¤ã°ã¬ã¼ã·ã§ã³ããæ§åã示ãå³"/> <figcaption>
<p>KubeVirtã«ããã¦ãä»®æ³ãã·ã³ãããã³ã³ããããå¥ã®ã³ã³ããã¸ã©ã¤ããã¤ã°ã¬ã¼ã·ã§ã³ããæ§åã示ãå³</p>
</figcaption>
</figure>
<p><a href="https://github.com/cloud-hypervisor/cloud-hypervisor">Cloud-Hypervisor</a>ã使ç¨ãã軽éãªä»®æ³åãå®è£
ããåæããCluster APIã使ç¨ããä»®æ³Kubernetesã¯ã©ã¹ã¿ã¼ã®å®è¡ã«éç¹ãç½®ãã¦ãã代æ¿ããã¸ã§ã¯ã<a href="https://github.com/smartxworks/virtink">Virtink</a>ãããã¾ãã</p>
<p>ç§ãã¡ã®ç®æ¨ãèæ
®ãã¦ããã®åéã§æãä¸è¬çãªããã¸ã§ã¯ãã§ããKubeVirtã使ç¨ãããã¨ã«æ±ºãã¾ããã
ããã«ãç§ãã¡ã¯KubeVirtã«é¢ããè±å¯ãªå°éç¥èãæã¡ããã§ã«å¤ãã®è²¢ç®ããã¦ãã¾ãã</p>
<p>KubeVirtã¯<a href="https://kubevirt.io/user-guide/operations/installation/">ã¤ã³ã¹ãã¼ã«ãç°¡å</a>ã§ã<a href="https://kubevirt.io/user-guide/virtual_machines/disks_and_volumes/#containerdisk">containerDisk</a>æ©è½ã使ç¨ãã¦ããã«ä»®æ³ãã·ã³ãå®è¡ã§ãã¾ãã
ãã®æ©è½ã«ãããVMã¤ã¡ã¼ã¸ãã³ã³ããã¤ã¡ã¼ã¸ã¬ã¸ã¹ããªããç´æ¥OCIã¤ã¡ã¼ã¸ã¨ãã¦ä¿åããã³é
å¸ã§ãã¾ãã
containerDiskã使ç¨ããä»®æ³ãã·ã³ã¯ãKubernetesã¯ã¼ã«ã¼ãã¼ãããã®ä»ã®ç¶æ
ã®æ°¸ç¶åãå¿
è¦ã¨ããªãä»®æ³ãã·ã³ã®ä½æã«é©ãã¦ãã¾ãã</p>
<p>æ°¸ç¶ãã¼ã¿ã管çããããã«ãKubeVirtã¯å¥ã®ãã¼ã«ã§ããContainerized Data Importer(CDI)ãæä¾ãã¦ãã¾ãã
CDIã使ç¨ããã¨ãPVCã®ã¯ãã¼ã³ã使ãããã¼ã¹ã¤ã¡ã¼ã¸ãããã¼ã¿ãåãè¾¼ããã¨ãã§ãã¾ãã
CDIã¯ãä»®æ³ãã·ã³ã®æ°¸ç¶ããªã¥ã¼ã ãèªåçã«ãããã¸ã§ãã³ã°ããå ´åããããã³ãKubernetesã¯ã©ã¹ã¿ã¼ããã®æ°¸ç¶ããªã¥ã¼ã è¦æ±ãå¦çããããã«ä½¿ç¨ãããKubeVirt CSIãã©ã¤ãã¼ã«ãå¿
è¦ã¨ãªãã¾ãã</p>
<p>ãããæåã«ããããã®ãã¼ã¿ãã©ãã«ã©ã®ããã«ä¿åããããæ±ºããå¿
è¦ãããã¾ãã</p>
<h2 id="kubernetesä¸ã®ä»®æ³ãã·ã³ç¨ã¹ãã¬ã¼ã¸">Kubernetesä¸ã®ä»®æ³ãã·ã³ç¨ã¹ãã¬ã¼ã¸</h2>
<p>CSI(Container Storage Interface)ã®å°å
¥ã«ãããKubernetesã¨çµ±åã§ããå¹
åºããã¯ããã¸ã¼ãå©ç¨å¯è½ã«ãªãã¾ããã
å®éãKubeVirtã¯CSIã¤ã³ã¿ã¼ãã§ã¼ã¹ãå®å
¨ã«æ´»ç¨ãã¦ãããä»®æ³åã®ããã®ã¹ãã¬ã¼ã¸ã®é¸æè¢ã¯Kubernetesèªä½ã®ã¹ãã¬ã¼ã¸ã®é¸æè¢ã¨å¯æ¥ã«é£æºãã¦ãã¾ãã
ããããèæ
®ãã¹ãç´°ããªå·®ç°ãããã¾ãã
éå¸¸ãæ¨æºã®ãã¡ã¤ã«ã·ã¹ãã ã使ç¨ããã³ã³ããã¨ã¯ç°ãªããä»®æ³ãã·ã³ã«ã¯ãããã¯ããã¤ã¹ã®æ¹ãå¹ççã§ãã</p>
<p>Kubernetesã®CSIã¤ã³ã¿ã¼ãã§ã¼ã¹ã§ã¯ããã¡ã¤ã«ã·ã¹ãã ã¨ãããã¯ããã¤ã¹ã®ä¸¡æ¹ã®ã¿ã¤ãã®ããªã¥ã¼ã ãè¦æ±ã§ãã¾ããã使ç¨ãã¦ããã¹ãã¬ã¼ã¸ããã¯ã¨ã³ããããããµãã¼ããã¦ãããã¨ã確èªãããã¨ãéè¦ã§ãã</p>
<p>ä»®æ³ãã·ã³ã«ãããã¯ããã¤ã¹ã使ç¨ããã¨ããã¡ã¤ã«ã·ã¹ãã ãªã©ã®è¿½å ã®æ½è±¡åã¬ã¤ã¤ã¼ãä¸è¦ã«ãªããããããã©ã¼ãã³ã¹ãåä¸ããã»ã¨ãã©ã®å ´åã§ <em>ReadWriteMany</em> ã¢ã¼ãã®ä½¿ç¨ãå¯è½ã«ãªãã¾ãã
ãã®ã¢ã¼ãã§ã¯ãè¤æ°ã®ãã¼ãããåæã«ããªã¥ã¼ã ã«ã¢ã¯ã»ã¹ã§ãããããKubeVirtã«ãããä»®æ³ãã·ã³ã®ã©ã¤ããã¤ã°ã¬ã¼ã·ã§ã³ãæå¹ã«ããããã®éè¦ãªæ©è½ã§ãã</p>
<p>ã¹ãã¬ã¼ã¸ã·ã¹ãã ã¯ãå¤é¨ã¾ãã¯å
é¨(ãã¤ãã¼ã³ã³ãã¼ã¸ãã¤ã³ãã©ã¹ãã©ã¯ãã£ã®å ´å)ã«ãããã¨ãã§ãã¾ãã
å¤ãã®å ´åãå¤é¨ã¹ãã¬ã¼ã¸ã使ç¨ããã¨ãã¼ã¿ãè¨ç®ãã¼ãããåé¢ãã¦ä¿åããããããã·ã¹ãã å
¨ä½ã®å®å®æ§ãåä¸ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-external.svg"
alt="è¨ç®ãã¼ãã¨éä¿¡ããå¤é¨ãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³"/> <figcaption>
<p>è¨ç®ãã¼ãã¨éä¿¡ããå¤é¨ãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³</p>
</figcaption>
</figure>
<p>å¤é¨ã¹ãã¬ã¼ã¸ã½ãªã¥ã¼ã·ã§ã³ã¯ãã¨ã³ã¿ã¼ãã©ã¤ãºã·ã¹ãã ã§ãã使ç¨ããã¦ãã¾ãã
ãã®ãããªã¹ãã¬ã¼ã¸ã¯ãå¤ãã®å ´åéç¨ãæ
å½ããå¤é¨ãã³ãã¼ã«ãã£ã¦æä¾ãããããã§ãã
Kubernetesã¨ã®çµ±åã«ã¯ãã¯ã©ã¹ã¿ã¼ã«ã¤ã³ã¹ãã¼ã«ãããå°ããªã³ã³ãã¼ãã³ãã§ããCSIãã©ã¤ãã¼ã®ã¿ãé¢ä¸ãã¾ãã
ãã®ãã©ã¤ãã¼ã¯ããã®ã¹ãã¬ã¼ã¸ã«ããªã¥ã¼ã ããããã¸ã§ãã³ã°ããKubernetesã«ãã£ã¦å®è¡ãããPodã«ããããã¢ã¿ããããå½¹å²ãæ
ãã¾ãã
ãã ãããã®ãããªã¹ãã¬ã¼ã¸ã½ãªã¥ã¼ã·ã§ã³ã¯ãç´ç²ã«ãªã¼ãã³ã½ã¼ã¹ã®ãã¯ããã¸ã¼ã使ç¨ãã¦å®è£
ãããã¨ãã§ãã¾ãã
人æ°ã®ããã½ãªã¥ã¼ã·ã§ã³ã®1ã¤ã¯ã<a href="https://github.com/democratic-csi/democratic-csi">democratic-csi</a>ãã©ã¤ãã¼ã使ç¨ãã<a href="https://www.truenas.com/">TrueNAS</a>ã§ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-local.svg"
alt="ã³ã³ãã¥ã¼ããã¼ãä¸ã§å®è¡ããããã¼ã«ã«ãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³"/> <figcaption>
<p>ã³ã³ãã¥ã¼ããã¼ãä¸ã§å®è¡ããããã¼ã«ã«ãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³</p>
</figcaption>
</figure>
<p>䏿¹ããã¤ãã¼ã³ã³ãã¼ã¸ãã·ã¹ãã ã¯ãå¤ãã®å ´åããã¼ã«ã«ã¹ãã¬ã¼ã¸(ã¬ããªã±ã¼ã·ã§ã³ãä¸è¦ãªå ´å)ã¨ã<a href="https://rook.io/">Rook/Ceph</a>ã<a href="https://openebs.io/">OpenEBS</a>ã<a href="https://longhorn.io/">Longhorn</a>ã<a href="https://linbit.com/linstor/">LINSTOR</a>ãªã©ã®ã½ããã¦ã§ã¢ããã¡ã¤ã³ãã¹ãã¬ã¼ã¸ã使ç¨ãã¦å®è£
ããã¾ãã
ãããã¯ãå¤ãã®å ´åãKubernetesã«ç´æ¥ã¤ã³ã¹ãã¼ã«ããã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/storage-clustered.svg"
alt="ã³ã³ãã¥ã¼ããã¼ãä¸ã§å®è¡ãããã¯ã©ã¹ã¿ã¼åãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³"/> <figcaption>
<p>ã³ã³ãã¥ã¼ããã¼ãä¸ã§å®è¡ãããã¯ã©ã¹ã¿ã¼åãã¼ã¿ã¹ãã¬ã¼ã¸ã示ãå³</p>
</figcaption>
</figure>
<p>ãã¤ãã¼ã³ã³ãã¼ã¸ãã·ã¹ãã ã«ã¯å©ç¹ãããã¾ãã
ãã¨ãã°ããã¼ã¿ã®å±ææ§ã§ãã
ãã¼ã¿ããã¼ã«ã«ã«ä¿åããã¦ããå ´åããã®ãã¼ã¿ã¸ã®ã¢ã¯ã»ã¹ã¯é«éã«ãªãã¾ãã
ãããããã®ãããªã·ã¹ãã ã¯é常ã管çã¨ä¿å®ãããé£ããã¨ããæ¬ ç¹ãããã¾ãã</p>
<p>Ãnixã§ã¯ã追å ã®å¤é¨ã¹ãã¬ã¼ã¸ãè³¼å
¥ãã¦ã»ããã¢ããããå¿
è¦ãªã使ç¨ã§ããé度ã¨ãªã½ã¼ã¹ã®å©ç¨ã®ç¹ã§æé©ãªãããã«ä½¿ãã解決çãæä¾ãããã¨èãã¦ãã¾ããã
LINSTORããã®è§£æ±ºçã¨ãªãã¾ããã
ããã¯ã¨ã³ãã¨ãã¦æ¥çã§äººæ°ã®ããå®ç¸¾ãããã¯ããã¸ã¼ã§ããLVMãZFSã使ç¨ãã¦ãããã¨ã§ããã¼ã¿ãå®å
¨ã«ä¿åããã¦ãããã¨ã«èªä¿¡ãæã¦ã¾ãã
DRDBãã¼ã¹ã®ã¬ããªã±ã¼ã·ã§ã³ã¯ä¿¡ããããªãã»ã©é«éã§ãå°ãªãè¨ç®ãªã½ã¼ã¹ããæ¶è²»ãã¾ããã</p>
<p>Kubernetesä¸ã§LINSTORãã¤ã³ã¹ãã¼ã«ããã«ã¯ãPiraeusããã¸ã§ã¯ããKubeVirtã§ä½¿ç¨ã§ããæ¢è£½ã®ãããã¯ã¹ãã¬ã¼ã¸ããã§ã«æä¾ãã¦ãã¾ãã</p>
<div class="alert alert-info" role="alert"><h4 class="alert-heading">åè:</h4><a href="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/">ååã®è¨äº</a>ã§èª¬æããããã«ãTalos Linuxã使ç¨ãã¦ããå ´åã¯ãå¿
è¦ãªã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ãäºåã«æå¹ã«ãã<a href="https://github.com/piraeusdatastore/piraeus-operator/blob/v2/docs/how-to/talos.md">æé </a>ã«å¾ã£ã¦Piraeusãè¨å®ããå¿
è¦ãããã¾ãã</div>
<h2 id="kubernetesä¸ã®ä»®æ³ãã·ã³ç¨ãããã¯ã¼ã¯">Kubernetesä¸ã®ä»®æ³ãã·ã³ç¨ãããã¯ã¼ã¯</h2>
<p>Kubernetesã®ãããã¯ã¼ã¯ã¢ã¼ããã¯ãã£ã¯åããããªã¤ã³ã¿ã¼ãã§ã¼ã¹ã§ããCNIãæã£ã¦ããã«ãããããããå®éã«ã¯ããè¤éã§ãé常ãäºãã«ç´æ¥æ¥ç¶ããã¦ããªãå¤ãã®ç¬ç«ããã³ã³ãã¼ãã³ãã§æ§æããã¦ãã¾ãã
å®éãKubernetesã®ãããã¯ã¼ã¯ã¯ä»¥ä¸ã«èª¬æãã4ã¤ã®ã¬ã¤ã¤ã¼ã«åå²ã§ãã¾ãã</p>
<h3 id="ãã¼ããããã¯ã¼ã¯-ãã¼ã¿ã»ã³ã¿ã¼ãããã¯ã¼ã¯">ãã¼ããããã¯ã¼ã¯ (ãã¼ã¿ã»ã³ã¿ã¼ãããã¯ã¼ã¯)</h3>
<p>ãã¼ããç¸äºã«æ¥ç¶ããããããã¯ã¼ã¯ã§ãã
ãã®ãããã¯ã¼ã¯ã¯é常ãKubernetesã«ãã£ã¦ç®¡çããã¾ããããããããªãã¨ä½ãæ©è½ããªããããéè¦ãªãããã¯ã¼ã¯ã§ãã
å®éã«ã¯ããã¢ã¡ã¿ã«ã¤ã³ãã©ã¹ãã©ã¯ãã£ã«ã¯é常ãè¤æ°ã®ãã®ãããªãããã¯ã¼ã¯ãããã¾ãã
ä¾ãã°ããã¼ãééä¿¡ç¨ã®1ã¤ãã¹ãã¬ã¼ã¸ã¬ããªã±ã¼ã·ã§ã³ç¨ã®2ã¤ç®ãå¤é¨ã¢ã¯ã»ã¹ç¨ã®3ã¤ç®ãªã©ã§ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-nodes.svg"
alt="Kubernetesã®ãããã¯ã¼ã¯æ§æã«ããããã¼ããããã¯ã¼ã¯(ãã¼ã¿ã»ã³ã¿ã¼ãããã¯ã¼ã¯)ã®å½¹å²ã示ãå³"/> <figcaption>
<p>Kubernetesã®ãããã¯ã¼ã¯æ§æã«ããããã¼ããããã¯ã¼ã¯(ãã¼ã¿ã»ã³ã¿ã¼ãããã¯ã¼ã¯)ã®å½¹å²ã示ãå³</p>
</figcaption>
</figure>
<p>ãã¼ãéã®ç©çãããã¯ã¼ã¯ã®ç¸äºä½ç¨ã®è¨å®ã¯ãã»ã¨ãã©ã®ç¶æ³ã§Kubernetesãæ¢åã®ãããã¯ã¼ã¯ã¤ã³ãã©ã¹ãã©ã¯ãã£ãå©ç¨ããããããã®è¨äºã®ç¯å²ãè¶
ãã¦ãã¾ãã</p>
<h3 id="podãããã¯ã¼ã¯">Podãããã¯ã¼ã¯</h3>
<p>ããã¯ãCNIãã©ã°ã¤ã³ã«ãã£ã¦æä¾ããããããã¯ã¼ã¯ã§ãã
CNIãã©ã°ã¤ã³ã®å½¹å²ã¯ãã¯ã©ã¹ã¿ã¼å
ã®ãã¹ã¦ã®ã³ã³ããã¨ãã¼ãéã®ééçãªæ¥ç¶ã確ä¿ãããã¨ã§ãã
ã»ã¨ãã©ã®CNIãã©ã°ã¤ã³ã¯ãåãã¼ãã§ä½¿ç¨ããããã«IPã¢ãã¬ã¹ã®åå¥ã®ãããã¯ãå²ãå½ã¦ããããã©ãããããã¯ã¼ã¯ãå®è£
ãã¦ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-pods.svg"
alt="Kubernetesã®ãããã¯ã¼ã¯æ§æã«ãããPodãããã¯ã¼ã¯(CNIãã©ã°ã¤ã³)ã®å½¹å²ã示ãå³"/> <figcaption>
<p>Kubernetesã®ãããã¯ã¼ã¯æ§æã«ãããPodãããã¯ã¼ã¯(CNIãã©ã°ã¤ã³)ã®å½¹å²ã示ãå³</p>
</figcaption>
</figure>
<p>å®éã«ã¯ãã¯ã©ã¹ã¿ã¼ã«ã¯<a href="https://github.com/k8snetworkplumbingwg/multus-cni">Multus</a>ã«ãã£ã¦ç®¡çãããè¤æ°ã®CNIãã©ã°ã¤ã³ãæã¤ãã¨ãã§ãã¾ãã
ãã®ã¢ããã¼ãã¯ã<a href="https://www.rancher.com/">Rancher</a>ã<a href="https://www.redhat.com/en/technologies/cloud-computing/openshift/virtualization">OpenShift</a>ãªã©ã®KubeVirtãã¼ã¹ã®ä»®æ³åã½ãªã¥ã¼ã·ã§ã³ã§ãã使ç¨ããã¾ãã
ãã©ã¤ããªCNIãã©ã°ã¤ã³ã¯Kubernetesãµã¼ãã¹ã¨ã®çµ±åã«ä½¿ç¨ããã追å ã®CNIãã©ã°ã¤ã³ã¯ãã©ã¤ãã¼ããããã¯ã¼ã¯(VPC)ã®å®è£
ããã¼ã¿ã»ã³ã¿ã¼ã®ç©çãããã¯ã¼ã¯ã¨ã®çµ±åã«ä½¿ç¨ããã¾ãã</p>
<p><a href="https://github.com/containernetworking/plugins/tree/main/plugins">ããã©ã«ãã®CNIãã©ã°ã¤ã³</a>ã¯ãããªãã¸ã¾ãã¯ç©çã¤ã³ã¿ã¼ãã§ã¼ã¹ã®æ¥ç¶ã«ä½¿ç¨ã§ãã¾ãã
ããã«ãããã©ã¼ãã³ã¹ãåä¸ãããããã«è¨è¨ããã<a href="https://github.com/kubevirt/macvtap-cni">macvtap-cni</a>ãªã©ã®å°ç¨ãã©ã°ã¤ã³ãããã¾ãã</p>
<p>Kuberneteså
ã§ä»®æ³ãã·ã³ãå®è¡ããéã«æ³¨æãã¹ããã1ã¤ã®å´é¢ã¯ãç¹ã«Multusã«ãã£ã¦æä¾ãããã»ã«ã³ããªã¤ã³ã¿ã¼ãã§ã¼ã¹ã«å¯¾ããIPAM(IPã¢ãã¬ã¹ç®¡ç)ã®å¿
è¦æ§ã§ãã
ããã¯é常ãã¤ã³ãã©ã¹ãã©ã¯ãã£å
ã§åä½ããDHCPãµã¼ãã¼ã«ãã£ã¦ç®¡çããã¾ãã
ããã«ãä»®æ³ãã·ã³ã®MACã¢ãã¬ã¹ã®å²ãå½ã¦ã¯ã<a href="https://github.com/k8snetworkplumbingwg/kubemacpool">Kubemacpool</a>ã«ãã£ã¦ç®¡çã§ãã¾ãã</p>
<p>ç§ãã¡ã®ãã©ãããã©ã¼ã ã§ã¯ãå¥ã®æ¹æ³ã鏿ãã<a href="https://www.kube-ovn.io/">Kube-OVN</a>ã«å®å
¨ã«é ¼ããã¨ã«ãã¾ããã
ãã®CNIãã©ã°ã¤ã³ã¯ããã¨ãã¨OpenStackç¨ã«éçºãããOVN(Open Virtual Network)ããã¼ã¹ã«ãã¦ãã¾ãã
Kube-OVNã¯Kuberneteså
ã®ä»®æ³ãã·ã³ç¨ã®å®å
¨ãªãããã¯ã¼ã¯ã½ãªã¥ã¼ã·ã§ã³ãæä¾ãã¾ãã
IPã¨MACã¢ãã¬ã¹ã管çããããã®ã«ã¹ã¿ã ãªã½ã¼ã¹ãåãããã¼ãéã§IPã¢ãã¬ã¹ãä¿æããã¾ã¾ã©ã¤ããã¤ã°ã¬ã¼ã·ã§ã³ããµãã¼ãããããã³ãéã®ç©çãããã¯ã¼ã¯åé¢ç¨ã®VPCã®ä½æãå¯è½ã«ãã¾ãã</p>
<p>Kube-OVNã§ã¯ãåå空éå
¨ä½ã«åå¥ã®ãµãããããå²ãå½ã¦ãããMultusã使ç¨ãã¦è¿½å ã®ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã¦æ¥ç¶ãããã§ãã¾ãã</p>
<h3 id="ãµã¼ãã¹ãããã¯ã¼ã¯">ãµã¼ãã¹ãããã¯ã¼ã¯</h3>
<p>CNIãã©ã°ã¤ã³ã«å ãã¦ãKubernetesã«ã¯ãµã¼ãã¹ãããã¯ã¼ã¯ãããã¾ããããã¯ä¸»ã«ãµã¼ãã¹ãã£ã¹ã«ããªã¼ã«å¿
è¦ã§ãã
徿¥ã®ä»®æ³ãã·ã³ã¨ã¯ç°ãªããKubernetesã¯ãã¨ãã¨ã©ã³ãã ãªã¢ãã¬ã¹ã§Podãå®è¡ããããã«è¨è¨ããã¦ãã¾ãã
ããã¦ããµã¼ãã¹ãããã¯ã¼ã¯ã¯ããã©ãã£ãã¯ãå¸¸ã«æ£ããPodã«èªå°ãã便å©ãªæ½è±¡å(å®å®ããIPã¢ãã¬ã¹ã¨DNSå)ãæä¾ãã¾ãã
ä»®æ³ãã·ã³ã®IPã¯é常éçã§ããã«ããããããããã®ã¢ããã¼ãã¯ã¯ã©ã¦ãå
ã®ä»®æ³ãã·ã³ã§ãä¸è¬çã«ä½¿ç¨ããã¦ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-services.svg"
alt="Kubernetesã®ãããã¯ã¼ã¯æ§æã«ããããµã¼ãã¹ãããã¯ã¼ã¯(ãµã¼ãã¹ãããã¯ã¼ã¯ãã©ã°ã¤ã³)ã®å½¹å²ã示ãå³"/> <figcaption>
<p>Kubernetesã®ãããã¯ã¼ã¯æ§æã«ããããµã¼ãã¹ãããã¯ã¼ã¯(ãµã¼ãã¹ãããã¯ã¼ã¯ãã©ã°ã¤ã³)ã®å½¹å²ã示ãå³</p>
</figcaption>
</figure>
<p>Kubernetesã§ã®ãµã¼ãã¹ãããã¯ã¼ã¯ã®å®è£
ã¯ããµã¼ãã¹ãããã¯ã¼ã¯ãã©ã°ã¤ã³ã«ãã£ã¦å¦çããã¾ãã
æ¨æºã®å®è£
ã¯<strong>kube-proxy</strong>ã¨å¼ã°ããã»ã¨ãã©ã®ã¯ã©ã¹ã¿ã¼ã§ä½¿ç¨ããã¦ãã¾ãã
ãããæè¿ã§ã¯ããã®æ©è½ã¯CNIãã©ã°ã¤ã³ã®ä¸é¨ã¨ãã¦æä¾ããããã¨ãããã¾ãã
æãå
é²çãªå®è£
ã¯ã<a href="https://cilium.io/">Cilium</a>ããã¸ã§ã¯ãã«ãã£ã¦æä¾ããã¦ãããkube-proxyã®ä»£æ¿ã¢ã¼ãã§å®è¡ã§ãã¾ãã</p>
<p>Ciliumã¯eBPFãã¯ããã¸ã¼ã«åºã¥ãã¦ãããLinuxãããã¯ã¼ã¯ã¹ã¿ãã¯ãå¹ççã«ãªããã¼ãã§ãããããiptablesãã¼ã¹ã®å¾æ¥ã®æ¹æ³ã¨æ¯è¼ãã¦ããã©ã¼ãã³ã¹ã¨ã»ãã¥ãªãã£ãåä¸ãã¾ãã</p>
<p>å®éã«ã¯ãCiliumã¨Kube-OVNãç°¡åã«<a href="https://kube-ovn.readthedocs.io/zh-cn/stable/en/advance/with-cilium/">çµ±å</a>ãããã¨ãå¯è½ã§ãã
ããã«ãããä»®æ³ãã·ã³åãã«ã·ã¼ã ã¬ã¹ã§ãã«ãããã³ãã®ãããã¯ã¼ãã³ã°ãæä¾ããçµ±åã½ãªã¥ã¼ã·ã§ã³ãå®ç¾ãããã¨ãã§ãã¾ãã
ã¾ããé«åº¦ãªãããã¯ã¼ã¯ããªã·ã¼ã¨çµ±åããããµã¼ãã¹ãããã¯ã¼ã¯æ©è½ãæä¾ããã¾ãã</p>
<h3 id="å¤é¨ãã©ãã£ãã¯ã®ãã¼ããã©ã³ãµã¼">å¤é¨ãã©ãã£ãã¯ã®ãã¼ããã©ã³ãµã¼</h3>
<p>ãã®æ®µéã§ãKuberneteså
ã§ä»®æ³ãã·ã³ãå®è¡ããããã«å¿
è¦ãªãã®ã¯ãã¹ã¦æã£ã¦ãã¾ãã
ããããå®éã«ã¯ãã1ã¤å¿
è¦ãªãã®ãããã¾ãã
ã¯ã©ã¹ã¿ã¼ã®å¤é¨ãããµã¼ãã¹ã«ã¢ã¯ã»ã¹ããå¿
è¦ãã¾ã ãããå¤é¨ãã¼ããã©ã³ãµã¼ããããæ´çããã®ã«å½¹ç«ã¡ã¾ãã</p>
<p>ãã¢ã¡ã¿ã«ã®Kubernetesã¯ã©ã¹ã¿ã¼ã«ã¯ãããã¤ãã®å©ç¨å¯è½ãªãã¼ããã©ã³ãµã¼ãããã¾ãã
<a href="https://metallb.universe.tf/">MetalLB</a>ã<a href="https://kube-vip.io/">kube-vip</a>ã<a href="https://www.loxilb.io/">LoxiLB</a>ããããã¾ã<a href="https://docs.cilium.io/en/latest/network/lb-ipam/">Cilium</a>ã¨<a href="https://kube-ovn.readthedocs.io/zh-cn/latest/en/guide/loadbalancer-service/">Kube-OVN</a>ã«ã¯ãã«ãã¤ã³ã®å®è£
ãæä¾ããã¦ãã¾ãã</p>
<p>å¤é¨ãã¼ããã©ã³ãµã¼ã®å½¹å²ã¯ãå¤é¨ããå©ç¨å¯è½ãªå®å®ããã¢ãã¬ã¹ãæä¾ããå¤é¨ãã©ãã£ãã¯ããµã¼ãã¹ãããã¯ã¼ã¯ã«èªå°ãããã¨ã§ãã
ãµã¼ãã¹ãããã¯ã¼ã¯ãã©ã°ã¤ã³ã¯ãé常ã©ãããããPodã¨ä»®æ³ãã·ã³ã«èªå°ãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/net-loadbalancer.svg"
alt="Kubernetesã®ãããã¯ã¼ã¯æ§æã«ãããå¤é¨ãã¼ããã©ã³ãµã¼ã®å½¹å²"/> <figcaption>
<p>Kubernetesã®ãããã¯ã¼ã¯æ§æã«ãããå¤é¨ãã¼ããã©ã³ãµã¼ã®å½¹å²ã示ãå³</p>
</figcaption>
</figure>
<p>ã»ã¨ãã©ã®å ´åããã¢ã¡ã¿ã«ä¸ã§ã®ãã¼ããã©ã³ãµã¼ã®è¨å®ã¯ãã¯ã©ã¹ã¿ã¼å
ã®ãã¼ãã«ããã¼ãã£ã³ã°IPã¢ãã¬ã¹ã使ããARP/NDPã¾ãã¯BGPãããã³ã«ã使ç¨ãã¦ãããå¤é¨ã«ã¢ãã¦ã³ã¹ãããã¨ã«ãã£ã¦å®ç¾ããã¾ãã</p>
<p>ãã¾ãã¾ãªãªãã·ã§ã³ãæ¤è¨ããçµæãMetalLBãæãã·ã³ãã«ã§ä¿¡é ¼æ§ã®é«ãã½ãªã¥ã¼ã·ã§ã³ã§ããã¨å¤æãã¾ããããMetalLBã®ä½¿ç¨ã®ã¿ãå³å¯ã«å¼·å¶ãã¦ããããã§ã¯ããã¾ããã</p>
<p>ãã1ã¤ã®å©ç¹ã¯ãL2ã¢ã¼ãã§ã¯ãMetalLBã¹ãã¼ã«ã¼ãã¡ã³ãã¼ãªã¹ããããã³ã«ã使ç¨ãã¦ã©ã¤ããã¹ãã§ãã¯ãå®è¡ãããã¨ã«ããããã¤ãã¼ã®ç¶æ
ãç¶ç¶çã«ãã§ãã¯ãããã¨ã§ãã
ããã«ãããKubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ã¨ã¯ç¬ç«ãã¦æ©è½ãããã§ã¤ã«ãªã¼ãã¼ãå¯è½ã«ãªãã¾ãã</p>
<h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>ããã¾ã§ããKubernetesã«ãããä»®æ³åãã¹ãã¬ã¼ã¸ããããã¯ã¼ã¯ã®æ¦è¦ã«ãªãã¾ãã
ããã§åãä¸ãããã¯ããã¸ã¼ã¯ã<a href="https://github.com/aenix-io/cozystack">Cozystack</a>ãã©ãããã©ã¼ã ã§å©ç¨å¯è½ã§ãããå¶éãªãã試ãããã ããããäºåã«è¨å®ããã¦ãã¾ãã</p>
<p><a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/">次ã®è¨äº</a>ã§ã¯ããã®ä¸ã«ãã¿ã³ãã¯ãªãã¯ããã ãã§ãå®å
¨ã«æ©è½ããKubernetesã¯ã©ã¹ã¿ã¼ã®ãããã¸ã§ãã³ã°ãã©ã®ããã«å®è£
ã§ãããã詳ãã説æãã¾ãã</p>
- DIY: Kubernetesã§èªåã ãã®ã¯ã©ã¦ããæ§ç¯ããã(ãã¼ã1)https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/Fri, 05 Apr 2024 07:30:00 +0000https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/
<p>Ãnixã§ã¯ãKubernetesã«å¯¾ããæ·±ãæçããããè¿ããã¡ã«ãã¹ã¦ã®ææ°ãã¯ããã¸ã¼ãKubernetesã®é©ãã¹ããã¿ã¼ã³ãæ´»ç¨ãå§ãããã¨ã夢è¦ã¦ãã¾ãã
èªåã ãã®ã¯ã©ã¦ããæ§ç¯ãããã¨ãèãããã¨ã¯ããã¾ãããï¼ãã£ã¨èãããã¨ãããã§ãããã
ããããå¿«é©ãªKubernetesã¨ã³ã·ã¹ãã ãé¢ãããã¨ãªããææ°ã®ãã¯ããã¸ã¼ã¨ã¢ããã¼ãã®ã¿ã使ã£ã¦ãããå®ç¾ãããã¨ã¯å¯è½ã§ããããï¼
Cozystackã®éçºã«ãããç§ãã¡ã®çµé¨ã¯ããã®ç¹ãæ·±ãæãä¸ããå¿
è¦ãããã¾ããã
èªåã ãã®ã¯ã©ã¦ããæ§ç¯ãããã¨ãèãããã¨ã¯ããã¾ãããï¼</p>
<p>Kubernetesã¯ãã®ç®çã®ããã«è¨è¨ããããã®ã§ã¯ãªãããã¢ã¡ã¿ã«ãµã¼ãã¼ç¨ã«OpenStackã使ç¨ããæå³ããã¨ããã«ãã®å
é¨ã§Kubernetesãå®è¡ããã°ããã®ã§ã¯ãªããã¨ä¸»å¼µãã人ãããããããã¾ããã
ãããããããããã¨ã§ãåã«è²¬ä»»ãããªãã®æããOpenStack管çè
ã®æã«ç§»ã£ãã ãã§ãã
ããã«ãããå°ãªãã¨ã1ã¤ã®å·¨å¤§ã§è¤éãªã·ã¹ãã ãã¨ã³ã·ã¹ãã ã«è¿½å ããããã¨ã«ãªãã¾ãã</p>
<p>ãªãç©äºãè¤éã«ããã®ã§ããããï¼
çµå±ã®ã¨ãããKubernetesã«ã¯ããã³ãç¨ã®Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ããããã«å¿
è¦ãªãã®ããã¹ã¦æã£ã¦ãã¾ãã</p>
<p>Kubernetesããã¼ã¹ã«ããã¯ã©ã¦ããã©ãããã©ã¼ã ã®éçºã«ãããç§ãã¡ã®çµé¨ãå
±æãããã¨æãã¾ãã
ç§ãã¡èªèº«ã使ç¨ãã¦ãããããªãã®æ³¨ç®ã«å¤ããã¨ä¿¡ãã¦ãããªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ããç´¹ä»ãã¾ãã</p>
<p>ãã®ä¸é£ã®è¨äºã§ã¯ããªã¼ãã³ã½ã¼ã¹ã®ãã¯ããã¸ã¼ã®ã¿ã使ç¨ãã¦ããã¢ã¡ã¿ã«ãã管çãããKubernetesãæºåããæ¹æ³ã«ã¤ãã¦ã®ç§ãã¡ã®ç©èªããä¼ããã¾ãã
ãã¼ã¿ã»ã³ã¿ã¼ã®æºåãä»®æ³ãã·ã³ã®å®è¡ããããã¯ã¼ã¯ã®åé¢ããã©ã¼ã«ããã¬ã©ã³ããªã¹ãã¬ã¼ã¸ã®ã»ããã¢ããã¨ãã£ãåºæ¬çãªã¬ãã«ãããåçãªããªã¥ã¼ã ã®ãããã¸ã§ãã³ã°ããã¼ããã©ã³ãµã¼ããªã¼ãã¹ã±ã¼ãªã³ã°ãåããæ¬æ ¼çãªKubernetesã¯ã©ã¹ã¿ã¼ã®ãããã¸ã§ãã³ã°ã¾ã§ãæ±ãã¾ãã</p>
<p>ãã®è¨äºãããããã¤ãã®ãã¼ãã§æ§æãããã·ãªã¼ãºãéå§ãã¾ã:</p>
<ul>
<li><strong>ãã¼ã1</strong>: èªåã®ã¯ã©ã¦ãã®åºç¤ãæºåããããã¢ã¡ã¿ã«ä¸ã§ã®Kubernetesã®æºåã¨éç¨ã«ããã課é¡ãããã³ã¤ã³ãã©ã¹ãã©ã¯ãã£ããããã¸ã§ãã³ã°ããããã®æ¢æã®ã¬ã·ãã</li>
<li><strong>ãã¼ã2</strong>: ãããã¯ã¼ã¯ãã¹ãã¬ã¼ã¸ãä»®æ³åãKubernetesãä»®æ³ãã·ã³èµ·åã®ããã®ãã¼ã«ã«ããæ¹æ³ã¨ãã®ããã«å¿
è¦ãªãã®ã</li>
<li><strong>ãã¼ã3</strong>: Cluster APIã¨ããã¿ã³ãæ¼ãã ãã§Kubernetesã¯ã©ã¹ã¿ã¼ã®ãããã¸ã§ãã³ã°ãéå§ããæ¹æ³ããªã¼ãã¹ã±ã¼ãªã³ã°ãããªã¥ã¼ã ã®åçãããã¸ã§ãã³ã°ããã¼ããã©ã³ãµã¼ã®ä»çµã¿ã</li>
</ul>
<p>ãã¾ãã¾ãªãã¯ããã¸ã¼ãã§ããã ãç¬ç«ãã¦èª¬æãããã¨æãã¾ãããåæã«ãç§ãã¡ã®çµé¨ã¨ããªããã解決çã«è³ã£ãã®ããå
±æãã¾ãã</p>
<p>ã¾ããKubernetesã®ä¸»ãªå©ç¹ã¨ããããã¯ã©ã¦ããªã½ã¼ã¹ã®ä½¿ç¨ã¸ã®ã¢ããã¼ããã©ã®ããã«å¤ããããçè§£ãã¾ãããã</p>
<p>ã¯ã©ã¦ãã¨ãã¢ã¡ã¿ã«ã§ã¯ãKubernetesã®ä½¿ãæ¹ãç°ãªããã¨ãçè§£ãããã¨ãéè¦ã§ãã</p>
<h2 id="ã¯ã©ã¦ãä¸ã®kubernetes">ã¯ã©ã¦ãä¸ã®Kubernetes</h2>
<p>ã¯ã©ã¦ãä¸ã§Kubernetesãéç¨ããå ´åãæ°¸ç¶ããªã¥ã¼ã ãã¯ã©ã¦ããã¼ããã©ã³ãµã¼ããã¼ãã®ãããã¸ã§ãã³ã°ããã»ã¹ãæ°ã«ããå¿
è¦ã¯ããã¾ããã
ãããã¯ãã¹ã¦ãKubernetesãªãã¸ã§ã¯ãã®å½¢å¼ã§ããªãã®ãªã¯ã¨ã¹ããåãå
¥ããã¯ã©ã¦ããããã¤ãã¼ã«ãã£ã¦å¦çããã¾ãã
ã¤ã¾ãããµã¼ãã¼å´ã¯å®å
¨ã«ããªãããé ããã¦ãããã¯ã©ã¦ããããã¤ãã¼ãã©ã®ããã«æ£ç¢ºã«å®è£
ãã¦ããããç¥ãå¿
è¦ã¯ããã¾ããã
ããã¯ããªãã®è²¬ä»»ç¯å²ã§ã¯ãªãããã§ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/cloud.svg"
alt="ã¯ã©ã¦ãä¸ã®Kubernetesã示ãå³ããã¼ããã©ã³ã·ã³ã°ã¨ã¹ãã¬ã¼ã¸ã¯ã¯ã©ã¹ã¿ã¼ã®å¤é¨ã§è¡ããã¦ãã¾ã"/> <figcaption>
<p>ã¯ã©ã¦ãä¸ã®Kubernetesã示ãå³ããã¼ããã©ã³ã·ã³ã°ã¨ã¹ãã¬ã¼ã¸ã¯ã¯ã©ã¹ã¿ã¼ã®å¤é¨ã§è¡ããã¦ãã¾ã</p>
</figcaption>
</figure>
<p>Kubernetesã¯ãã©ãã§ãåãããã«æ©è½ãã便å©ãªæ½è±¡åãæä¾ãã¦ãããããããããã¯ã©ã¦ãã®Kubernetesä¸ã«ã¢ããªã±ã¼ã·ã§ã³ããããã¤ã§ãã¾ãã</p>
<p>ã¯ã©ã¦ãã§ã¯ãKubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ãä»®æ³ãã·ã³ãæ°¸ç¶ããªã¥ã¼ã ããã¼ããã©ã³ãµã¼ãªã©ãããã¤ãã®åå¥ã®ã¨ã³ãã£ãã£ãæã¤ãã¨ãé常ã«ä¸è¬çã§ãã
ãããã®ã¨ã³ãã£ãã£ã使ç¨ãããã¨ã§ãé«åº¦ã«åçãªç°å¢ã使ã§ãã¾ãã</p>
<p>Kubernetesã®ãããã§ãä»®æ³ãã·ã³ã¯ä»ãã¯ã©ã¦ããªã½ã¼ã¹ãå©ç¨ããããã®åãªãã¦ã¼ãã£ãªãã£ã¨ã³ãã£ãã£ã¨ãã¦ã®ã¿è¦ãããããã«ãªãã¾ããã
ãã¯ãä»®æ³ãã·ã³ã®ä¸ã«ãã¼ã¿ãä¿åãããã¨ã¯ããã¾ããã
ä»®æ³ãã·ã³ããã¹ã¦åé¤ãã¦ãã¢ããªã±ã¼ã·ã§ã³ãå£ããã¨ãªãå使ã§ãã¾ãã
Kubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ã¯ãã¯ã©ã¹ã¿ã¼å
ã§ä½ãå®è¡ãããã¹ããã«ã¤ãã¦ã®æ
å ±ãä¿æãç¶ãã¾ãã
ãã¼ããã©ã³ãµã¼ã¯ãæ°ãããã¼ãã«ãã©ãã£ãã¯ãéä¿¡ããããã«ã¨ã³ããã¤ã³ãã夿´ããã ãã§ãã¯ã¼ã¯ãã¼ãã«ãã©ãã£ãã¯ãéä¿¡ãç¶ãã¾ãã
ããã¦ããã¼ã¿ã¯ã¯ã©ã¦ããæä¾ããå¤é¨ã®æ°¸ç¶ããªã¥ã¼ã ã«å®å
¨ã«ä¿åããã¾ãã</p>
<p>ãã®ã¢ããã¼ãã¯ãã¯ã©ã¦ãã§Kubernetesã使ç¨ããéã®åºæ¬ã§ãã
ãã®çç±ã¯ããªãæç½ã§ãã
ã·ã¹ãã ãåç´ã§ããã»ã©å®å®æ§ãé«ããªãããã®ã·ã³ãã«ãã®ããã«ã¯ã©ã¦ãã§Kubernetesã鏿ããã®ã§ãã</p>
<h2 id="ãã¢ã¡ã¿ã«ä¸ã®kubernetes">ãã¢ã¡ã¿ã«ä¸ã®Kubernetes</h2>
<p>ã¯ã©ã¦ãã§Kubernetesã使ç¨ãããã¨ã¯æ¬å½ã«ç°¡åã§ä¾¿å©ã§ããããã¢ã¡ã¿ã«ã¸ã®ã¤ã³ã¹ãã¼ã«ã«ã¤ãã¦ã¯åããã¨ãè¨ãã¾ããã
ãã¢ã¡ã¿ã«ã®ä¸çã§ã¯ãKubernetesã¯éã«é常ã«è¤éã«ãªãã¾ãã
ã¾ãããããã¯ã¼ã¯å
¨ä½ãããã¯ã¨ã³ãã¹ãã¬ã¼ã¸ãã¯ã©ã¦ããã©ã³ãµã¼ãªã©ã¯ãé常ãã¯ã©ã¹ã¿ã¼ã®å¤é¨ã§ã¯ãªãå
é¨ã§å®è¡ãããããã§ãã
ãã®çµæããã®ãããªã·ã¹ãã ã¯æ´æ°ã¨ä¿å®ãã¯ããã«é£ãããªãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/baremetal.svg"
alt="ãã¢ã¡ã¿ã«ä¸ã®Kubernetesã示ãå³ããã¼ããã©ã³ã·ã³ã°ã¨ã¹ãã¬ã¼ã¸ã¯ã¯ã©ã¹ã¿ã¼ã®å
é¨ã§è¡ããã¦ãã¾ã"/> <figcaption>
<p>ãã¢ã¡ã¿ã«ä¸ã®Kubernetesã示ãå³ããã¼ããã©ã³ã·ã³ã°ã¨ã¹ãã¬ã¼ã¸ã¯ã¯ã©ã¹ã¿ã¼ã®å
é¨ã§è¡ããã¦ãã¾ã</p>
</figcaption>
</figure>
<p>ãèªèº«ã§å¤æãã¦ã¿ã¦ãã ããã
ã¯ã©ã¦ãã§ã¯ãé常ããã¼ããæ´æ°ããããã«ä»®æ³ãã·ã³ãåé¤ãã(ã¾ãã¯<code>kubectl delete node</code>ã使ç¨ãã)ã ãã§ãã¤ãã¥ã¼ã¿ãã«ãªã¤ã¡ã¼ã¸ã«åºã¥ãã¦æ°ãããã¼ãã使ãããã¨ããã¼ã管çãã¼ã«ã«ä»»ãããã¨ãã§ãã¾ãã
æ°ãããã¼ãã¯ã¯ã©ã¹ã¿ã¼ã«åå ããKubernetesã®ä¸çã§é常ã«ã·ã³ãã«ã§ãã使ããããã¿ã¼ã³ã«å¾ã£ã¦ããã¼ãã¨ãã¦ããã®ã¾ã¾åä½ããã¾ãã
å¤ãã®ã¯ã©ã¹ã¿ã¼ã§ã¯ãå®ä¾¡ãªã¹ãããã¤ã³ã¹ã¿ã³ã¹ãå©ç¨ã§ãããããæ°åãã¨ã«æ°ããä»®æ³ãã·ã³ããªã¼ãã¼ãã¦ãã¾ãã
ããããç©çãµã¼ãã¼ã使ç¨ãã¦ããå ´åã¯ãç°¡åã«åé¤ãã¦å使ãããã¨ã¯ã§ãã¾ããã
ã¾ããç©çãµã¼ãã¼ã¯ã¯ã©ã¹ã¿ã¼ãµã¼ãã¹ãå®è¡ãã¦ãããããã¼ã¿ãä¿åãã¦ããããããã¨ãå¤ãããããã®æ´æ°ããã»ã¹ã¯ã¯ããã«è¤éã«ãªãããã§ãã</p>
<p>ãã®åé¡ã解決ããã¢ããã¼ãã¯ãã¾ãã¾ã§ãã
kubeadmãkubesprayãk3sãè¡ããããªã¤ã³ãã¬ã¼ã¹ã¢ãããã¼ããããCluster APIã¨Metal3ãéããç©çãã¼ãã®ãããã¸ã§ãã³ã°ã®å®å
¨ãªèªååã¾ã§å¹
åºãããã¾ãã</p>
<p>ç§ã¯ãTalos Linuxãæä¾ãããã¤ããªããã¢ããã¼ããæ°ã«å
¥ã£ã¦ãã¾ãã
ãã®ã¢ããã¼ãã§ã¯ãã·ã¹ãã å
¨ä½ãåä¸ã®è¨å®ãã¡ã¤ã«ã§è¨è¿°ããã¾ãã
ãã®ãã¡ã¤ã«ã®ã»ã¨ãã©ã®ãã©ã¡ã¼ã¿ã¼ã¯ãKubernetesã³ã³ããã¼ã«ãã¬ã¼ã³ã³ã³ãã¼ãã³ãã®ãã¼ã¸ã§ã³ãå«ãããã¼ããåèµ·åã¾ãã¯å使ãããã¨ãªãé©ç¨ã§ãã¾ãã
ããã§ããKubernetesã®å®£è¨çãªæ§è³ªãæå¤§éã«ä¿æãã¦ãã¾ãã
ãã®ã¢ããã¼ãã¯ããã¢ã¡ã¿ã«ãã¼ããæ´æ°ããéã®ã¯ã©ã¹ã¿ã¼ãµã¼ãã¹ã¸ã®ä¸è¦ãªå½±é¿ãæå°éã«æãã¾ãã
ã»ã¨ãã©ã®å ´åããã¤ãã¼ã¢ãããã¼ãã®éã«ä»®æ³ãã·ã³ãç§»è¡ããããã¯ã©ã¹ã¿ã¼ãã¡ã¤ã«ã·ã¹ãã ãåæ§ç¯ãããããå¿
è¦ã¯ããã¾ããã</p>
<h2 id="å°æ¥ã®ã¯ã©ã¦ãã®åºç¤ãæºåãã">å°æ¥ã®ã¯ã©ã¦ãã®åºç¤ãæºåãã</h2>
<p>ãã¦ãèªåã ãã®ã¯ã©ã¦ããæ§ç¯ãããã¨ã«æ±ºããã¨ãã¾ãããã
ã¾ãã¯åºç¤ã¨ãªãã¬ã¤ã¤ã¼ãå¿
è¦ã§ãã
ãµã¼ãã¼ã«Kubernetesãã¤ã³ã¹ãã¼ã«ããæ¹æ³ã ãã§ãªãããããã©ã®ããã«æ´æ°ããç¶æãã¦ãããã«ã¤ãã¦ãèããå¿
è¦ãããã¾ãã
ã«ã¼ãã«ã®æ´æ°ãå¿
è¦ãªã¢ã¸ã¥ã¼ã«ã®ã¤ã³ã¹ãã¼ã«ãããã±ã¼ã¸ãã»ãã¥ãªãã£ããããªã©ã«ã¤ãã¦ãèããªããã°ãªããªããã¨ãèæ
®ãã¦ãã ããã
ã¯ã©ã¦ãä¸ã®æ¢è£½ã®Kubernetesã使ç¨ããéã«æ°ã«ããå¿
è¦ã®ãªããã¨ãã¯ããã«å¤ãèããªããã°ãªãã¾ããã</p>
<p>ãã¡ãããUbuntuãDebianã®ãããªæ¨æºçãªãã£ã¹ããªãã¥ã¼ã·ã§ã³ã使ç¨ã§ãã¾ãããFlatcar Container LinuxãFedora CoreãTalos Linuxã®ãããªç¹æ®ãªãã£ã¹ããªãã¥ã¼ã·ã§ã³ãæ¤è¨ãããã¨ãã§ãã¾ãã
ããããã«é·æã¨çæãããã¾ãã</p>
<p>ç§ãã¡ã®ãã¨ã§ããï¼
Ãnixã§ã¯ãZFSãDRBDãOpenvSwitchãªã©ã®ããªãç¹æ®ãªã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ã使ç¨ãã¦ããã®ã§ãå¿
è¦ãªã¢ã¸ã¥ã¼ã«ããã¹ã¦äºåã«å«ãã ã·ã¹ãã ã¤ã¡ã¼ã¸ãå½¢æããæ¹æ³ãé¸ã³ã¾ããã
ãã®å ´åãTalos Linuxãç§ãã¡ã«ã¨ã£ã¦æã便å©ã§ãããã¨ããããã¾ããã
ãã¨ãã°ã次ã®ãããªè¨å®ã§ãå¿
è¦ãªã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ããã¹ã¦å«ãã·ã¹ãã ã¤ã¡ã¼ã¸ãæ§ç¯ããã®ã«ååã§ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">arch</span>:<span style="color:#bbb"> </span>amd64<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">platform</span>:<span style="color:#bbb"> </span>metal<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">secureboot</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">version</span>:<span style="color:#bbb"> </span>v1.6.4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">input</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kernel</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">path</span>:<span style="color:#bbb"> </span>/usr/install/amd64/vmlinuz<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">initramfs</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">path</span>:<span style="color:#bbb"> </span>/usr/install/amd64/initramfs.xz<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">baseInstaller</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/installer:v1.6.4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">systemExtensions</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/amd-ucode:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/amdgpu-firmware:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/bnx2-bnx2x:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/i915-ucode:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/intel-ice-firmware:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/intel-ucode:20231114<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/qlogic-firmware:20240115<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/drbd:9.2.6-v1.6.4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">imageRef</span>:<span style="color:#bbb"> </span>ghcr.io/siderolabs/zfs:2.1.14-v1.6.4<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">output</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>installer<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">outFormat</span>:<span style="color:#bbb"> </span>raw<span style="color:#bbb">
</span></span></span></code></pre></div><p><code>docker</code>ã³ãã³ãã©ã¤ã³ãã¼ã«ã使ç¨ãã¦ãOSã¤ã¡ã¼ã¸ããã«ããã¾ã:</p>
<pre tabindex="0"><code>cat config.yaml | docker run --rm -i -v /dev:/dev --privileged "ghcr.io/siderolabs/imager:v1.6.4" -
</code></pre><p>ãã®çµæãå¿
è¦ãªãã®ããã¹ã¦å«ã¾ããDockerã³ã³ããã¤ã¡ã¼ã¸ãå¾ããã¾ãã
ãã®ã¤ã¡ã¼ã¸ã使ç¨ãã¦ããµã¼ãã¼ã«Talos Linuxãã¤ã³ã¹ãã¼ã«ã§ãã¾ãã
åããã¨ãã§ãã¾ãããã®ã¤ã¡ã¼ã¸ã«ã¯ãå¿
è¦ãªãã¹ã¦ã®ãã¡ã¼ã ã¦ã§ã¢ã¨ã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ãå«ã¾ãã¾ãã</p>
<p>ããããæ°ããå½¢æãããã¤ã¡ã¼ã¸ããã¼ãã«ã©ã®ããã«é
ä¿¡ãããã¨ããåé¡ãçºçãã¾ãã</p>
<p>ãã°ããã®éãPXEãã¼ãã®ã¢ã¤ãã¢ã«ã¤ãã¦èãã¦ãã¾ããã
ãã¨ãã°ã2å¹´åã«<a href="https://kubernetes.io/blog/2021/12/22/kubernetes-in-kubernetes-and-pxe-bootable-server-farm/">è¨äº</a>ãæ¸ãã<strong>Kubefarm</strong>ããã¸ã§ã¯ãã¯ãå®å
¨ã«ãã®ã¢ããã¼ãã使ç¨ãã¦æ§ç¯ããã¾ããã
ãããæ®å¿µãªãããä»ã®ã¯ã©ã¹ã¿ã¼ãä¿æããæåã®è¦ªã¯ã©ã¹ã¿ã¼ããããã¤ããã®ã«å½¹ç«ã¤ããã§ã¯ããã¾ããã
ããã§ä»åãPXEã¢ããã¼ãã使ç¨ãã¦åããã¨ãè¡ãã®ã«å½¹ç«ã¤ã½ãªã¥ã¼ã·ã§ã³ãç¨æãã¾ããã</p>
<p>åºæ¬çã«å¿
è¦ãªã®ã¯ãã³ã³ããå
ã§ä¸æçãª<strong>DHCP</strong>ã¨<strong>PXE</strong>ãµã¼ãã¼ã<a href="https://cozystack.io/docs/get-started/">å®è¡ãã</a>ãã¨ã ãã§ãã
ããããã°ããã¼ãã¯ããªãã®ã¤ã¡ã¼ã¸ããèµ·åããDebianãã¼ã¹ã®ç°¡åãªã¹ã¯ãªããã使ç¨ãã¦ããã¼ãã®ãã¼ãã¹ãã©ããã«å½¹ç«ã¦ããã¨ãã§ãã¾ãã</p>
<p><a href="https://asciinema.org/a/627123"><img alt="asciicast" src="https://kubernetes.io/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-1/asciicast.svg"></a></p>
<p><code>talos-bootstrap</code>ã¹ã¯ãªããã®<a href="https://github.com/aenix-io/talos-bootstrap/">ã½ã¼ã¹ã³ã¼ã</a>ã¯GitHubã§å
¥æã§ãã¾ãã</p>
<p>ãã®ã¹ã¯ãªããã使ç¨ããã¨ããã¢ã¡ã¿ã«ä¸ã«5åã§Kubernetesããããã¤ããããã«ã¢ã¯ã»ã¹ããããã®kubeconfigãåå¾ã§ãã¾ãã
ããããã¾ã å¤ãã®æªè§£æ±ºã®åé¡ãæ®ã£ã¦ãã¾ãã</p>
<h2 id="ã·ã¹ãã ã³ã³ãã¼ãã³ãã®é
ä¿¡">ã·ã¹ãã ã³ã³ãã¼ãã³ãã®é
ä¿¡</h2>
<p>ãã®æ®µéã§ã¯ããã¾ãã¾ãªã¯ã¼ã¯ãã¼ããå®è¡ã§ããKubernetesã¯ã©ã¹ã¿ã¼ããã§ã«æã«å
¥ã£ã¦ãã¾ãã
ããããã¾ã å®å
¨ã«æ©è½ãã¦ããããã§ã¯ããã¾ããã
ã¤ã¾ãããããã¯ã¼ã¯ã¨ã¹ãã¬ã¼ã¸ãè¨å®ããå¿
è¦ãããã ãã§ãªããä»®æ³ãã·ã³ãå®è¡ããããã®KubeVirtããç£è¦ã¹ã¿ãã¯ããã®ä»ã®ã·ã¹ãã å
¨ä½ã®ã³ã³ãã¼ãã³ããªã©ãå¿
è¦ãªã¯ã©ã¹ã¿ã¼æ¡å¼µæ©è½ãã¤ã³ã¹ãã¼ã«ããå¿
è¦ãããã¾ãã</p>
<p>徿¥ãããã¯<strong>Helmãã£ã¼ã</strong>ãã¯ã©ã¹ã¿ã¼ã«ã¤ã³ã¹ãã¼ã«ãããã¨ã§è§£æ±ºããã¦ãã¾ãã
ãã¼ã«ã«ã§<code>helm install</code>ã³ãã³ããå®è¡ãããã¨ã§å®ç¾ã§ãã¾ãããã¢ãããã¼ãã追跡ãããå ´åããè¤æ°ã®ã¯ã©ã¹ã¿ã¼ãæã£ã¦ãã¦ããããåä¸ã«ä¿ã¡ããå ´åããã®ã¢ããã¼ãã¯ä¸ä¾¿ã«ãªãã¾ãã
å®éã«ã¯ãããã宣è¨çã«è¡ãæ¹æ³ã¯ããããããã¾ãã
ããã解決ããã«ã¯ãæé«ã®GitOpsãã©ã¯ãã£ã¹ã使ç¨ãããã¨ããå§ããã¾ãã
ã¤ã¾ããArgoCDãFluxCDã®ãããªãã¼ã«ãæãã¾ãã</p>
<p>ArgoCDã¯ã°ã©ãã£ã«ã«ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ä¸å¤®ã³ã³ããã¼ã«ãã¬ã¼ã³ãåãã¦ããããéçºç®çã«ã¯ä¾¿å©ã§ããã䏿¹ã§FluxCDã¯Kubernetesãã£ã¹ããªãã¥ã¼ã·ã§ã³ã®ä½æã«ããé©ãã¦ãã¾ãã
FluxCDã使ç¨ããã¨ãã©ã®ãã£ã¼ããã©ã®ãã©ã¡ã¼ã¿ã¼ã§èµ·åãã¹ãããæå®ããä¾åé¢ä¿ãè¨è¿°ã§ãã¾ãã
ããããã°ãFluxCDããã¹ã¦ãå¦çãã¦ããã¾ãã</p>
<p>æ°ãã使ããã¯ã©ã¹ã¿ã¼ã«FluxCDã1åã¤ã³ã¹ãã¼ã«ããé©åã«è¨å®ãããã¨ããå§ããã¾ãã
ããã«ãããFluxCDã¯å¿
è¦ä¸å¯æ¬ ãªã³ã³ãã¼ãã³ãããã¹ã¦èªåçã«ãããã¤ã§ããããã«ãªããã¯ã©ã¹ã¿ã¼ãç®çã®ç¶æ
ã«ã¢ããã°ã¬ã¼ãã§ãã¾ãã
ãã¨ãã°ãç§ãã¡ã®ãã©ãããã©ã¼ã ãã¤ã³ã¹ãã¼ã«ããã¨ãã·ã¹ãã ã³ã³ãã¼ãã³ãã¨ã¨ãã«æ¬¡ã®äºåè¨å®ãããHelmãã£ã¼ãã表示ããã¾ã:</p>
<pre tabindex="0"><code>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
</code></pre><h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>çµæã¨ãã¦ã誰ã«ã§ãæä¾ã§ããé«ãåç¾æ§ãæã¤ç°å¢ãå®ç¾ã§ããæå³ããã¨ããã«åä½ãããã¨ããããã¾ãã
ããã¯ãå®éã«<a href="https://github.com/aenix-io/cozystack">Cozystack</a>ããã¸ã§ã¯ããè¡ã£ã¦ãããã¨ã§ãããããªãèªèº«ãç¡æã§è©¦ããã¨ãã§ãã¾ãã</p>
<p>次ã®è¨äºã§ã¯ã<a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-2/">ä»®æ³ãã·ã³ãå®è¡ããããã®Kubernetesã®æºåæ¹æ³</a>ã¨<a href="https://kubernetes.io/ja/blog/2024/04/05/diy-create-your-own-cloud-with-kubernetes-part-3/">ãã¿ã³ãã¯ãªãã¯ããã ãã§Kubernetesã¯ã©ã¹ã¿ã¼ãå®è¡ããæ¹æ³</a>ã«ã¤ãã¦èª¬æãã¾ãã
ãæå¾
ãã ããããã£ã¨é¢ç½ãã¯ãã§ãï¼</p>
- Kubernetes v1.30ããã£ã¨è¦ãhttps://kubernetes.io/ja/blog/2024/03/12/kubernetes-1-30-upcoming-changes/Tue, 12 Mar 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/03/12/kubernetes-1-30-upcoming-changes/
<h2 id="kubernetes-v1-30ã®ããããã夿´ç¹ããã£ã¨è¦ã">Kubernetes v1.30ã®ããããã夿´ç¹ããã£ã¨è¦ã</h2>
<p>æ°ããå¹´ã§ãããæ°ããKubernetesã®ãªãªã¼ã¹ã§ãã
ãªãªã¼ã¹ãµã¤ã¯ã«ã®ååãçµäºããv1.30ã§ã¯ããªãã®æ°ã®è峿·±ããããããæ©è½å¼·åãè¡ããã¾ãã
ã¢ã«ãã¡çã®çæ°ããæ©è½ãããå®å®çã¸ã¨é²ãæ¢åã®æ©è½ãããã¦å¾
æã®æ¹è¯ã¾ã§ããã®ãªãªã¼ã¹ã«ã¯èª°ããæ³¨ç®ãããã®ãããã¾ãï¼</p>
<p>æ£å¼ãªãªã¼ã¹ã¾ã§ã®ã¤ãªãã¨ãã¦ããã®ãªãªã¼ã¹ã§æã
ããã£ã¨ãæå¾
ãã¦ããæ©è½å¼·åããã£ã¨è¦ãã¦ã¿ã¾ãããï¼</p>
<h2 id="kubernetes-v1-30ã®ä¸»ãªå¤æ´ç¹">Kubernetes v1.30ã®ä¸»ãªå¤æ´ç¹</h2>
<h3 id="åçãªãªã½ã¼ã¹å²ãå½ã¦ã®ããã®æ§é åãã©ã¡ã¼ã¿ã¼-kep-4381-https-kep-k8s-io-4381">åçãªãªã½ã¼ã¹å²ãå½ã¦ã®ããã®æ§é åãã©ã¡ã¼ã¿ã¼ (<a href="https://kep.k8s.io/4381">KEP-4381</a>)</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/dynamic-resource-allocation/">åçãªãªã½ã¼ã¹å²ãå½ã¦(DRA)</a>ã¯v1.26ã§ã¢ã«ãã¡æ©è½ã¨ãã¦Kubernetesã«è¿½å ããã¾ããã
ããã¯ããµã¼ããã¼ãã£ãªã½ã¼ã¹ã¸ã®ã¢ã¯ã»ã¹ãè¦æ±ããããã®å¾æ¥ã®ããã¤ã¹ãã©ã°ã¤ã³APIã«ä»£ãããã®ãå®ç¾©ãã¦ãã¾ãã
è¨è¨ä¸ãåçãªãªã½ã¼ã¹å²ãå½ã¦(DRA)ã§ã¯ãKubernetesã®ä¸å¿é¨ã«å®å
¨ã«ä¸éæãªãªã½ã¼ã¹ã®ãã©ã¡ã¼ã¿ã¼ã使ç¨ããã¾ãã
ãã®ã¢ããã¼ãã¯ãã¯ã©ã¹ã¿ã¼ãªã¼ãã¹ã±ã¼ã©ã¼ããPodã®ã°ã«ã¼ã(Jobã¹ã±ã¸ã¥ã¼ã©ã¼ãªã©)ã«å¯¾ãã¦æ±ºå®ãä¸ãå¿
è¦ãããä¸ä½ã³ã³ããã¼ã©ã¼ã«ã¨ã£ã¦åé¡ã¨ãªãã¾ãã
æéçµéã«ä¼´ãè¦æ±(claim)ã®å²ãå½ã¦ãå²ãå½ã¦è§£é¤ã®å¹æãã·ãã¥ã¬ã¼ãã§ããªãã®ã§ãã
ãããè¡ãããã®æ
å ±ã¯ããµã¼ããã¼ãã£ã®DRAãã©ã¤ãã¼ã®ã¿ãä¿æãã¦ãã¾ãã</p>
<p>åçãªãªã½ã¼ã¹å²ãå½ã¦(DRA)ã®æ§é åãã©ã¡ã¼ã¿ã¼ã¯ããããã®è¦æ±(claim)ãã©ã¡ã¼ã¿ã¼ã®ä¸éæããããå°ãªããã¬ã¼ã ã¯ã¼ã¯ãæ§ç¯ãããã¨ã«ãã£ã¦ããã®åé¡ã«å¯¾å¦ããããã®å¾æ¥ã®å®è£
ã®æ¡å¼µã«ãªãã¾ãã
ãã¹ã¦ã®è¦æ±(claim)ãã©ã¡ã¼ã¿ã¼ã®ã»ãã³ãã£ã¯ã¹ãèªåã§å¦çãã代ããã«ããã©ã¤ãã¼ã¯Kubernetesã«ãã£ã¦äºåå®ç¾©ãããç¹å®ã®"æ§é åã¢ãã«"ã使ç¨ãã¦ãªã½ã¼ã¹ãè¨è¿°ãã管çã§ãã¾ãã
ããã«ããããã®"æ§é åã¢ãã«"ãèªèãã¦ããã³ã³ãã¼ãã³ãã¯ããµã¼ããã¼ãã£ã®ã³ã³ããã¼ã©ã¼ã«å§è¨ãããã¨ãªãããããã®ãªã½ã¼ã¹ã«é¢ããæææ±ºå®ãè¡ãã¾ãã
ãã¨ãã°ãã¹ã±ã¸ã¥ã¼ã©ã¼ã¯åçãªãªã½ã¼ã¹å²ãå½ã¦(DRA)ãã©ã¤ãã¼ã¨ããåããè¡ããã¨ãªããè¦æ±(claim)ãè¿
éã«å²ãå½ã¦ããã¨ãã§ãã¾ãã
ä»åã®ãªãªã¼ã¹ã§ã¯ããã¾ãã¾ãª"æ§é åã¢ãã«"ãå®ç¾ããããã«å¿
è¦ãªãã¬ã¼ã ã¯ã¼ã¯ã®å®ç¾©ã¨"ååä»ããªã½ã¼ã¹"ã¢ãã«ã®å®è£
ãä¸å¿ã«ä½æ¥ãè¡ããã¾ããã
ãã®ã¢ãã«ã§ã¯ãåã
ã®ãªã½ã¼ã¹ã»ã¤ã³ã¹ã¿ã³ã¹ããªã¹ãã¢ãããããã¨ãã§ãã徿¥ã®ããã¤ã¹ãã©ã°ã¤ã³APIã¨æ¯è¼ãã¦ã屿§ã«ãã£ã¦ãããã®ã¤ã³ã¹ã¿ã³ã¹ãåå¥ã«é¸æããæ©è½ã追å ããã¦ãã¾ãã</p>
<h3 id="nodeã®ã¡ã¢ãªã¹ã¯ããã®ãµãã¼ã-kep-2400-https-kep-k8s-io-2400">Nodeã®ã¡ã¢ãªã¹ã¯ããã®ãµãã¼ã (<a href="https://kep.k8s.io/2400">KEP-2400</a>)</h3>
<p>Kubernetes v1.30ã§ã¯ãLinux Nodeã«ãããã¡ã¢ãªã¹ã¯ããã®ãµãã¼ãããã·ã¹ãã ã®å®å®æ§ãåä¸ããããã¨ã«éç¹ãç½®ãã¦ããã®å使¹æ³ã«å¤§ããªå¤æ´ãå ãããã¾ããã
以åã®Kubernetesãã¼ã¸ã§ã³ã§ã¯ã<code>NodeSwap</code>ãã£ã¼ãã£ã¼ã²ã¼ãã¯ããã©ã«ãã§ç¡å¹åããã¦ãããæå¹åãããå ´åãããã©ã«ãã®åä½ã¨ãã¦<code>UnlimitedSwap</code>åä½ã使ç¨ããã¦ãã¾ããã
ããè¯ãå®å®æ§ãéæããããã«ã(Nodeã®å®å®æ§ãæãªãå¯è½æ§ã®ãã)<code>UnlimitedSwap</code>åä½ã¯v1.30ã§åé¤ããã¾ãã</p>
<p>æ´æ°ããããã¾ã ãã¼ã¿çã®Linux Nodeã§ã®ã¹ã¯ããã®ãµãã¼ãã¯ãããã©ã«ãã§å©ç¨ã§ããããã«ãªãã¾ãã
ãã ããããã©ã«ãã®åä½ã¯ã<code>NoSwap</code>(<code>UnlimitedSwap</code>ã§ã¯ãªã)ã¢ã¼ãã«è¨å®ãããNodeãå®è¡ãããã¨ã«ãªãã¾ãã
<code>NoSwap</code>ã¢ã¼ãã§ã¯ãkubeletã¯ã¹ã¯ããé åãæå¹åãããNodeã§ã®å®è¡ããµãã¼ããã¾ãããPodã¯ãã¼ã¸ãã¡ã¤ã«ãä¸å使ç¨ãã¾ããã
ãã®Nodeã§kubeletãå®è¡ããã«ã¯ã<code>--fail-swap-on=false</code>ãè¨å®ããå¿
è¦ãããã¾ãã
ãã ã大ããªå¤æ´ã¨ã¯ãã®ãã¨ã§ã¯ãªãããã1ã¤ã®ã¢ã¼ãã§ãã<code>LimitedSwap</code>ã§ãã
ãã®ã¢ã¼ãã§ã¯ãkubeletã¯å®éã«ãã®Nodeã®ãã¼ã¸ãã¡ã¤ã«ã使ç¨ããPodãä»®æ³ã¡ã¢ãªã®ä¸é¨ããã¼ã¸ã¢ã¦ãã§ããããã«ãã¾ãã
ã³ã³ãã(ããã³ãã®è¦ªPod)ã¯ã¡ã¢ãªå¶éãè¶
ãã¦ã¹ã¯ããã«ã¢ã¯ã»ã¹ãããã¨ã¯ã§ãã¾ããããå©ç¨å¯è½ãªå ´åã¯ã¹ã¯ããé åã使ç¨ã§ãã¾ãã</p>
<p>Kubernetesã®Node Special Interest Group (SIG Node)ã¯ãã¨ã³ãã¦ã¼ã¶ã¼ãè²¢ç®è
ãããã³ããåºãKubernetesã³ãã¥ããã£ããã®ãã£ã¼ãããã¯ã«åºã¥ãã¦ãæ¹è¨ãããå®è£
ã®ä½¿ç¨æ¹æ³ãçè§£ã§ããããã«ããã¥ã¡ã³ããæ´æ°ãã¾ãã</p>
<p>Kubernetesã«ãããLinux Nodeã®ã¹ã¯ããã»ãµãã¼ãã®è©³ç´°ã«ã¤ãã¦ã¯ãååã®<a href="https://kubernetes.io/blog/2023/08/24/swap-linux-beta/">ããã°è¨äº</a>ã¾ãã¯<a href="https://kubernetes.io/ja/docs/concepts/architecture/nodes/#swap-memory">Nodeã®ã¹ã¯ããã»ããã¥ã¡ã³ã</a>ãèªãã§ãã ããã</p>
<h3 id="podã§ã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã-kep-127-https-kep-k8s-io-127">Podã§ã¦ã¼ã¶ã¼åå空éã®ãµãã¼ã (<a href="https://kep.k8s.io/127">KEP-127</a>)</h3>
<p><a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/user-namespaces/">ã¦ã¼ã¶ã¼åå空é</a>ã¯ã2024å¹´1æã«å
¬éããã<a href="https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv">CVE-2024-21626</a>ãå«ãHigh/Criticalã¨è©ä¾¡ãããè¤æ°ã®CVEã鲿¢ãã¾ãã¯ç·©åããããã«ãPodãããé©åã«åé¢ããLinuxå°ç¨ã®æ©è½ã§ãã
Kubernetes 1.30ã§ã¯ãã¦ã¼ã¶ã¼åå空éã®ãµãã¼ãããã¼ã¿çã«ç§»è¡ããããªã¥ã¼ã ã®ããPodã¨ãªãPodãã«ã¹ã¿ã UID/GIDç¯å²ãªã©ããµãã¼ããããããã«ãªãã¾ããï¼</p>
<h3 id="æ§é åãããèªå¯è¨å®-kep-3221-https-kep-k8s-io-3221">æ§é åãããèªå¯è¨å® (<a href="https://kep.k8s.io/3221">KEP-3221</a>)</h3>
<p><a href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file">æ§é åãããèªå¯è¨å®</a>ã®ãµãã¼ãã¯ãã¼ã¿çã«ç§»è¡ããããã©ã«ãã§æå¹ã«ãªãã¾ãã
ãã®æ©è½ã¯ã失ææã«æç¤ºçã«æå¦ãããªã©ã®ããç´°ããªå¶å¾¡ãå¯è½ã«ããããç¹å®ã®é åºã§ãªã¯ã¨ã¹ããæ¤è¨¼ããæç¢ºã«å®ç¾©ããããã©ã¡ã¼ã¿ã¼ãæã¤è¤æ°ã®Webhookã«ããèªå¯ãã§ã¼ã³ã®ä½æãå¯è½ã«ãã¾ãã
è¨å®ãã¡ã¤ã«ã®ã¢ããã¼ãã§ã¯ããªã¯ã¨ã¹ããWebhookã¸æ¸¡ãããåã«<a href="https://kubernetes.io/docs/reference/using-api/cel/">CEL</a>ã«ã¼ã«ãæå®ãã¦äºåã«ãã£ã«ã¿ãªã³ã°ãããã¨ãå¯è½ã§ãä¸è¦ãªãªã¯ã¨ã¹ããé²ãã®ã«å½¹ç«ã¡ã¾ãã
ã¾ããè¨å®ãã¡ã¤ã«ã夿´ãããã¨ãAPIãµã¼ãã¼ã¯èªåçã«èªå¯ãã§ã¼ã³ãåèªã¿è¾¼ã¿ãã¾ãã</p>
<p><code>--authorization-config</code>ã³ãã³ãã©ã¤ã³å¼æ°ã使ç¨ãã¦ããã®èªå¯è¨å®ã¸ã®ãã¹ãæå®ããå¿
è¦ãããã¾ãã
è¨å®ãã¡ã¤ã«ã®ä»£ããã«ã³ãã³ãã©ã¤ã³ãã©ã°ã使ãç¶ãããå ´åããã®ã¾ã¾æ©è½ãç¶ãã¾ãã
è¤æ°ã®Webhookã失æããªã·ã¼ãäºåãã£ã«ã¿ã¼ã«ã¼ã«ãªã©ã®æ°ããèªå¯Webhookæ©è½ã«ã¢ã¯ã»ã¹ããã«ã¯ã<code>--authorization-config</code>ãã¡ã¤ã«ã«ãªãã·ã§ã³ãè¨è¿°ããããã«åãæ¿ãã¾ãã
Kubernetes 1.30ããã¯ãè¨å®ãã¡ã¤ã«ã®ãã©ã¼ãããããã¼ã¿æ®µéã§ããããã£ã¼ãã£ã¼ã²ã¼ããããã©ã«ãã§æå¹ã«ãªã£ã¦ããããã<code>--authorization-config</code>ãæå®ããå¿
è¦ãããã ãã§ãã
ãã¹ã¦ã®å¯è½ãªå¤ãå«ãè¨å®ä¾ã¯ã<a href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file">èªå¯ããã¥ã¡ã³ã</a>ã§æä¾ããã¦ãã¾ãã
詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/#configuring-the-api-server-using-an-authorization-config-file">èªå¯ããã¥ã¡ã³ã</a>ãèªãã§ãã ããã</p>
<h3 id="ã³ã³ãããªã½ã¼ã¹ããã¨ã«ããpodã®èªåã¹ã±ã¼ãªã³ã°-kep-1610-https-kep-k8s-io-1610">ã³ã³ãããªã½ã¼ã¹ããã¨ã«ããPodã®èªåã¹ã±ã¼ãªã³ã° (<a href="https://kep.k8s.io/1610">KEP-1610</a>)</h3>
<p><code>ContainerResource</code>ã¡ããªã¯ã¹ã«åºã¥ãæ°´å¹³Podèªåã¹ã±ã¼ãªã³ã°ã¯ãv1.30ã§å®å®çã«ç§»è¡ãã¾ãã
HorizontalPodAutoscalerã®ãã®æ°ããåä½ã«ãããPodå
¨ä½ã®ãªã½ã¼ã¹ä½¿ç¨éã§ã¯ãªããåã
ã®ã³ã³ããã®ãªã½ã¼ã¹ä½¿ç¨éã«åºã¥ãã¦èªåã¹ã±ã¼ãªã³ã°ãè¨å®ã§ããããã«ãªãã¾ãã
詳細ã«ã¤ãã¦ã¯<a href="https://kubernetes.io/blog/2023/05/02/hpa-container-resource-metric/">以åã®è¨äº</a>ãåç
§ãããã<a href="https://kubernetes.io/ja/docs/tasks/run-application/horizontal-pod-autoscale/#container-resource-metrics">ã³ã³ãããªã½ã¼ã¹ã¡ããªã¯ã¹</a>ãèªãã§ãã ããã</p>
<h3 id="ã¢ãããã·ã§ã³-ã³ã³ããã¼ã«ã«å¯¾ããcel-kep-3488-https-kep-k8s-io-3488">ã¢ãããã·ã§ã³ã»ã³ã³ããã¼ã«ã«å¯¾ããCEL (<a href="https://kep.k8s.io/3488">KEP-3488</a>)</h3>
<p>Kubernetesã®ã¢ãããã·ã§ã³ã»ã³ã³ããã¼ã«ã«Common Expression Language (CEL)ãçµ±åãããã¨ã§ãã¢ãããã·ã§ã³ã»ãªã¯ã¨ã¹ããè©ä¾¡ãããããã¤ãããã¯ã§è¡¨ç¾åè±ããªæ¹æ³ãå°å
¥ããã¾ãã
ãã®æ©è½ã«ãããè¤éã§ããç´°ããªããªã·ã¼ãKubernetes APIãéãã¦ç´æ¥å®ç¾©ã»é©ç¨ã§ããããã«ãªããããã©ã¼ãã³ã¹ãæè»æ§ãæãªããã¨ãªããã»ãã¥ãªãã£ã¨ã¬ããã³ã¹ã®æ©è½ãå¼·åããã¾ãã</p>
<p>CELãKubernetesã®ã¢ãããã·ã§ã³ã»ã³ã³ããã¼ã«ã«è¿½å ããããã¨ã§ãã¯ã©ã¹ã¿ã¼ç®¡çè
ã¯Webhookãã¼ã¹ã®ã¢ã¯ã»ã¹ã»ã³ã³ããã¼ã©ã¼ã«é ¼ããã¨ãªããã¯ã©ã¹ã¿ã¼ã®æã¾ããç¶æ
ãããªã·ã¼ã«å¯¾ãã¦APIãªã¯ã¨ã¹ãã®å
容ãè©ä¾¡ã§ããè¤éãªã«ã¼ã«ã使ã§ãã¾ãã
ãã®ã¬ãã«ã®å¶å¾¡ã¯ãã¯ã©ã¹ã¿ã¼éç¨ã®å¹çæ§ãã»ãã¥ãªãã£ãæ´åæ§ãç¶æããããã«æ¥µãã¦éè¦ã§ãããKubernetesç°å¢ãããå
ç¢ã«ãããã¾ãã¾ãªã¦ã¼ã¹ã±ã¼ã¹ãè¦ä»¶ã¸é©å¿ã§ããããã«ãã¾ãã
ã¢ãããã·ã§ã³ã»ã³ã³ããã¼ã«ã«CELã使ç¨ãã詳細ã«ã¤ãã¦ã¯ãValidatingAdmissionPolicyã®<a href="https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy/">APIããã¥ã¡ã³ã</a>ãåç
§ãã¦ãã ããã</p>
<p>ç§ãã¡ã¨åãããã«ãã®ãªãªã¼ã¹ã楽ãã¿ã«ãã¦ããã ããã°å¹¸ãã§ããæ°é±éå¾ã®å
¬å¼ã®ãªãªã¼ã¹è¨äºã§ããããªããã¤ã©ã¤ãããè¦éããªãï¼</p>
- CRI-O: OCIã¬ã¸ã¹ããªããã®seccompãããã¡ã¤ã«ã®é©ç¨https://kubernetes.io/ja/blog/2024/03/07/cri-o-seccomp-oci-artifacts/Thu, 07 Mar 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/03/07/cri-o-seccomp-oci-artifacts/
<p>seccompã¯ã»ãã¥ã¢ãªã³ã³ãã¥ã¼ãã£ã³ã°ã¢ã¼ããæå³ããLinuxã«ã¼ãã«ã®ãã¼ã¸ã§ã³2.6.12以éã®æ©è½ã¨ãã¦æä¾ããã¾ããã
ããã¯ãããã»ã¹ã®ç¹æ¨©ããµã³ãããã¯ã¹åããã¦ã¼ã¶ã¼ã¹ãã¼ã¹ããã«ã¼ãã«ã¸ã®å¼ã³åºããå¶éããããã«ä½¿ç¨ã§ãã¾ãã
Kubernetesã§ã¯ããã¼ãã«èªã¿è¾¼ã¾ããseccompãããã¡ã¤ã«ãPodãã³ã³ããã«èªåçã«é©ç¨ãããã¨ãã§ãã¾ãã</p>
<p>ããããKubernetesã§seccompãããã¡ã¤ã«ãé
å¸ãããã¨ã¯å¤§ããªèª²é¡ã§ãã
ãªããªããJSONãã¡ã¤ã«ãã¯ã¼ã¯ãã¼ããå®è¡å¯è½ãªãã¹ã¦ã®ãã¼ãã§å©ç¨å¯è½ã§ãªããã°ãªããªãããã§ãã
<a href="https://sigs.k8s.io/security-profiles-operator">Security Profiles Operator</a>ãªã©ã®ããã¸ã§ã¯ãã¯ãã¯ã©ã¹ã¿ã¼å
ã§ãã¼ã¢ã³ã¨ãã¦å®è¡ãããã¨ã§ãã®åé¡ã解決ãã¦ãã¾ãã
ãã®è¨å®ããã<a href="https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/">ã³ã³ããã©ã³ã¿ã¤ã </a>ããã®é
å¸ããã»ã¹ã®ä¸é¨ãæ
å½ã§ãããã©ãããè峿·±ãç¹ã§ãã</p>
<p>é常ãã©ã³ã¿ã¤ã ã¯ãã¼ã«ã«ãã¹ãããããã¡ã¤ã«ãé©ç¨ãã¾ãããã¨ãã°ï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>container<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>nginx:1.25.3<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">seccompProfile</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">type</span>:<span style="color:#bbb"> </span>Localhost<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">localhostProfile</span>:<span style="color:#bbb"> </span>nginx-1.25.3.json<span style="color:#bbb">
</span></span></span></code></pre></div><p>ãããã¡ã¤ã«<code>nginx-1.25.3.json</code>ã¯kubeletã®ã«ã¼ããã£ã¬ã¯ããªå
ã«<code>seccomp</code>ãã£ã¬ã¯ããªã追å ãã¦å©ç¨å¯è½ã§ãªããã°ãªãã¾ããã
ããã¯ããã£ã¹ã¯ä¸ã®ãããã¡ã¤ã«ã®ããã©ã«ãã®å ´æã<code>/var/lib/kubelet/seccomp/nginx-1.25.3.json</code>ã«ãªããã¨ãæãã¦ãã¾ãã
ãããã¡ã¤ã«ãå©ç¨ã§ããªãå ´åãã©ã³ã¿ã¤ã ã¯æ¬¡ã®ããã«ã³ã³ããã®ä½æã«å¤±æãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl get pods
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">NAME READY STATUS RESTARTS AGE
</span></span></span><span style="display:flex;"><span><span style="color:#888">pod 0/1 CreateContainerError 0 38s
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl describe pod/pod | tail
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
</span></span></span><span style="display:flex;"><span><span style="color:#888"> node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
</span></span></span><span style="display:flex;"><span><span style="color:#888">Events:
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Type Reason Age From Message
</span></span></span><span style="display:flex;"><span><span style="color:#888"> ---- ------ ---- ---- -------
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Normal Scheduled 117s default-scheduler Successfully assigned default/pod to 127.0.0.1
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Normal Pulling 117s kubelet Pulling image "nginx:1.25.3"
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Normal Pulled 111s kubelet Successfully pulled image "nginx:1.25.3" in 5.948s (5.948s including waiting)
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Warning Failed 7s (x10 over 111s) kubelet Error: setup seccomp: unable to load local profile "/var/lib/kubelet/seccomp/nginx-1.25.3.json": open /var/lib/kubelet/seccomp/nginx-1.25.3.json: no such file or directory
</span></span></span><span style="display:flex;"><span><span style="color:#888"> Normal Pulled 7s (x9 over 111s) kubelet Container image "nginx:1.25.3" already present on machine
</span></span></span></code></pre></div><p><code>Localhost</code>ãããã¡ã¤ã«ãæåã§é
å¸ããå¿
è¦ãããã¨ãã大ããªé害ã¯ãå¤ãã®ã¨ã³ãã¦ã¼ã¶ã¼ã<code>RuntimeDefault</code>ã«æ»ãããããã«ã¯<code>Unconfined</code>(seccompãç¡å¹ã«ãªã£ã¦ãã)ã§ã¯ã¼ã¯ãã¼ããå®è¡ãããã¨ã«ãªãå¯è½æ§ãé«ãã¨ãããã¨ã§ãã</p>
<h2 id="cri-oãæä¸ä¸»">CRI-Oãæä¸ä¸»</h2>
<p>Kubernetesã®ã³ã³ããã©ã³ã¿ã¤ã <a href="https://github.com/cri-o/cri-o">CRI-O</a>ã¯ãã«ã¹ã¿ã ã¢ããã¼ã·ã§ã³ã使ç¨ãã¦ãã¾ãã¾ãªæ©è½ãæä¾ãã¦ãã¾ãã
v1.30ã®ãªãªã¼ã¹ã§ã¯ãã¢ããã¼ã·ã§ã³ã®æ°ããéåã§ãã<code>seccomp-profile.kubernetes.cri-o.io/POD</code>ã¨<code>seccomp-profile.kubernetes.cri-o.io/<CONTAINER></code>ã®ãµãã¼ãã<a href="https://github.com/cri-o/cri-o/pull/7719">追å </a>ããã¾ããã
ãããã®ã¢ããã¼ã·ã§ã³ã使ç¨ããã¨ã以ä¸ãæå®ãããã¨ãã§ãã¾ãï¼</p>
<ul>
<li>ç¹å®ã®ã³ã³ããç¨ã®seccompãããã¡ã¤ã«ã¯ã次ã®ããã«ä½¿ç¨ããã¾ã:<code>seccomp-profile.kubernetes.cri-o.io/<CONTAINER></code> (ä¾:<code>seccomp-profile.kubernetes.cri-o.io/webserver: 'registry.example/example/webserver:v1'</code>)</li>
<li>Podå
ã®ãã¹ã¦ã®ã³ã³ããã«å¯¾ããseccompãããã¡ã¤ã«ã¯ãã³ã³ããåã®æ¥å°¾è¾ã使ç¨ãããäºç´ãããåå<code>POD</code>ã使ç¨ãã¦æ¬¡ã®ããã«ä½¿ç¨ããã¾ã:<code>seccomp-profile.kubernetes.cri-o.io/POD</code></li>
<li>ã¤ã¡ã¼ã¸å
¨ä½ã®seccompãããã¡ã¤ã«ã¯ãã¤ã¡ã¼ã¸èªä½ãã¢ããã¼ã·ã§ã³<code>seccomp-profile.kubernetes.cri-o.io/POD</code>ã¾ãã¯<code>seccomp-profile.kubernetes.cri-o.io/<CONTAINER></code>ãå«ãã§ããå ´åã«ä½¿ç¨ããã¾ã</li>
</ul>
<p>CRI-Oã¯ãã©ã³ã¿ã¤ã ãããã許å¯ããããã«æ§æããã¦ããå ´åãããã³<code>Unconfined</code>ã¨ãã¦å®è¡ãããã¯ã¼ã¯ãã¼ãã«å¯¾ãã¦ã®ã¿ããã®ã¢ããã¼ã·ã§ã³ãå°éãã¾ãã
ãã以å¤ã®ãã¹ã¦ã®ã¯ã¼ã¯ãã¼ãã¯ãå¼ãç¶ã<code>securityContext</code>ããã®å¤ãåªå
ãã¦ä½¿ç¨ãã¾ãã</p>
<p>ã¢ããã¼ã·ã§ã³åä½ã§ã¯ããããã¡ã¤ã«ã®é
å¸ã«ã¯ãã¾ãå½¹ç«ã¡ã¾ãããããããã®åç
§æ¹æ³ãå½¹ç«ã¡ã¾ãï¼
ãã¨ãã°ãOCIã¢ã¼ãã£ãã¡ã¯ãã使ç¨ãã¦ãé常ã®ã³ã³ããã¤ã¡ã¼ã¸ã®ããã«seccompãããã¡ã¤ã«ãæå®ã§ããããã«ãªãã¾ããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">annotations</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">seccomp-profile.kubernetes.cri-o.io/POD</span>:<span style="color:#bbb"> </span>quay.io/crio/seccomp:v2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb"> </span>â¦<span style="color:#bbb">
</span></span></span></code></pre></div><p>ã¤ã¡ã¼ã¸<code>quay.io/crio/seccomp:v2</code>ã«ã¯ãå®éã®ãããã¡ã¤ã«å
容ãå«ã<code>seccomp.json</code>ãã¡ã¤ã«ãå«ã¾ãã¦ãã¾ãã
<a href="https://oras.land">ORAS</a>ã<a href="https://github.com/containers/skopeo">Skopeo</a>ãªã©ã®ãã¼ã«ã使ç¨ãã¦ãã¤ã¡ã¼ã¸ã®å
å®¹ãæ¤æ»ã§ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>oras pull quay.io/crio/seccomp:v2
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">Downloading 92d8ebfa89aa seccomp.json
</span></span></span><span style="display:flex;"><span><span style="color:#888">Downloaded 92d8ebfa89aa seccomp.json
</span></span></span><span style="display:flex;"><span><span style="color:#888">Pulled [registry] quay.io/crio/seccomp:v2
</span></span></span><span style="display:flex;"><span><span style="color:#888">Digest: sha256:f0205dac8a24394d9ddf4e48c7ac201ca7dcfea4c554f7ca27777a7f8c43ec1b
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>jq . seccomp.json | head
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultAction": </span><span style="color:#b44">"SCMP_ACT_ERRNO"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultErrnoRet": </span><span style="color:#666">38</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultErrno": </span><span style="color:#b44">"ENOSYS"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"archMap": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"architecture": </span><span style="color:#b44">"SCMP_ARCH_X86_64"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"subArchitectures": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X86"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X32"</span><span style="color:#bbb">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#080;font-style:italic"># ã¤ã¡ã¼ã¸ã®ãã¬ã¼ã³ãããã§ã¹ãã調ã¹ã</span>
</span></span><span style="display:flex;"><span>skopeo inspect --raw docker://quay.io/crio/seccomp:v2 | jq .
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"schemaVersion": </span><span style="color:#666">2</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"mediaType": </span><span style="color:#b44">"application/vnd.oci.image.manifest.v1+json"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"config"</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"mediaType": </span><span style="color:#b44">"application/vnd.cncf.seccomp-profile.config.v1+json"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"digest": </span><span style="color:#b44">"sha256:ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"size": </span><span style="color:#666">3</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>},<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"layers"</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"mediaType": </span><span style="color:#b44">"application/vnd.oci.image.layer.v1.tar"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"digest": </span><span style="color:#b44">"sha256:92d8ebfa89aa6dd752c6443c27e412df1b568d62b4af129494d7364802b2d476"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"size": </span><span style="color:#666">18853</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"annotations": { "org.opencontainers.image.title": </span><span style="color:#b44">"seccomp.json"</span><span style="color:#bbb"> </span>},<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>},<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>],<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"annotations": { "org.opencontainers.image.created": </span><span style="color:#b44">"2024-02-26T09:03:30Z"</span><span style="color:#bbb"> </span>},<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></span></span></code></pre></div><p>ã¤ã¡ã¼ã¸ãããã§ã¹ãã«ã¯ãç¹å®ã®å¿
è¦ãªæ§æã¡ãã£ã¢ã¿ã¤ã(<code>application/vnd.cncf.seccomp-profile.config.v1+json</code>)ã¸ã®åç
§ã¨ã<code>seccomp.json</code>ãã¡ã¤ã«ãæãåä¸ã®ã¬ã¤ã¤ã¼(<code>application/vnd.oci.image.layer.v1.tar</code>)ãå«ã¾ãã¦ãã¾ãã
ããã§ã¯ããã®æ°æ©è½ã試ãã¦ã¿ã¾ãããï¼</p>
<h3 id="ç¹å®ã®ã³ã³ãããpodå
¨ä½ã«å¯¾ãã¦ã¢ããã¼ã·ã§ã³ã使ç¨ãã">ç¹å®ã®ã³ã³ãããPodå
¨ä½ã«å¯¾ãã¦ã¢ããã¼ã·ã§ã³ã使ç¨ãã</h3>
<p>CRI-Oã¯ãã¢ããã¼ã·ã§ã³ãå©ç¨ããåã«é©åã«æ§æããå¿
è¦ãããã¾ãã
ãããè¡ãã«ã¯ãã©ã³ã¿ã¤ã ã® <code>allowed_annotations</code>é
åã«ã¢ããã¼ã·ã§ã³ã追å ãã¾ãã
ããã¯ã次ã®ãããªããããã¤ã³æ§æ<code>/etc/crio/crio.conf.d/10-crun.conf</code>ã使ç¨ãã¦è¡ããã¨ãã§ãã¾ãï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[crio.runtime]
</span></span><span style="display:flex;"><span>default_runtime = <span style="color:#b44">"crun"</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>[crio.runtime.runtimes.crun]
</span></span><span style="display:flex;"><span>allowed_annotations = [
</span></span><span style="display:flex;"><span> <span style="color:#b44">"seccomp-profile.kubernetes.cri-o.io"</span>,
</span></span><span style="display:flex;"><span>]
</span></span></code></pre></div><p>ããã§ã¯ãCRI-Oãææ°ã®<code>main</code>ã³ãããããå®è¡ãã¾ãã
ããã¯ãã½ã¼ã¹ãããã«ããããã<a href="https://github.com/cri-o/packaging?tab=readme-ov-file#using-the-static-binary-bundles-directly">éçãã¤ããªãã³ãã«</a>ã使ç¨ãããã<a href="https://github.com/cri-o/packaging?tab=readme-ov-file#usage">ãã¬ãªãªã¼ã¹ããã±ã¼ã¸</a>ã使ç¨ãããã¨ã§è¡ããã¨ãã§ãã¾ãã</p>
<p>ãããå®è¨¼ããããã«ã<a href="https://github.com/cri-o/cri-o?tab=readme-ov-file#running-kubernetes-with-cri-o"><code>local-up-cluster.sh</code></a>ã使ã£ã¦åä¸ãã¼ãã®Kubernetesã¯ã©ã¹ã¿ã¼ãã»ããã¢ããããã³ãã³ãã©ã¤ã³ãã<code>crio</code>ãã¤ããªãå®è¡ãã¾ããã
ã¯ã©ã¹ã¿ã¼ãèµ·åãã¦å®è¡ããã¦ããã®ã§ãseccomp <code>Unconfined</code>ã¨ãã¦å®è¡ããã¦ããã¢ããã¼ã·ã§ã³ã®ãªãPodã試ãã¦ã¿ã¾ããã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>cat pod.yaml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>container<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>nginx:1.25.3<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">securityContext</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">seccompProfile</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">type</span>:<span style="color:#bbb"> </span>Unconfined<span style="color:#bbb">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl apply -f pod.yaml
</span></span></code></pre></div><p>ã¯ã¼ã¯ãã¼ããèµ·åãã¦å®è¡ä¸ã§ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl get pods
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">NAME READY STATUS RESTARTS AGE
</span></span></span><span style="display:flex;"><span><span style="color:#888">pod 1/1 Running 0 15s
</span></span></span></code></pre></div><p><a href="https://sigs.k8s.io/cri-tools"><code>crictl</code></a>ã使ç¨ãã¦ã³ã³ãããæ¤æ»ãã¦ããseccompãããã¡ã¤ã«ãé©ç¨ããã¦ããªããã¨ããããã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#a2f">export</span> <span style="color:#b8860b">CONTAINER_ID</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>sudo crictl ps --name container -q<span style="color:#a2f;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>sudo crictl inspect <span style="color:#b8860b">$CONTAINER_ID</span> | jq .info.runtimeSpec.linux.seccomp
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">null
</span></span></span></code></pre></div><p>ã§ã¯ãPodã夿´ãã¦ãã³ã³ããã«ãããã¡ã¤ã«<code>quay.io/crio/seccomp:v2</code>ãé©ç¨ãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">annotations</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">seccomp-profile.kubernetes.cri-o.io/container</span>:<span style="color:#bbb"> </span>quay.io/crio/seccomp:v2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>container<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>nginx:1.25.3<span style="color:#bbb">
</span></span></span></code></pre></div><p>æ°ããseccompãããã¡ã¤ã«ãé©ç¨ããã«ã¯ãPodãåé¤ãã¦å使ããå¿
è¦ãããã¾ãã
å使ã®ã¿ãæ°ããseccompãããã¡ã¤ã«ãé©ç¨ããããã§ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl delete pod/pod
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">pod "pod" deleted
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl apply -f pod.yaml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">pod/pod created
</span></span></span></code></pre></div><p>CRI-Oã®ãã°ã«ã¯ãã©ã³ã¿ã¤ã ãã¢ã¼ãã£ãã¡ã¯ããåå¾ãããã¨ã示ããã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">WARN[â¦] Allowed annotations are specified for workload [seccomp-profile.kubernetes.cri-o.io]
</span></span></span><span style="display:flex;"><span><span style="color:#888">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
</span></span></span><span style="display:flex;"><span><span style="color:#888">INFO[â¦] Pulling OCI artifact from ref: quay.io/crio/seccomp:v2 id=26ddcbe6-6efe-414a-88fd-b1ca91979e93 name=/runtime.v1.RuntimeService/CreateContainer
</span></span></span><span style="display:flex;"><span><span style="color:#888">INFO[â¦] Retrieved OCI artifact seccomp profile of len: 18853 id=26ddcbe6-6efe-414a-88fd-b1ca91979e93 name=/runtime.v1.RuntimeService/CreateContainer
</span></span></span></code></pre></div><blockquote>
<p>And the container is finally using the profile:</p>
</blockquote>
<p>ããã¦ãã³ã³ããã¯æçµçã«ãããã¡ã¤ã«ã使ç¨ãã¦ãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#a2f">export</span> <span style="color:#b8860b">CONTAINER_ID</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>sudo crictl ps --name container -q<span style="color:#a2f;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>sudo crictl inspect <span style="color:#b8860b">$CONTAINER_ID</span> | jq .info.runtimeSpec.linux.seccomp | head
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultAction": </span><span style="color:#b44">"SCMP_ACT_ERRNO"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultErrnoRet": </span><span style="color:#666">38</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"architectures": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X86_64"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X86"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X32"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>],<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"syscalls": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span></span></span></code></pre></div><p>ã¦ã¼ã¶ã¼ãæ¥å°¾è¾<code>/container</code>ãäºç´å<code>/POD</code>ã«ç½®ãæããã¨ãPodå
ã®ãã¹ã¦ã®ã³ã³ããã«å¯¾ãã¦åããã¨ãæ©è½ãã¾ãã
ãã¨ãã°:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">annotations</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">seccomp-profile.kubernetes.cri-o.io/POD</span>:<span style="color:#bbb"> </span>quay.io/crio/seccomp:v2<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>container<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>nginx:1.25.3<span style="color:#bbb">
</span></span></span></code></pre></div><h3 id="ã³ã³ããã¤ã¡ã¼ã¸ã«ã¢ããã¼ã·ã§ã³ã使ç¨ãã">ã³ã³ããã¤ã¡ã¼ã¸ã«ã¢ããã¼ã·ã§ã³ã使ç¨ãã</h3>
<p>ç¹å®ã®ã¯ã¼ã¯ãã¼ãã«OCIã¢ã¼ãã£ãã¡ã¯ãã¨ãã¦seccompãããã¡ã¤ã«ãæå®ããæ©è½ã¯ç´ æ´ãããã§ãããã»ã¨ãã©ã®ã¦ã¼ã¶ã¼ã¯seccompãããã¡ã¤ã«ãå
¬éãããã³ã³ããã¤ã¡ã¼ã¸ã«é¢é£ä»ãããã¨èãã¦ãã¾ãã
ããã¯ãã³ã³ããã¤ã¡ã¼ã¸èªä½ã«é©ç¨ãããã¡ã¿ãã¼ã¿ã§ããã³ã³ããã¤ã¡ã¼ã¸ã¢ããã¼ã·ã§ã³ã使ç¨ãã¦è¡ããã¨ãã§ãã¾ãã
ãã¨ãã°ã<a href="https://podman.io">Podman</a>ã使ç¨ãã¦ãã¤ã¡ã¼ã¸ã®ãã«ãä¸ã«ç´æ¥ã¤ã¡ã¼ã¸ã¢ããã¼ã·ã§ã³ã追å ãããã¨ãã§ãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>podman build <span style="color:#b62;font-weight:bold">\
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> --annotation seccomp-profile.kubernetes.cri-o.io<span style="color:#666">=</span>quay.io/crio/seccomp:v2 <span style="color:#b62;font-weight:bold">\
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> -t quay.io/crio/nginx-seccomp:v2 .
</span></span></code></pre></div><p>ããã·ã¥ãããã¤ã¡ã¼ã¸ã«ã¯ããã®ã¢ããã¼ã·ã§ã³ãå«ã¾ãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>skopeo inspect --raw docker://quay.io/crio/nginx-seccomp:v2 |
</span></span><span style="display:flex;"><span> jq <span style="color:#b44">'.annotations."seccomp-profile.kubernetes.cri-o.io"'</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">"quay.io/crio/seccomp:v2"
</span></span></span></code></pre></div><p>ãã®ã¤ã¡ã¼ã¸ã使ç¨ãã¦ãCRI-Oã®ãã¹ãPodå®ç¾©ã«çµã¿è¾¼ãå ´åï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic"># Podã®ã¢ããã¼ã·ã§ã³ãè¨å®ããã¦ãã¾ãã</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>container<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>quay.io/crio/nginx-seccomp:v2<span style="color:#bbb">
</span></span></span></code></pre></div><p>ãã®å¾ãCRI-Oã®ãã°ã«ã¯ãã¤ã¡ã¼ã¸ã®ã¢ããã¼ã·ã§ã³ãè©ä¾¡ããããããã¡ã¤ã«ãé©ç¨ããããã¨ã示ããã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl delete pod/pod
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">pod "pod" deleted
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>kubectl apply -f pod.yaml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">pod/pod created
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">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
</span></span></span><span style="display:flex;"><span><span style="color:#888">INFO[â¦] Pulling OCI artifact from ref: quay.io/crio/seccomp:v2 id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
</span></span></span><span style="display:flex;"><span><span style="color:#888">INFO[â¦] Retrieved OCI artifact seccomp profile of len: 18853 id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
</span></span></span><span style="display:flex;"><span><span style="color:#888">INFO[â¦] Created container 116a316cd9a11fe861dd04c43b94f45046d1ff37e2ed05a4e4194fcaab29ee63: default/pod/container id=c1f22c59-e30e-4046-931d-a0c0fdc2c8b7 name=/runtime.v1.RuntimeService/CreateContainer
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#a2f">export</span> <span style="color:#b8860b">CONTAINER_ID</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>sudo crictl ps --name container -q<span style="color:#a2f;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>sudo crictl inspect <span style="color:#b8860b">$CONTAINER_ID</span> | jq .info.runtimeSpec.linux.seccomp | head
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span>{<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultAction": </span><span style="color:#b44">"SCMP_ACT_ERRNO"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"defaultErrnoRet": </span><span style="color:#666">38</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"architectures": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X86_64"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X86"</span>,<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#b44">"SCMP_ARCH_X32"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>],<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">"syscalls": </span>[<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span></span></span></code></pre></div><p>ã³ã³ããã¤ã¡ã¼ã¸ã®å ´åãã¢ããã¼ã·ã§ã³<code>seccomp-profile.kubernetes.cri-o.io</code>ã¯<code>seccomp-profile.kubernetes.cri-o.io/POD</code>ã¨åæ§ã«æ±ãããPodå
¨ä½ã«é©ç¨ããã¾ãã
ããã«ããã®æ©è½ã¯ãã¤ã¡ã¼ã¸ã«ã³ã³ããåºæã®ã¢ããã¼ã·ã§ã³ã使ç¨ããå ´åã«ãæ©è½ãã¾ãã
ãã¨ãã°ãã³ã³ããã®ååã<code>container1</code>ã®å ´åï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>skopeo inspect --raw docker://quay.io/crio/nginx-seccomp:v2-container |
</span></span><span style="display:flex;"><span> jq <span style="color:#b44">'.annotations."seccomp-profile.kubernetes.cri-o.io/container1"'</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#888">"quay.io/crio/seccomp:v2"
</span></span></span></code></pre></div><p>ãã®æ©è½ã®ç´ æ´ãããç¹ã¯ãã¦ã¼ã¶ã¼ãç¹å®ã®ã³ã³ããã¤ã¡ã¼ã¸ç¨ã®seccompãããã¡ã¤ã«ã使ããåãã¬ã¸ã¹ããªå
ã«ä¸¦ã¹ã¦ä¿åã§ãããã¨ã§ãã
ã¤ã¡ã¼ã¸ããããã¡ã¤ã«ã«ãªã³ã¯ãããã¨ã§ãã¢ããªã±ã¼ã·ã§ã³å
¨ä½ã®ã©ã¤ããµã¤ã¯ã«ãéãã¦ããããç¶æããæè»æ§ãæä¾ããã¾ãã</p>
<h3 id="orasã使ç¨ãã¦ãããã¡ã¤ã«ãããã·ã¥ãã">ORASã使ç¨ãã¦ãããã¡ã¤ã«ãããã·ã¥ãã</h3>
<p>OCIãªãã¸ã§ã¯ãã使ãã¦seccompãããã¡ã¤ã«ãå«ããã«ã¯ãORASã使ç¨ããå ´åãããå°ã使¥ãå¿
è¦ã§ãã
å°æ¥çã«ã¯ãPodmanãªã©ã®ãã¼ã«ãå
¨ä½ã®ããã»ã¹ãããç°¡ç¥åãããã¨ãæå¾
ãã¦ãã¾ãã
ç¾æç¹ã§ã¯ãã³ã³ããã¬ã¸ã¹ããªã<a href="https://oras.land/docs/compatible_oci_registries/#registries-supporting-oci-artifacts">OCIäºæ</a>ã§ããå¿
è¦ãããã¾ãã
ããã¯<a href="https://quay.io">Quay.io</a>ã®å ´åãåæ§ã§ãã
CRI-Oã¯ãseccompãããã¡ã¤ã«ãªãã¸ã§ã¯ããã³ã³ããã¤ã¡ã¼ã¸ã¡ãã£ã¢ã¿ã¤ã(<code>application/vnd.cncf.seccomp-profile.config.v1+json</code>)ãæã£ã¦ãããã¨ãæå¾
ãã¦ãã¾ãããORASã¯ããã©ã«ãã§<code>application/vnd.oci.empty.v1+json</code>ã使ç¨ãã¾ãã
ãããå®ç¾ããããã«ã次ã®ã³ãã³ããå®è¡ã§ãã¾ãï¼</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#a2f">echo</span> <span style="color:#b44">"{}"</span> > config.json
</span></span><span style="display:flex;"><span>oras push <span style="color:#b62;font-weight:bold">\
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> --config config.json:application/vnd.cncf.seccomp-profile.config.v1+json <span style="color:#b62;font-weight:bold">\
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> quay.io/crio/seccomp:v2 seccomp.json
</span></span></code></pre></div><p>çµæã¨ãã¦å¾ãããã¤ã¡ã¼ã¸ã«ã¯ãCRI-Oãæå¾
ãã<code>mediaType</code>ãå«ã¾ãã¦ãã¾ãã
ORASã¯åä¸ã®ã¬ã¤ã¤ã¼<code>seccomp.json</code> ãã¬ã¸ã¹ããªã«ããã·ã¥ãã¾ãã
ãããã¡ã¤ã«ã®ååã¯ãã¾ãéè¦ã§ã¯ããã¾ããã
CRI-Oã¯æåã®ã¬ã¤ã¤ã¼ã鏿ãããããseccompãããã¡ã¤ã«ã¨ãã¦æ©è½ãããã©ããã確èªãã¾ãã</p>
<h2 id="å°æ¥ã®ä½æ¥">å°æ¥ã®ä½æ¥</h2>
<p>CRI-Oã¯OCIã¢ã¼ãã£ãã¡ã¯ããé常ã®ãã¡ã¤ã«ã¨åæ§ã«å
é¨ã§ç®¡çãã¦ãã¾ãã
ããã«ãããããããç§»åãããã使ç¨ãããªããªã£ãå ´åã«åé¤ããããseccompãããã¡ã¤ã«ä»¥å¤ã®ãã¼ã¿ãå©ç¨ãããããå©ç¹ãå¾ããã¾ãã
ããã«ãããOCIã¢ã¼ãã£ãã¡ã¯ãããã¼ã¹ã«ããCRI-Oã®å°æ¥ã®æ¡å¼µãå¯è½ã«ãªãã¾ãã
ã¾ããOCIã¢ã¼ãã£ãã¡ã¯ãã®ä¸ã«è¤æ°ã®ã¬ã¤ã¤ã¼ãæã¤ãã¨ãèããä¸ã§ãseccompãããã¡ã¤ã«ã®ç©å±¤ãå¯è½ã«ãªãã¾ãã
v1.30.xãªãªã¼ã¹ã§ã¯<code>Unconfined</code>ã¯ã¼ã¯ãã¼ãã®ã¿ããµãã¼ãããã¦ããã¨ããå¶éã¯ãå°æ¥CRI-Oã解決ããã課é¡ã§ãã
ã»ãã¥ãªãã£ãæãªããã¨ãªããå
¨ä½çãªã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ãç°¡ç´ åãããã¨ããã³ã³ããã¯ã¼ã¯ãã¼ãã«ãããseccompã®æåã®éµã¨ãªãããã§ãã</p>
<p>CRI-Oã®ã¡ã³ããã¼ã¯ãæ°æ©è½ã«é¢ãããã£ã¼ãããã¯ãææ¡ãæè¿ãã¾ãï¼
ãã®ããã°æç¨¿ãèªãã§ããã ãããã²Kubernetesã®<a href="https://kubernetes.slack.com/messages/CAZH62UR1">Slackãã£ã³ãã«#crio</a>ãéãã¦ã¡ã³ããã¼ã«é£çµ¡ãããã<a href="https://github.com/cri-o/cri-o">GitHubãªãã¸ããª</a>ã§Issueã使ããããã¦ãã ããã</p>
- SIG Cloud Providerã®åãçµã¿ã®ç´¹ä»https://kubernetes.io/ja/blog/2024/03/01/sig-cloud-provider-spotlight-2024/Fri, 01 Mar 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/03/01/sig-cloud-provider-spotlight-2024/
<p>Kubernetesé¢é£ã®ãµã¼ãã¹ã¯ãéçºè
ã«ã¨ã£ã¦ã¯ã©ã¦ããããã¤ãã¼çµç±ã§å©ç¨ããã®ãæã人æ°ãªæ¹æ³ã®ä¸ã¤ã§ããã§ã¯ãã¯ã©ã¦ããããã¤ãã¼ãã©ã®ããã«ãã¦Kubernetesã¨é£æºãã¦ããã®ãã䏿è°ã«æã£ããã¨ã¯ããã¾ãããï¼Kubernetesããã¾ãã¾ãªã¯ã©ã¦ããããã¤ãã¼ã¨çµ±åãããéç¨ã¯ãã©ã®ããã«å®ç¾ããã¦ããã®ã§ããããï¼ãã®çåã«çããããã«ã<a href="https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md">SIG
Cloud Provider</a>ã«ã¹ãããã©ã¤ããå½ã¦ã¦ã¿ã¾ãããã</p>
<p>SIG Cloud Providerã¯ãKubernetesã¨ãã¾ãã¾ãªã¯ã©ã¦ããããã¤ãã¼ã¨ã®ã·ã¼ã ã¬ã¹ãªçµ±åãå®ç¾ããããã«æ´»åãã¦ãã¾ããå½¼ãã®ä½¿å½ã¯ãKubernetesã¨ã³ã·ã¹ãã ã誰ã«ã¨ã£ã¦ãå
¬å¹³ãã¤ãªã¼ãã³ãªãã®ã«ä¿ã¤ãã¨ã§ãã
æç¢ºãªåºæºã¨è¦ä»¶ãå®ãããã¨ã§ãã©ã®ã¯ã©ã¦ããããã¤ãã¼ãKubernetesã¨é©åã«é£æºã§ããããã«ãã¦ãã¾ãã
ã¯ã©ã¦ããããã¤ãã¼ã¨ã®é£æºãå¯è½ã«ããããã«ãã¯ã©ã¹ã¿ã¼å
ã®åã³ã³ãã¼ãã³ããé©åã«æ§æãããã¨ãå½¼ãã®éè¦ãªè²¬åã§ãã</p>
<p>SIG Spotlightã·ãªã¼ãºã®æ¬è¨äºã§ã¯ã<a href="https://twitter.com/arujjval">Arujjwal Negi</a>ã<a href="https://github.com/elmiko">Michael McCune</a>(Red Hat)ã«ã¤ã³ã¿ãã¥ã¼ãè¡ãã¾ãããMcCuneæ°ã¯ <em>elmiko</em> ã®åã§ãç¥ããã¦ãããSIG Cloud Providerã®å
±åãã§ã¢ãåãã¦ãã¾ãããã®ã¤ã³ã¿ãã¥ã¼ãéãã¦ãæ¬SIGã®æ´»åã®å®æ
ã«è¿«ãã¾ãã</p>
<h2 id="ã¯ããã«">ã¯ããã«</h2>
<p><strong>Arujjwal</strong>: ã¾ãã¯ãããªãèªèº«ã«ã¤ãã¦ç¥ãã¨ããããå§ãããã¨æãã¾ããç°¡åã«èªå·±ç´¹ä»ããã¦ããã ãã¾ããï¼ã¾ããã©ã®ããã«ãã¦Kubernetesã«é¢ããããã«ãªã£ãã®ããæãã¦ãã ããã</p>
<p><strong>Michael</strong>:ããã«ã¡ã¯ãMichael McCuneã§ããã³ãã¥ããã£ã§ã¯ãå¤ãã®äººãç§ã®ãã³ãã«ãã¼ã ã§ãã <em>elmiko</em> ã¨å¼ãã§ãã¾ããç§ã¯é·å¹´ã½ããã¦ã§ã¢éçºã«æºãã£ã¦ãã(ç§ãéçºãå§ããé ã¯ãWindows 3.1ãæµè¡ãã¦ãã¾ããï¼)ããã£ãªã¢ã®ã»ã¨ãã©ããªã¼ãã³ã½ã¼ã¹ã½ããã¦ã§ã¢ã¨ã¨ãã«æ©ãã§ãã¾ãããKubernetesã«é¢ããããã«ãªã£ãã®ã¯ãæ©æ¢°å¦ç¿ããã¼ã¿ãµã¤ã¨ã³ã¹ã®ã¢ããªã±ã¼ã·ã§ã³éçºã«åãçµãã§ããã¨ãã§ãã彿æå±ãã¦ãããã¼ã ã§ã¯ãApache Sparkãªã©ã®æè¡ãKubernetesä¸ã§æ´»ç¨ãããã¥ã¼ããªã¢ã«ããµã³ãã«ã使ãã¦ãã¾ãããããã¨ã¯å¥ã«ãç§ã¯ä»¥åãã忣ã·ã¹ãã å
¨è¬ã«å¼·ãé¢å¿ãæã£ã¦ãããKubernetesã®éçºã«ç´æ¥åãçµããã¼ã ã«åå ã§ãããã£ã³ã¹ã訪ããã¨ãã«ã¯ãããã«é£ã³è¾¼ã¿ã¾ããï¼</p>
<h2 id="æ´»åå
容ã¨éå¶ä½å¶">æ´»åå
容ã¨éå¶ä½å¶</h2>
<p><strong>Arujjwal</strong>: SIG Cloud Providerãã©ã®ãããªæ´»åãè¡ã£ã¦ãã¦ãã©ã®ããã«æ©è½ãã¦ããã®ãæãã¦ããã ãã¾ããï¼</p>
<p><strong>Michael</strong>: SIG Cloud Providerã¯ãKubernetesããã¹ã¦ã®ã¤ã³ãã©ãããã¤ãã¼ã«å¯¾ãã¦ä¸ç«çãªçµ±åãã¤ã³ããæä¾ã§ããããã«ãããã¨ãç®çã¨ãã¦è¨ç«ããã¾ãããããã¾ã§ã§æå¤§ã®åãçµã¿ã¯ãKubernetesæ¬ä½(in-tree)ã«çµã¿è¾¼ã¾ãã¦ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããå¤é¨ã³ã³ãã¼ãã³ã(out-of-tree)ã¨ãã¦åãåºããç§»è¡ãã使¥ã§ããSIGã§ã¯å®æçã«ãã¼ãã£ã³ã°ãè¡ããé²æç¶æ³ãä»å¾ã®ä½æ¥ã«ã¤ãã¦è°è«ãã¦ãã¾ãããããã¦ãå ±åããã質åããã°ã¸ã®å¯¾å¿ãè¡ã£ã¦ãã¾ããããã«ãã¯ã©ã¦ããããã¤ãã¼åãã®ãã¬ã¼ã ã¯ã¼ã¯ãå種ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã®å®è£
ã<a href="https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/">Konnectivity proxy
project</a>ãªã©ãã¯ã©ã¦ãé¢é£ãµãããã¸ã§ã¯ãã®èª¿æ´çªå£ã¨ãã¦ã®å½¹å²ãæ
ã£ã¦ãã¾ãã</p>
<p><strong>Arujjwal</strong>: ããã¸ã§ã¯ãã®<a href="https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md">README</a>ãæè¦ããSIG Cloud ProviderãKubernetesã¨ã¯ã©ã¦ããããã¤ãã¼ã¨ã®çµ±åã«é¢ãã£ã¦ãããã¨ãç¥ãã¾ããããã®çµ±åããã»ã¹ã¯ãå
·ä½çã«ã©ã®ããã«é²ãããã¦ããã®ã§ããããï¼</p>
<p><strong>Michael</strong>: Kubernetesãå®è¡ããæãä¸è¬çãªæ¹æ³ã®ä¸ã¤ã¯ãã¯ã©ã¦ãç°å¢(AWSãAzureãGCPãªã©)ã«ãããã¤ãããã¨ã§ãããããã®ã¯ã©ã¦ãã¤ã³ãã©ã«ã¯ãKubernetesã®ããã©ã¼ãã³ã¹ãé«ããããã®æ©è½ãåãã£ã¦ãããã¨ãããããã¾ããä¾ãã°ãServiceãªãã¸ã§ã¯ãåãã®ã¨ã©ã¹ãã£ãã¯ãã¼ããã©ã³ã·ã³ã°ãæä¾ããæ©è½ãªã©ã§ããKubernetesããã¯ã©ã¦ãåºæã®ãµã¼ãã¹ãä¸è²«ãã¦å©ç¨ã§ããããã«ããããã«ãKubernetesã³ãã¥ããã£ã§ã¯ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã¨ããä»çµã¿ãå°å
¥ãããããã®çµ±åãã¤ã³ãã«å¯¾å¿ãã¦ãã¾ããã¯ã©ã¦ããããã¤ãã¼ã¯ãSIGã管çãã¦ãããã¬ã¼ã ã¯ã¼ã¯ãå©ç¨ãããããããã¯Kubernetesã®ã³ã¼ããããã¥ã¡ã³ãã§å®ç¾©ããã¦ããAPIã¬ã¤ãã©ã¤ã³ã«å¾ããã¨ã§ãç¬èªã®ã³ã³ããã¼ã©ã¼ã使ã§ãã¾ããããã§ã²ã¨ã¤å¼·èª¿ãã¦ããããã®ã¯ãSIG Cloud Providerã¯Kubernetesã¯ã©ã¹ã¿ã¼å
ã®ãã¼ãã®ã©ã¤ããµã¤ã¯ã«ç®¡çã¯æ
å½ãã¦ããªãã¨ããç¹ã§ãããã®ãããªãããã¯ã«ã¤ãã¦ã¯ãSIG Cluster Lifecycleã Cluster APIããã¸ã§ã¯ããé©åãªè°è«ã®å ´ã¨ãªãã¾ãã</p>
<h2 id="éè¦ãªãµãããã¸ã§ã¯ã">éè¦ãªãµãããã¸ã§ã¯ã</h2>
<p><strong>Arujjwal</strong>:ãã®SIGã«ã¯å¤ãã®ãµãããã¸ã§ã¯ããåå¨ãã¦ãã¾ãããã®ä¸ã§ãç¹ã«éè¦ãªãã®ã¨ããããããæ
ã£ã¦ããå½¹å²ã«ã¤ãã¦æãã¦ããã ãã¾ããï¼</p>
<p><strong>Michael:</strong> ç¾å¨ãæãéè¦ã ã¨èãã¦ãããµãããã¸ã§ã¯ãã¯<a href="https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md#kubernetes-cloud-provider">cloud provider
framework</a>ã¨ã<a href="https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md#cloud-provider-extraction-migration">extraction/migration
project</a>ã®2ã¤ã§ããcloud provider framework ã¯ãã¤ã³ãã©çµ±åãæ
å½ããéçºè
ããèªèº«ã®ã¤ã³ãã©ç°å¢ã«å¯¾å¿ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãæ§ç¯ããéã«å½¹ç«ã¤å
±éã©ã¤ãã©ãªã§ãããã®ããã¸ã§ã¯ãã¯ãæ°ããSIGã«åå ãã人ãã¡ãæåã«è§¦ãããã¨ã®å¤ãå
¥ãå£ã§ãããã¾ããããä¸ã¤ã®extraction and migration projectã¯ããã®ãã¬ã¼ã ã¯ã¼ã¯ã®åå¨çç±ã«ãé¢ãããé常ã«å¤§ããªãµãããã¸ã§ã¯ãã§ããå°ãèæ¯ã説æããã¨ãKubernetesã§ã¯é·ãéãåºç¤ã¨ãªãã¤ã³ãã©ã¨ã®çµ±åãå¿
è¦ã¨ããã¦ãã¾ããããã®ç®çã¯ãå¿
ãããæ©è½ã追å ãããã¨ã§ã¯ãªãããã¨ãã°ã¤ã³ã¹ã¿ã³ã¹ã®çµäºã¨ãã£ãã¯ã©ã¦ãä¸ã®ã¤ãã³ããææ¡ããããã§ãããå½åãã¯ã©ã¦ããããã¤ãã¼ã¨ã®çµ±åæ©è½ã¯Kubernetesæ¬ä½ã®ã³ã¼ãããªã¼å
ã«ç´æ¥çµã¿è¾¼ã¾ãã¦ãã¾ãããããããããã"in-tree"ã¨å¼ã°ããå½¢å¼ã®ç±æ¥ã§ã(詳ããã¯<a href="https://kaslin.rocks/out-of-tree/">ãã¡ãã®è¨äº</a>ãã覧ãã ãã)ããããããããã¤ãã¼åºæã®ã³ã¼ãã Kubernetesã®ã¡ã¤ã³ã½ã¼ã¹ããªã¼ã§ç®¡çãããã¨ã¯ãã³ãã¥ããã£ã«ã¨ã£ã¦æã¾ãããªãã¨è¦ãªããã¦ãã¾ããããã®ããã"in-tree"ã®ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ãåãé¤ãã"out-of-tree"ã§ç®¡çå¯è½ãªç¬ç«ã³ã³ãã¼ãã³ãã¸ã¨ç§»è¡ããããã«ããã®extraction and migration projectãç«ã¡ä¸ãããã¾ããã</p>
<p><strong>Arujjwal</strong>: [cloud provider framework]ããæ°ããé¢ãã人ã«ã¨ã£ã¦è¯ãåºçºç¹ã«ãªãã®ã¯ãªãã§ããããï¼åå¿è
åãã®ã¿ã¹ã¯ãç¶ç¶çã«ç¨æããã¦ããã®ã§ããï¼ããã¨ããã°ãã©ã®ãããªå
容ã§ããï¼</p>
<p><strong>Michael</strong>: cloud provider frameworkã¯ãã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã«é¢ããã³ãã¥ããã£ã®æ¨å¥¨ãããå®è£
æ¹æ³ãåæ ãã¦ãããããæ°ããåå ãã人ã«ã¨ã£ã¦ã¯è¯ãåºçºç¹ã ã¨æãã¾ãããã®ãã¬ã¼ã ã¯ã¼ã¯ã«åãçµããã¨ã§ãããã¼ã¸ã£ã¼ãä½ããã©ã®ããã«è¡ã£ã¦ããã®ãããã£ããã¨çè§£ã§ããã¯ãã§ãããã æ®å¿µãªããããã®ã³ã³ãã¼ãã³ãã«é¢ãã¦ã¯ãåå¿è
åãã®ã¿ã¹ã¯ã常ã«ç¶ç¶çã«ç¨æããã¦ããããã§ã¯ããã¾ããããã®çç±ã®ä¸ã¤ã¯ããã¬ã¼ã ã¯ã¼ã¯èªä½ããã§ã«æçãã¦ãããã¨ãã¾ãåã¯ã©ã¦ããããã¤ãã¼å´ã®å®è£
ãåæ§ã«å®å®ãã¦ãããã¨ã§ãããã®åéã«ãã£ã¨é¢ãã£ã¦ã¿ããã¨ããæ¹ã«ã¯ã<a href="https://go.dev/">Goè¨èª</a>ã®åºæ¬çãªç¥èãããã¨è¯ãã¨æãã¾ããå ãã¦ãå°ãªãã¨ã1ã¤ã®ã¯ã©ã¦ãAPI(AWSãAzureãGCPãªã©)ã«ã¤ãã¦ã®çè§£ãããã¨ããªãè¯ãã§ããå人çãªæè¦ã§ãããSIG Cloud Providerã«æ°ããåå ãããã¨ã¯ç°¡åã§ã¯ãªãã¨æãã¾ããã¨ããã®ãããã®ããã¸ã§ã¯ãã«é¢ããã³ã¼ãã®å¤ãã¯ãç¹å®ã®ã¯ã©ã¦ããããã¤ãã¼ã¨ã®çµ±åå¦çãç´æ¥æ±ã£ã¦ããããã§ããã¯ã©ã¦ããããã¤ãã¼å¨ãã§ããç©æ¥µçã«æ´»åãããã¨èãã¦ããæ¹ã¸ã®ç§ã®ã¢ããã¤ã¹ã¯ãã¾ã1ã¤ã2ã¤ã®ã¯ã©ã¦ãAPIã«æ
£ã親ãããã¨ã§ãããã®ä¸ã§ã該å½ããã¯ã©ã¦ãåãã®ã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã«ããopen issueãæ¢ããä»ã®ã³ã³ããªãã¥ã¼ã¿ã¼ã¨ã§ããã ãå¤ãã³ãã¥ãã±ã¼ã·ã§ã³ãåãããã«ããã®ãè¯ãã§ãããã</p>
<h2 id="ææ">ææ</h2>
<p><strong>Arujjwal</strong>: SIG Cloud Providerã®æ´»åã®ä¸ã§ãç¹ã«èªãã«æã£ã¦ããææãããã°æãã¦ããã¾ããï¼</p>
<p><strong>Michael</strong>: ç§ãSIGã«åå ãã¦ãã1年以ä¸ãçµã¡ã¾ããããã®éã«extraction and migrationãµãããã¸ã§ã¯ãã大ããåé²ããããã¨ãã§ãã¾ããã
å½åã¯ãå®ç¾©ããã<a href="https://github.com/kubernetes/enhancements/blob/master/keps/README.md">KEP</a>ã¯ã¢ã«ãã¡çã®æ®µéã§ããããç¾å¨ã§ã¯ãã¼ã¿çã¸ã¨é²ã¿ãKubernetesã®ã½ã¼ã¹ããªã¼ããå¤ããããã¤ãã¼ã³ã¼ããåé¤ããã¨ããã¾ã§è¿ã¥ãã¦ãã¾ããã³ãã¥ããã£ã®ã¡ã³ãã¼ãç©æ¥µçã«é¢ä¸ãã¦ããã¦ããæ§åãè¦ããã¨ãã§ããã¨ã¦ãèªãããæãã¦ãã¾ããã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã®åãåºãã«åãã¦ãç§ãã¡ãçå®ã«åé²ãã¦ãããã¨ã宿ãã¦ãã¾ããããããããã¨æ°åã®ãªãªã¼ã¹ã®ãã¡ã«ãin-treeã®ã¯ã©ã¦ãã³ã³ããã¼ã©ã¼ã¯å®å
¨ã«åé¤ããããã®ãµãããã¸ã§ã¯ããå®äºããã ããã¨æãã¦ãã¾ãã</p>
<h2 id="æ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã¸ã®ã¢ããã¤ã¹">æ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã¸ã®ã¢ããã¤ã¹</h2>
<p><strong>Arujjwal</strong>: SIG Cloud Providerã«åå ãããã¨èãã¦ããæ°ããã³ã³ããªãã¥ã¼ã¿ã¼ã«åãã¦ãä½ãææ¡ãã¢ããã¤ã¹ã¯ããã¾ããï¼</p>
<p><strong>Michael</strong>: å人çã«ã¯ãããã¯é£ãã質åã ã¨æãã¾ããSIG Cloud Providerã¯ãKubernetesã¨åºç¤ã¤ã³ãã©ã¨ã®éãçµ±åããã³ã¼ãé¨åã«ç¦ç¹ãå½ã¦ãã°ã«ã¼ãã§ããSIGã®ã¡ã³ãã¼ã¯ãã¯ã©ã¦ããããã¤ãã¼ã®å
¬å¼ãªç«å ´ã代表ãã¦ãããã¨ãå¤ãã§ãããå¿
ãããããã§ããå¿
è¦ã¯ããã¾ãããKubernetesã®ãã®åéã«é¢å¿ãããæ¹ã«ã¯ãã¾ãSIGã®ãã¼ãã£ã³ã°ã«åå ãã¦ãç§ãã¡ãã©ã®ããã«æ´»åãã¦ããããè¦ã¦ã¿ããã¨ããããããã¾ãããããã¦ãcloud provider frameworkããã¸ã§ã¯ããå¦ã¶ã®ãè¯ãã¹ã¿ã¼ãã«ãªãã¾ããã¾ããä»å¾ã«åããè峿·±ãã¢ã¤ãã¢ãããã¤ãããã¾ãããã¨ãã°ããã¹ã¦ã®ã¯ã©ã¦ããããã¤ãã¼ã«å
±éãããã¹ããã¬ã¼ã ã¯ã¼ã¯ã®æ§æ³ã§ããããã¯ãKubernetesã¸ã®é¢ä¸ãåºãããæ¹ã«ã¨ã£ã¦ã大ããªãã£ã³ã¹ã«ãªãã§ãããã</p>
<p><strong>Arujjwal</strong>: ç¾å¨ãSIG Cloud Providerã¨ãã¦æ±ãã¦ããã¹ãã«ã®ä¸ã§ãç§ãã¡ãç¹ã«å¼·èª¿ãã¹ããã®ã¯ããã¾ããï¼ç§ãã¡ãæå±ãã<a href="https://github.com/kubernetes/community/blob/master/sig-contributor-experience/README.md">SIG ContribEx</a>ããä¾ãæããã¨ããã¨ãã°<a href="https://gohugo.io/">Hugo</a>ã®å°éç¥èãããæ¹ã§ããã°ãk8s.devã®æ¹åã§å¸¸ã«åããåããããã¨èãã¦ãã¾ãï¼</p>
<p><strong>Michael</strong>: ç¾å¨ãSIGã¯extraction and migrationããã»ã¹ã®æçµæ®µéã«åãçµãã§ãã¾ãã䏿¹ã§ãä»å¾ã«åããè¨ç»ããã§ã«å§ãã¦ãããæ¬¡ã«ä½ãé²ãã¦ããããæ¤è¨ãã¦ãã¾ãããã®ä¸ã§ã大ããªè©±é¡ã®ä¸ã¤ããã¹ãã§ããç¾æç¹ã§ã¯ãåã¯ã©ã¦ããããã¤ãã¼ãèªåãã¡ã®ã³ã³ããã¼ã©ã¼ããã¼ã¸ã£ã¼ã®åä½ã確èªããããã«ä½¿ãããæ±ç¨çã§å
±éãªãã¹ã群ã¯åå¨ãã¦ãã¾ããããããGinkgoãKubetestãã¬ã¼ã ã¯ã¼ã¯ã«è©³ããæ¹ãããã°ãæ°ãããã¹ãã®è¨è¨ãå®è£
ã«ããã£ã¦ããã²åããåããããã¨æãã¾ãã</p>
<hr>
<p>ããã§ã¤ã³ã¿ãã¥ã¼ã¯çµäºã§ããSIG Cloud Providerã®ç®çãæ´»åå
容ã«ã¤ãã¦ãå°ãã§ãçè§£ãæ·±ãã¦ããã ãããªã幸ãã§ããä»åãç´¹ä»ããã®ã¯ãããã¾ã§ãã®ä¸ç«¯ã«éãã¾ããããã詳ããç¥ãããæ¹ãå®éã«é¢ãã£ã¦ã¿ããæ¹ã¯ã<a href="https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md#meetings">ãã¡ã</a>ã®ãã¼ãã£ã³ã°ã«åå ãã¦ã¿ã¦ãã ããã</p>
- Kubernetesããã¯ã¯ã©ããè¦ãhttps://kubernetes.io/ja/blog/2024/02/22/k8s-book-club/Thu, 22 Feb 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/02/22/k8s-book-club/
<p>Kubernetesã¨ãããåãå·»ãæè¡ã®ã¨ã³ã·ã¹ãã å
¨ä½ãå¦ã¶ãã¨ã¯ã課é¡ããªãããã§ã¯ããã¾ããã
ãã®ã¤ã³ã¿ãã¥ã¼ã§ã¯ã<a href="https://www.linkedin.com/in/csantanapr/">AWSã®Carlos Santana</a>ããã«ãã³ãã¥ããã£ãã¼ã¹ã®å¦ç¿ä½é¨ãå©ç¨ããããã«ãå½¼ãã©ã®ããã«ãã¦<a href="https://community.cncf.io/kubernetes-virtual-book-club/">Kubernetesããã¯ã¯ã©ã</a>ãä½ã£ãã®ãããã®ä¼ãã©ã®ãããªæ´»åãããã®ããããã¦ã©ã®ããã«ãã¦åå ããã®ãã«ã¤ãã¦ä¼ºãã¾ãã</p>
<p><img alt="KubeCon NA 2023ã§è©±ãCarlos Santanaãã" src="https://kubernetes.io/ja/blog/2024/02/22/k8s-book-club/csantana_k8s_book_club.jpg"></p>
<p><strong>Frederico Muñoz (FSM)</strong>: ããã«ã¡ã¯Carlosãããæéãã¨ã£ã¦ããã¦ãããã¨ãã
ã¾ãã¯ããã«ããèªèº«ã®ãã¨ãå°ãæãã¦ããã ãã¾ããï¼</p>
<p><strong>Carlos Santana (CS)</strong>: ãã¡ããã§ãã
6å¹´åã«æ¬çªç°å¢ã§Kubernetesããããã¤ããçµé¨ãã<a href="https://knative.dev/">Knative</a>ã«åå ãããã£ããã¨ãªãããã®å¾ãªãªã¼ã¹ãã¼ã ãéãã¦Kubernetesã«è²¢ç®ãã¾ããã
ã¢ããã¹ããªã¼ã ã®Kubernetesã§ã®ä½æ¥ã¯ãç§ããªã¼ãã³ã½ã¼ã¹ã§å¾ãæé«ã®çµé¨ã®ã²ã¨ã¤ã§ãã
éå»2å¹´éãAWSã®ã·ãã¢ã»ã¹ãã·ã£ãªã¹ãã»ã½ãªã¥ã¼ã·ã§ã³ã»ã¢ã¼ããã¯ãã¨ãã¦ã®å½¹å²ã§ãç§ã¯å¤§ä¼æ¥ãKubernetesä¸ã«å
é¨éçºè
ãã©ãããã©ã¼ã (IDP)ãæ§ç¯ãããã¨ãæ¯æ´ãã¦ãã¾ããã
ä»å¾ãç§ã®ãªã¼ãã³ã½ã¼ã¹ã¸ã®è²¢ç®ã¯ã<a href="https://github.com/argoproj">Argo</a>ã<a href="https://www.crossplane.io/">Crossplane</a>ã<a href="https://www.cncf.io/projects/backstage/">Backstage</a>ã®ãããªCNCFã®ããã¸ã§ã¯ãã<a href="https://cnoe.io/">CNOE</a>ã対象ã«ãã¦ãã¾ãã</p>
<h2 id="ããã¯ã¯ã©ãã®åµè¨">ããã¯ã¯ã©ãã®åµè¨</h2>
<p><strong>FSM</strong>: ããã§ããªããKubernetesã«è¾¿ãçããããã§ããããã®æç¹ã§ããã¯ã¯ã©ããå§ããåæ©ã¯ä½ã ã£ãã®ã§ããããï¼</p>
<p><strong>CS</strong>: Kubernetesããã¯ã¯ã©ãã®ã¢ã¤ãã¢ã¯ã<a href="https://github.com/vmware-archive/tgik">TGIK</a>ã®ã©ã¤ãé
ä¿¡ã§ã®ä½æ°ãªãææ¡ããçã¾ãã¾ããã
ç§ã«ã¨ã£ã¦ãããã¯åã«æ¬ãèªãã¨ãããã¨ä»¥ä¸ã«ãå¦ç¿ã³ãã¥ããã£ãä½ãã¨ãããã¨ã§ããã
ãã®ãã©ãããã©ã¼ã ã¯ç¥èã®æºã§ããã ãã§ãªããç¹ã«ãã³ãããã¯ã®å°é£ãªææã«ã¯ãµãã¼ãã·ã¹ãã ã§ãããã¾ããã
ãã®åãçµã¿ããã¡ã³ãã¼ãã¡ã®å¯¾å¦ã¨æé·ã«å½¹ç«ã£ã¦ãããã¨ãç®ã®å½ããã«ãã¦ãåã°ããã¨æã£ã¦ãã¾ãã
æåã®æ¬<a href="https://www.oreilly.com/library/view/production-kubernetes/9781492092292/">Production Kubernetes</a>ã¯ã2021å¹´3æ5æ¥ã«å§ãã¦36é±éãããã¾ããã
ç¾å¨ã¯ã1åã®æ¬ãã«ãã¼ããã®ã«ããã»ã©æéã¯ããããã1é±éã«1ç« ã2ç« ã§ãã</p>
<p><strong>FSM</strong>: Kubernetesããã¯ã¯ã©ãã®ä»çµã¿ã«ã¤ãã¦æãã¦ãã ãããã©ã®ããã«æ¬ãé¸ã³ãã©ã®ããã«èªã¿é²ããã®ã§ããï¼</p>
<p><strong>CS</strong>: ç§ãã¡ã¯ãã°ã«ã¼ãã®é¢å¿ã¨ãã¼ãºã«åºã¥ãã¦æ¬ãå
±åã§é¸ãã§ãã¾ãã
ãã®å®è·µçãªã¢ããã¼ãã¯ãã¡ã³ãã¼ãã¨ãã«åå¿è
ãè¤éãªæ¦å¿µãããç°¡åã«çè§£ããã®ã«å½¹ç«ã¡ã¾ãã
æ¯é±2ã¤ã®ã·ãªã¼ãºããããEMEAã®ã¿ã¤ã ã¾ã¼ã³ã®ãã®ã¨ãç§ãUSã§çµç¹ãã¦ãããã®ã§ãã
åãªã¼ã¬ãã¤ã¶ã¼ã¯å
±åãã¹ãã¨ååãã¦Slackä¸ã§æ¬ãé¸ã³ãåç« ã®è°è«ããããã«ãæ°é±éã«æ¸¡ããã¹ãã®ã©ã¤ã³ããããæ´ãã¾ãã</p>
<p><strong>FSM</strong>: ç§ã®è¨æ¶ãééã£ã¦ããªããã°ãKubernetesããã¯ã¯ã©ãã¯17åç®ã«çªå
¥ãã¦ãã¾ãã
ç©äºãæ´»çºã«ä¿ã¤ããã®ç§å¯ã®ã¬ã·ããããã®ã§ããï¼</p>
<p><strong>CS</strong>: ããã¯ã¯ã©ããæ´»çºã§é
åçãªãã®ã«ä¿ã¤ç§è¨£ã¯ãããã¤ãã®éè¦ãªè¦ç´ ã«ããã¾ãã</p>
<p>ã¾ããä¸è²«æ§ãéè¦ã§ãã
ä¼ã¿ã®æ¥ãKubeConã®ãããªå¤§ããªã¤ãã³ãã®æã ããã¼ãã£ã³ã°ããã£ã³ã»ã«ãã¦ã宿çãªã¹ã±ã¸ã¥ã¼ã«ãç¶æããããåªåãã¦ãã¾ãã
ãã®è¦åæ§ã¯ãã¡ã³ãã¼ã®åå ãç¶æããä¿¡é ¼ã§ããã³ãã¥ããã£ãç¯ãã®ã«å½¹ç«ã£ã¦ãã¾ãã</p>
<p>次ã«ãã»ãã·ã§ã³ãé¢ç½ãã対話å¼ã®ãã®ã«ãããã¨ãéè¦ã§ãã
ãã¨ãã°ããã¼ãã¢ããä¸ã«ãããã¢ããã»ã¯ã¤ãºãé »ç¹ã«å°å
¥ãã¾ããããã¯ã¡ã³ãã¼ã®ç解度ããã¹ãããã ãã§ãªããæ¥½ãã¿ã®è¦ç´ ãå ãã¦ãã¾ãã
ãã®ã¢ããã¼ãã«ãã£ã¦å
容ã®é¢é£æ§ãç¶æãããçè«çãªæ¦å¿µãå®ç¤¾ä¼ã®ã·ããªãªã§ã©ã®ããã«é©ç¨ãããããã¡ã³ãã¼ãçè§£ããã®ã«å½¹ç«ã¡ã¾ãã</p>
<h2 id="ããã¯ã¯ã©ãã§æ±ããããã¯">ããã¯ã¯ã©ãã§æ±ããããã¯</h2>
<p><strong>FSM</strong>: æ¸ç±ã®ä¸»ãªãããã¯ã¯ãKubernetesãGitOpsãã»ãã¥ãªãã£ãSREããªãã¶ã¼ãããªãã£ã«ãªã£ã¦ãã¾ãã
ããã¯ã¨ãã«äººæ°ã¨ãã観ç¹ã§ãCloud Native Landscapeã®åæ ã§ããããï¼</p>
<p><strong>CS</strong>: ç§ãã¡ã®æ
ã¯ãProduction Kubernetesãããå§ã¾ããå®ç¨çãªæ¬çªç°å¢åãã®ã½ãªã¥ã¼ã·ã§ã³ã«ç¦ç¹ãå½ã¦ãæ¹åæ§ãè¨å®ãã¾ããã
ãã以æ¥ãç§ãã¡ã¯CNCF Landscapeã®ãã¾ãã¾ãªå´é¢ãæãä¸ããç°ãªããã¼ãã«æ²¿ã£ã¦æ¬ãæãã¦ãã¾ãã
åãã¼ãã¯ããããã»ãã¥ãªãã£ã§ããããªãã¶ã¼ãããªãã£ã§ããããµã¼ãã¹ã¡ãã·ã¥ã§ãããã³ãã¥ããã£å
ã®é¢é£æ§ã¨éè¦ã«ãã¨ã¥ãã¦é¸æããã¦ãã¾ãã
ãã¨ãã°ãKubernetesèªå®ã«é¢ããæè¿ã®ãã¼ãã§ã¯ãæ¸ç±ã®èè
ãç©æ¥µçãªãã¹ãã¨ãã¦åå ãããå½¼ãã®å°éç¥èã§è°è«ãå
å®ããã¾ããã</p>
<p><strong>FSM</strong>: ããã¸ã§ã¯ãã«æè¿å¤åããã£ããã¨ã¯ç¥ã£ã¦ãã¾ãã<a href="https://community.cncf.io/">Cloud Native Community Group</a>ã¨ãã¦CNCFã«çµ±åããããã¨ã§ãã
ãã®å¤æ´ã«ã¤ãã¦å°ãã話ããã ãã¾ããï¼</p>
<p><strong>CS</strong>: CNCFã¯ããã¯ã¯ã©ããCloud Native Community Groupã¨ãã¦å¿«ãåãå
¥ãã¦ããã¾ããã
ããã¯ç§ãã¡ã®éå¶ãåçåããå½±é¿ç¯å²ãæ¡å¤§ããéè¦ãªé²å±ã§ãã
ãã®é£æºã¯Kubernetes Community Days (KCD)ã®ãã¼ãã¢ããã§ä½¿ç¨ããã¦ãããã®ã¨åæ§ã«ãç®¡çæ©è½ã®å¼·åã«å½¹ç«ã£ã¦ãã¾ãã
ç¾å¨ã§ã¯ãã¡ã³ãã¼ã·ãããã¤ãã³ãã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ãã¡ã¼ãªã³ã°ãªã¹ããWebã«ã³ãã¡ã¬ã³ã¹ã®éå¬ãã»ãã·ã§ã³ã®è¨é²ãªã©ãããå¼·åºãªä½å¶ãæ´ã£ã¦ãã¾ãã</p>
<p><strong>FSM</strong>: CNCFã¨ã®é¢ããã¯ããã®åå¹´éã®Kubernetesããã¯ã¯ã©ãã®æé·ãã¨ã³ã²ã¼ã¸ã¡ã³ãã«ã©ã®ãããªå½±é¿ãä¸ãã¾ãããï¼</p>
<p><strong>CS</strong>: åå¹´åã«CNCFã³ãã¥ããã£ã®ä¸å¡ã«ãªã£ã¦ä»¥æ¥ãKubernetesããã¯ã¯ã©ãã§ã¯å¤§ããªå®éçãªå¤åãç®ã®å½ããã«ãã¦ãã¾ããã
ä¼å¡æ°ã¯600人以ä¸ã«æ¥å¢ãããã®éã«40以ä¸ã®ã¤ãã³ããä¼ç»ã»å®æ½ãããã¨ã«æåãã¾ããã
ããã«æå¾
ãããã®ã¯ã1åã®ã¤ãã³ãã«å¹³å30人ãåå ããã¨ããå®å®ããå塿°ã§ãã
ãã®æé·ã¨ã¨ã³ã²ã¼ã¸ã¡ã³ãã¯ãã³ãã¥ããã£ã«ãããå½±é¿ãKubernetesããã¯ã¯ã©ãã®å½±é¿ç¯å²ã«é¢ãã¦ãç§ãã¡ã®CNCFå çãè¯å®çãªå½±é¿ã§ããæç¢ºãªææ¨ã§ãã</p>
<h2 id="ããã¯ã¯ã©ãã«åå ãã">ããã¯ã¯ã©ãã«åå ãã</h2>
<p><strong>FSM</strong>: åå ã叿ãã人ã¯ãã©ãããã°ããã®ã§ããããï¼</p>
<p><strong>CS</strong>: åå ããããã«ã¯3ã¤ã®æ®µéãããã¾ãã</p>
<ul>
<li>ã¾ãã<a href="https://community.cncf.io/kubernetes-virtual-book-club/">Kubernetesããã¯ã¯ã©ãã³ãã¥ããã£</a>ã«åå ãã¾ã</li>
<li>次ã«ãã³ãã¥ããã£ãã¼ã¸ä¸ã®<a href="https://community.cncf.io/kubernetes-virtual-book-club/">ã¤ãã³ã</a>ã«åºæ¬ é£çµ¡ããã¾ã</li>
<li>æå¾ã«ãCNCFã®Slackãã£ã³ãã«<a href="https://cloud-native.slack.com/archives/C05EYA14P37">#kubernetes-book-club</a>ã«åå ãã¾ã</li>
</ul>
<p><strong>FSM</strong>: ç´ æ´ãããããããã¨ããããã¾ãï¼æå¾ã«ä½ãã³ã¡ã³ãããé¡ããã¾ãã</p>
<p><strong>CS</strong>: Kubernetesããã¯ã¯ã©ãã¯ãåã«æ¬ã«ã¤ãã¦è°è«ããå°éå®¶ã®ã°ã«ã¼ãã¨ããã ãã§ã¯ãªãããã以ä¸ã§ãã
ããã¯ã<a href="https://www.linkedin.com/in/neependra/">Neependra Khare</a>ããã<a href="https://www.linkedin.com/in/ericsmalling/">Eric Smalling</a>ããã<a href="https://www.linkedin.com/in/sevikarakulak/">Sevi Karakulak</a>ããã<a href="https://www.linkedin.com/in/chadmcrowell/">Chad M. Crowell</a>ãããããã¦<a href="https://www.linkedin.com/in/walidshaari/">Walid (CNJ) Shaari</a>ããã®ä¸»å¬ã¨ä¼ç»ãæä¼ã£ã¦ãããç´ æ´ããããã©ã³ãã£ã¢ã§ãããæ´»æ°ã®ããã³ãã¥ããã£ã§ãã
KubeConã§ç§ãã¡ãè¦ã¦ãKubernetesããã¯ã¯ã©ãã®ã¹ããã«ã¼ãã²ãããã¦ãã ããï¼</p>
- Kubernetesã§ã³ã³ãããå¥ãã¡ã¤ã«ã·ã¹ãã ã«æ ¼ç´ããè¨å®æ¹æ³https://kubernetes.io/ja/blog/2024/01/23/kubernetes-separate-image-filesystem/Tue, 23 Jan 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/01/23/kubernetes-separate-image-filesystem/
<p>Kubernetesã¯ã©ã¹ã¿ã¼ã®ç¨¼åãéç¨ããä¸ã§ããããåé¡ã¯ããã£ã¹ã¯å®¹éãä¸è¶³ãããã¨ã§ãã
ãã¼ãããããã¸ã§ãã³ã°ãããéã«ã¯ãã³ã³ããã¤ã¡ã¼ã¸ã¨å®è¡ä¸ã®ã³ã³ããã®ããã«ååãªã¹ãã¬ã¼ã¸ã¹ãã¼ã¹ã確ä¿ãããã¨ãéè¦ã§ãã
é常ã<a href="https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/">ã³ã³ããã©ã³ã¿ã¤ã </a>ã¯<code>/var</code>ã«æ¸ãè¾¼ã¿ã¾ãã
ããã¯å¥ã®ãã¼ãã£ã·ã§ã³ã¨ãã¦ãã«ã¼ããã¡ã¤ã«ã·ã¹ãã ä¸ã«é
ç½®ã§ãã¾ãã
CRI-Oã¯ããã©ã«ãã§ãã³ã³ããã¨ã¤ã¡ã¼ã¸ã<code>/var/lib/containers</code>ã«æ¸ãè¾¼ã¿ã¾ãããcontainerdã¯ã³ã³ããã¨ã¤ã¡ã¼ã¸ã<code>/var/lib/containerd</code>ã«æ¸ãè¾¼ã¿ã¾ãã</p>
<p>ãã®ããã°è¨äºã§ã¯ãã³ã³ããã©ã³ã¿ã¤ã ãããã©ã«ãã®ãã¼ãã£ã·ã§ã³ã¨ã¯å¥ã«ã³ã³ãã³ããä¿åããæ¹æ³ã«æ³¨ç®ãããã¨æãã¾ãã
ããã«ãããKubernetesã®è¨å®ãããæè»ã«è¡ããã¨ãã§ããããã©ã«ãã®ãã¡ã¤ã«ã·ã¹ãã ã¯ãã®ã¾ã¾ã«ãã³ã³ããã¹ãã¬ã¼ã¸ç¨ã«å¤§ããªãã£ã¹ã¯ã追å ããæ¹æ³ãæä¾ããã¾ãã</p>
<p>ããå°ã説æãå¿
è¦ãªé åã¯ãKubernetesããã£ã¹ã¯ã«æ¸ãè¾¼ãå ´æ/å
容ã§ãã</p>
<h2 id="kubernetesãã£ã¹ã¯ä½¿ç¨ç¶æ³ãçè§£ãã">Kubernetesãã£ã¹ã¯ä½¿ç¨ç¶æ³ãçè§£ãã</h2>
<p>Kubernetesã«ã¯æ°¸ç¶(persistent)ãã¼ã¿ã¨ä¸æ(ephemeral)ãã¼ã¿ãããã¾ãã
kubeletã¨ãã¼ã«ã«ã®Kubernetesåºæã¹ãã¬ã¼ã¸ã®ãã¼ã¹ãã¹ã¯è¨å®å¯è½ã§ãããé常ã¯<code>/var/lib/kubelet</code>ã¨æ³å®ããã¦ãã¾ãã
Kubernetesã®ããã¥ã¡ã³ãã§ã¯ãããã¯æã
ã«ã¼ããã¡ã¤ã«ã·ã¹ãã ã¾ãã¯ãã¼ããã¡ã¤ã«ã·ã¹ãã ã¨å¼ã°ãã¾ãã
ãã®ãã¼ã¿ã®å¤§é¨åã¯ã次ã®ããã«ã«ãã´ãªã¼åãããã¾ãã</p>
<ul>
<li>ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸</li>
<li>ãã°</li>
<li>ã³ã³ããã©ã³ã¿ã¤ã </li>
</ul>
<p>ã«ã¼ã/ãã¼ãã»ãã¡ã¤ã«ã·ã¹ãã ã¯<code>/</code>ã§ã¯ãªãã<code>/var/lib/kubelet</code>ããããã£ã¹ã¯ã®ãããã»ã¨ãã©ã®POSIXã·ã¹ãã ã¨ã¯ç°ãªãã¾ãã</p>
<h3 id="ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸">ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸</h3>
<p>Podãã³ã³ããã¯ãåä½ã«ä¸æçã¾ãã¯çæçãªãã¼ã«ã«ã¹ãã¬ã¼ã¸ãå¿
è¦ã¨ããå ´åãããã¾ãã
ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ã®å¯¿å½ã¯åã
ã®Podã®å¯¿å½ãè¶
ãããã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ã¯Podéã§å
±æãããã¨ã¯ã§ãã¾ããã</p>
<h3 id="ãã°">ãã°</h3>
<p>ããã©ã«ãã§ã¯ãKubernetesã¯åå®è¡ä¸ã®ã³ã³ããã®ãã°ã<code>/var/log</code>å
ã®ãã¡ã¤ã«ã¨ãã¦ä¿åãã¾ãã
ãããã®ãã°ã¯ä¸æçã§ãããããããå®è¡ããã¦ããéã«å¤§ãããªããããªãããã«kubeletã«ãã£ã¦ç£è¦ããã¾ãã</p>
<p>åãã¼ãã®<a href="https://kubernetes.io/ja/docs/concepts/cluster-administration/logging/#log-rotation">ãã°ãã¼ãã¼ã·ã§ã³</a>è¨å®ãã«ã¹ã¿ãã¤ãºãã¦ãããã®ãã°ã®ãµã¤ãºã管çãããã¼ããã¼ã«ã«ã¹ãã¬ã¼ã¸ã«ä¾åããªãããã«ãã°ã®é
ä¿¡ãè¨å®ãããã¨ãã§ãã¾ã(ãµã¼ããã¼ãã£ã¼ã®ã½ãªã¥ã¼ã·ã§ã³ã使ç¨)ã</p>
<h3 id="ã³ã³ããã©ã³ã¿ã¤ã ">ã³ã³ããã©ã³ã¿ã¤ã </h3>
<p>ã³ã³ããã©ã³ã¿ã¤ã ã«ã¯ãã³ã³ããã¨ã¤ã¡ã¼ã¸ã®ããã®2ã¤ã®ç°ãªãã¹ãã¬ã¼ã¸é åãããã¾ãã</p>
<ul>
<li>
<p>èªã¿åãå°ç¨ã¬ã¤ã¤ã¼:ã¤ã¡ã¼ã¸ã¯é常ãã³ã³ãããå®è¡ããã¦ããéã«å¤æ´ãããªããããèªã¿åãå°ç¨ã¬ã¤ã¤ã¼ã¨ãã¦è¡¨ããã¾ããèªã¿åãå°ç¨ã¬ã¤ã¤ã¼ã«ã¯ãè¤æ°ã®ã¬ã¤ã¤ã¼ãçµã¿åãããã¦åä¸ã®èªã¿åãå°ç¨ã¬ã¤ã¤ã¼ã«ãªããã¨ãããã¾ããã³ã³ããããã¡ã¤ã«ã·ã¹ãã ã«æ¸ãè¾¼ãã§ããå ´åãã³ã³ããã®ä¸ã«ã¯ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ãæä¾ããèãã¬ã¤ã¤ã¼ãããã¾ãã</p>
</li>
<li>
<p>æ¸ãè¾¼ã¿å¯è½ã¬ã¤ã¤ã¼:ã³ã³ããã©ã³ã¿ã¤ã ã«ãã£ã¦ã¯ããã¼ã«ã«ã®æ¸ãè¾¼ã¿ãã¬ã¤ã¤ã¼åãããæ¸ãè¾¼ã¿ã¡ã«ããºã (ãã¨ãã°ãLinuxä¸ã®<code>overlayfs</code>ãWindowsä¸ã®CimFS)ã¨ãã¦å®è£
ããããã¨ãããã¾ããããã¯æ¸ãè¾¼ã¿å¯è½ã¬ã¤ã¤ã¼ã¨å¼ã°ãã¾ãããã¼ã«ã«ã®æ¸ãè¾¼ã¿ã¯ãã³ã³ããã¤ã¡ã¼ã¸ã®å®å
¨ãªã¯ãã¼ã³ã§åæåãããæ¸ãè¾¼ã¿å¯è½ãªãã¡ã¤ã«ã·ã¹ãã ã使ç¨ããå ´åãããã¾ããããã¯ããã¤ãã¼ãã¤ã¶ä»®æ³åã«åºã¥ãä¸é¨ã®ã©ã³ã¿ã¤ã ã§ä½¿ç¨ããã¾ãã</p>
</li>
</ul>
<p>ã³ã³ããã©ã³ã¿ã¤ã ã®ãã¡ã¤ã«ã·ã¹ãã ã«ã¯ãèªã¿åãå°ç¨ã¬ã¤ã¤ã¼ã¨æ¸ãè¾¼ã¿å¯è½ã¬ã¤ã¤ã¼ã®ä¸¡æ¹ãå«ã¾ãã¾ããããã¯Kubernetesããã¥ã¡ã³ãã§ã¯<code>imagefs</code>ã¨è¦ãªããã¦ãã¾ãã</p>
<h2 id="ã³ã³ããã©ã³ã¿ã¤ã ã®æ§æ">ã³ã³ããã©ã³ã¿ã¤ã ã®æ§æ</h2>
<h3 id="cri-o">CRI-O</h3>
<p>CRI-Oã¯ãã³ã³ããã©ã³ã¿ã¤ã ãæ°¸ç¶ãã¼ã¿ã¨ä¸æãã¼ã¿ãã©ã®ããã«ä¿åããããå¶å¾¡ããããã®TOMLå½¢å¼ã®ã¹ãã¬ã¼ã¸æ§æãã¡ã¤ã«ã使ç¨ãã¾ãã
CRI-Oã¯<a href="https://github.com/containers/storage">ã¹ãã¬ã¼ã¸ã©ã¤ãã©ãª</a>ãå©ç¨ãã¾ãã
ä¸é¨ã®Linuxãã£ã¹ããªãã¥ã¼ã·ã§ã³ã«ã¯ãã¹ãã¬ã¼ã¸ã«é¢ããããã¥ã¢ã«ã¨ã³ããª(<code>man 5 containers-storage.conf</code>)ãããã¾ãã
ã¹ãã¬ã¼ã¸ã®ä¸»ãªè¨å®ã¯ã<code>/etc/containers/storage.conf</code>ã«ããã䏿ãã¼ã¿ã®å ´æãã«ã¼ããã£ã¬ã¯ããªãå¶å¾¡ãããã¨ãã§ãã¾ãã
ã«ã¼ããã£ã¬ã¯ããªã¯ãCRI-Oãæ°¸ç¶ãã¼ã¿ãä¿åããå ´æã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span>[storage]
</span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># Default storage driver</span>
</span></span><span style="display:flex;"><span>driver = <span style="color:#b44">"overlay"</span>
</span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># Temporary storage location</span>
</span></span><span style="display:flex;"><span>runroot = <span style="color:#b44">"/var/run/containers/storage"</span>
</span></span><span style="display:flex;"><span><span style="color:#080;font-style:italic"># Primary read/write location of container storage</span>
</span></span><span style="display:flex;"><span>graphroot = <span style="color:#b44">"/var/lib/containers/storage"</span>
</span></span></code></pre></div><ul>
<li><code>graphroot</code>
<ul>
<li>ã³ã³ããã©ã³ã¿ã¤ã ããä¿åãããæ°¸ç¶ãã¼ã¿ãæãã¾ã</li>
<li>SELinuxãæå¹ã«ãªã£ã¦ããå ´åãããã¯<code>/var/lib/containers/storage</code>ã¨ä¸è´ãããå¿
è¦ãããã¾ã</li>
</ul>
</li>
<li><code>runroot</code>
<ul>
<li>ã³ã³ããã«å¯¾ãã䏿çãªèªã¿æ¸ãã¢ã¯ã»ã¹ãæä¾ãã¾ã</li>
<li>ããã¯ä¸æãã¡ã¤ã«ã·ã¹ãã ã«é
ç½®ãããã¨ãæ¨å¥¨ãã¾ã</li>
</ul>
</li>
</ul>
<p>ããã§ã¯ã<code>/var/lib/containers/storage</code>ã«åãããã«graphrootãã£ã¬ã¯ããªã®ã©ãã«ã夿´ããç°¡åãªæ¹æ³ãç´¹ä»ãã¾ã:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>semanage fcontext -a -e /var/lib/containers/storage <YOUR-STORAGE-PATH>
</span></span><span style="display:flex;"><span>restorecon -R -v <YOUR-STORAGE-PATH>
</span></span></code></pre></div><h3 id="containerd">containerd</h3>
<p>ã³ã³ããã©ã³ã¿ã¤ã ã§ããcontainerdã¯ãæ°¸ç¶ãã¼ã¿ã¨ä¸æãã¼ã¿ã®ä¿åå
ãå¶å¾¡ããããã®TOMLå½¢å¼ã®æ§æãã¡ã¤ã«ã使ç¨ãã¾ããæ§æãã¡ã¤ã«ã®ããã©ã«ããã¹ã¯ã<code>/etc/containerd/config.toml</code>ã«ããã¾ãã</p>
<p>containerdã¹ãã¬ã¼ã¸ã®é¢é£ãã£ã¼ã«ãã¯ã<code>root</code>ã¨<code>state</code>ã§ãã</p>
<ul>
<li><code>root</code>
<ul>
<li>containerdã®ã¡ã¿ãã¼ã¿ã®ã«ã¼ããã£ã¬ã¯ããª</li>
<li>ããã©ã«ãã¯<code>/var/lib/containerd</code>ã§ã</li>
<li>ã¾ããOSããããè¦æ±ããå ´åã¯ãã«ã¼ãã«SELinuxã©ãã«ãå¿
è¦ã§ã</li>
</ul>
</li>
<li><code>state</code>
<ul>
<li>containerdã®ä¸æãã¼ã¿</li>
<li>ããã©ã«ãã¯ã<code>/run/containerd</code>ã§ã</li>
</ul>
</li>
</ul>
<h2 id="kubernetesãã¼ãã®å§è¿«ã«ããéé¿">Kubernetesãã¼ãã®å§è¿«ã«ããéé¿</h2>
<p>Kubernetesã¯ãã³ã³ãããã¡ã¤ã«ã·ã¹ãã ããã¼ããã¡ã¤ã«ã·ã¹ãã ã¨åé¢ããã¦ãããã©ãããèªåçã«æ¤åºãã¾ãã
ãã¡ã¤ã«ã·ã¹ãã ãåé¢ããå ´åãKubernetesã¯ãã¼ããã¡ã¤ã«ã·ã¹ãã ã¨ã³ã³ããã©ã³ã¿ã¤ã ãã¡ã¤ã«ã·ã¹ãã ã®ä¸¡æ¹ãç£è¦ãã責任ãããã¾ãã
Kubernetesããã¥ã¡ã³ãã§ã¯ããã¼ããã¡ã¤ã«ã·ã¹ãã ã¨ã³ã³ããã©ã³ã¿ã¤ã ãã¡ã¤ã«ã·ã¹ãã ãããããnodefsã¨imagefsã¨å¼ãã§ãã¾ãã
nodefsã¾ãã¯imagefsã®ããããããã£ã¹ã¯å®¹éä¸è¶³ã«ãªãã¨ããã¼ãå
¨ä½ããã£ã¹ã¯å§è¿«ãããã¨è¦ãªããã¾ãã
Kubernetesã¯ãã¾ãæªä½¿ç¨ã®ã³ã³ãããã¤ã¡ã¼ã¸ãåé¤ãã¦ã¹ãã¼ã¹ãååãããã®å¾ã«ãããã追ãåºããã¨ã§ã¹ãã¼ã¹ãåå©ç¨ãã¾ãã
nodefsã¨imagefsã®ä¸¡æ¹ãæã¤ãã¼ãã§ã¯ãkubeletã¯imagefsä¸ã®æªä½¿ç¨ã®ã³ã³ããã¤ã¡ã¼ã¸ã<a href="https://kubernetes.io/ja/docs/concepts/architecture/garbage-collection/#containers-images">ã¬ãã¼ã¸ã³ã¬ã¯ã</a>ããnodefsããã¯çµäºãããããã¨ãããã®ã³ã³ãããåé¤ãã¾ãã
nodefsã®ã¿ãåå¨ããå ´åãKubernetesã®ã¬ãã¼ã¸ã³ã¬ã¯ã·ã§ã³ã«ã¯ãçµäºããã³ã³ãããããããããã¦æªä½¿ç¨ã®ã¤ã¡ã¼ã¸ãå«ã¾ãã¾ãã</p>
<p>Kubernetesã§ã¯ããã£ã¹ã¯ããã£ã±ããã©ããã夿ããããã®ããå¤ãã®æ§æãå¯è½ã§ãã
kubeletå
ã®éé¿ããã¼ã¸ã£ã¼ã«ã¯ãé¢é£ããé¾å¤ãå¶å¾¡ããããã¤ãã®æ§æè¨å®ãããã¾ãã
ãã¡ã¤ã«ã·ã¹ãã ã®å ´åãé¢é£ããæ¸¬å®å¤ã¯<code>nodefs.available</code>ã<code>nodefs.inodesfree</code>ã<code>imagefs.available</code>ãããã³<code>imagefs.inodesfree</code>ã§ãã
ã³ã³ããã©ã³ã¿ã¤ã ç¨ã«å°ç¨ã®ãã£ã¹ã¯ããªãå ´åãimagefsã¯ç¡è¦ããã¾ãã</p>
<p>ã¦ã¼ã¶ã¼ã¯ãæ¢åã®ããã©ã«ãå¤ã使ç¨ã§ãã¾ã:</p>
<ul>
<li><code>memory.available</code> < 100MiB</li>
<li><code>nodefs.available</code> < 10%</li>
<li><code>imagefs.available</code> < 15%</li>
<li><code>nodefs.inodesFree</code> < 5% (Linuxãã¼ã)</li>
</ul>
<p>Kubernetesã§ã¯ãkubeletã®æ§æãã¡ã¤ã«å
ã®<code>EvictionHard</code>ã¨<code>EvictionSoft</code>ã«ã¦ã¼ã¶ã¼å®ç¾©ã®å¤ãè¨å®ãããã¨ãã§ãã¾ãã</p>
<p><code>EvictionHard</code>
éçå¤ãå®ç¾©ãã¾ãããããã®éçå¤ãè¶
ããã¨ãGrace Periodãªãã§ãããã追ãåºããã¾ãã</p>
<p><code>EvictionSoft</code>
éçå¤ãå®ç¾©ãã¾ãããããã®éçå¤ãè¶
ããã¨ãGrace Periodãè¨å®ãããã·ã°ãã«ãã¨ã«ãããã追ãåºããã¾ãã</p>
<p><code>EvictionHard</code>ã®å¤ãæå®ããã¨ãããã©ã«ãå¤ãç½®ãæãããã¾ãã
ãããã£ã¦ããã¹ã¦ã®ã·ã°ãã«ãè¨å®ãããã¨ãéè¦ã§ãã</p>
<p>ãã¨ãã°ã次ã«ç¤ºãkubeletã®è¨å®ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals-and-thresholds">éé¿ã·ã°ãã«</a>ã¨ç¶äºæéãªãã·ã§ã³ãè¨å®ããããã«ä½¿ç¨ã§ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>kubelet.config.k8s.io/v1beta1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>KubeletConfiguration<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">address</span>:<span style="color:#bbb"> </span><span style="color:#b44">"192.168.0.8"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">port</span>:<span style="color:#bbb"> </span><span style="color:#666">20250</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">serializeImagePulls</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">evictionHard</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">memory.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"100Mi"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"10%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"5%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"15%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"5%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">evictionSoft</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">memory.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"100Mi"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"10%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"5%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"15%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"5%"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">evictionSoftGracePeriod</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">memory.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"1m30s"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"2m"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"2m"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.available</span>:<span style="color:#bbb"> </span><span style="color:#b44">"2m"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">imagefs.inodesFree</span>:<span style="color:#bbb"> </span><span style="color:#b44">"2m"</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">evictionMaxPodGracePeriod</span>:<span style="color:#bbb"> </span>60s<span style="color:#bbb">
</span></span></span></code></pre></div><h2 id="åé¡ç¹">åé¡ç¹</h2>
<p>Kubernetesããã¸ã§ã¯ãã§ã¯ãéé¿ã®ããã©ã«ãè¨å®ã使ç¨ããããéé¿ã«é¢é£ãããã¹ã¦ã®ãã£ã¼ã«ããè¨å®ãããã¨ããå§ããã¦ãã¾ãã
ããã©ã«ãè¨å®ã使ç¨ããããç¬èªã®<code>evictionHard</code>è¨å®ãæå®ã§ãã¾ãã
ã·ã°ãã«ã®è¨å®ãå¿ããã¨ãKubernetesã¯ãã®ãªã½ã¼ã¹ãç£è¦ãã¾ããã
管çè
ãã¦ã¼ã¶ã¼ãééããå¯è½æ§ã®ããä¸è¬çãªè¨å®ãã¹ã®1ã¤ã¯ãæ°ãããã¡ã¤ã«ã·ã¹ãã ã<code>/var/lib/containers/storage</code>ã¾ãã¯<code>/var/lib/containerd</code>ã«ãã¦ã³ããããã¨ã§ãã
Kubernetesã¯å¥ã®ãã¡ã¤ã«ã·ã¹ãã ãæ¤åºããããããããè¡ã£ãå ´åã¯<code>imagefs.inodesfree</code>ã¨<code>imagefs.available</code>ãå¿
è¦ã«å¿ãã¦è¨å®ã«ä¸è´ãã¦ãããã¨ã確èªããå¿
è¦ãããã¾ãã</p>
<p>ããä¸ã¤ã®æ··ä¹±ã®é åã¯ãã¤ã¡ã¼ã¸ãã¡ã¤ã«ã·ã¹ãã ããã¼ãã«å®ç¾©ããå ´åã§ããã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ã®å ±åãå¤ãããªããã¨ã§ãã
ã¤ã¡ã¼ã¸ãã¡ã¤ã«ã·ã¹ãã (<code>imagefs</code>)ã¯ãã³ã³ããã¤ã¡ã¼ã¸ã®ã¬ã¤ã¤ã¼ãä¿åããããã«ä½¿ç¨ããã¾ãã
ã³ã³ãããèªåèªèº«ã®ã«ã¼ããã¡ã¤ã«ã·ã¹ãã ã«æ¸ãè¾¼ãå ´åããã®ãã¼ã«ã«ãªæ¸ãè¾¼ã¿ã¯ã³ã³ããã¤ã¡ã¼ã¸ã®ãµã¤ãºã«ã¯å«ã¾ãã¾ããã
ã³ã³ããã©ã³ã¿ã¤ã ããããã®ãã¼ã«ã«ãªå¤æ´ãä¿åããå ´æã¯ãã©ã³ã¿ã¤ã ã«ãã£ã¦å®ç¾©ããã¾ãããé常ã¯ã¤ã¡ã¼ã¸ãã¡ã¤ã«ã·ã¹ãã ã§ãã
Podå
ã®ã³ã³ããããã¡ã¤ã«ã·ã¹ãã ãããã¯ã¨ã³ãã¨ãã<code>emptyDir</code>ããªã¥ã¼ã ã«æ¸ãè¾¼ãã§ããå ´åãããã¯ãã¼ããã¡ã¤ã«ã·ã¹ãã ããã¹ãã¼ã¹ã使ç¨ãã¾ãã
kubeletã¯å¸¸ã«ã<code>nodefs</code>ã§è¡¨ããããã¡ã¤ã«ã·ã¹ãã ã«åºã¥ãã¦ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ã®å®¹éã¨å²ãå½ã¦ãå ±åãã¾ãã
ããã¯ãå®éã«ã¯ä¸æçãªæ¸ãè¾¼ã¿ãã¤ã¡ã¼ã¸ãã¡ã¤ã«ã·ã¹ãã ã«è¡ããã¦ããå ´åã«æ··ä¹±ã®åå ã¨ãªãå¯è½æ§ãããã¾ãã</p>
<h2 id="ä»å¾ã®èª²é¡">ä»å¾ã®èª²é¡</h2>
<p><a href="https://github.com/kubernetes/enhancements/issues/4191">KEP-4191</a>ã«åãçµããã¨ã§ãã¨ãã§ã¡ã©ã«ã®å ±åã®å¶éãè§£æ¶ããã³ã³ããã©ã³ã¿ã¤ã ã«ããå¤ãã®æ§æãªãã·ã§ã³ãæä¾ãããã¨ãæå¾
ããã¦ãã¾ãã
ãã®ææ¡ã§ã¯ãKubernetesã¯æ¸ãè¾¼ã¿å¯è½ãªã¬ã¤ã¤ã¼ãèªã¿åãå°ç¨ã®ã¬ã¤ã¤ã¼(ã¤ã¡ã¼ã¸)ã¨åé¢ããã¦ãããã©ãããæ¤åºãã¾ãã
ããã«ãããæ¸ãè¾¼ã¿å¯è½ãªã¬ã¤ã¤ã¼ãå«ããã¹ã¦ã®ã¨ãã§ã¡ã©ã«ã¹ãã¬ã¼ã¸ãåããã£ã¹ã¯ã«é
ç½®ãããã¨ãå¯è½ã«ãªãã¾ãã
ã¾ããã¤ã¡ã¼ã¸ç¨ã«å¥ã®ãã£ã¹ã¯ã使ç¨ãããã¨ãå¯è½ã«ãªãã¾ãã</p>
<h2 id="åå ããããã«ã¯ã©ãããã°ããã§ãã">åå ããããã«ã¯ã©ãããã°ããã§ããï¼</h2>
<p>åå ãããå ´åã¯ãKubernetesã®<a href="https://github.com/kubernetes/community/tree/master/sig-node">SIG Node</a>ã«åå ãããã¨ãã§ãã¾ãã</p>
<p>ãã£ã¼ãããã¯ãå
±æãããå ´åã¯ãSlackãã£ã³ãã«ã®<a href="https://kubernetes.slack.com/archives/C0BP8PW9G">#sig-node</a>ã§è¡ããã¨ãã§ãã¾ãã
ã¾ã ãã®Slackã¯ã¼ã¯ã¹ãã¼ã¹ã«åå ãã¦ããªãå ´åã¯ã<a href="https://slack.k8s.io/">https://slack.k8s.io/</a>ããæå¾
ç¶ãåå¾ã§ãã¾ãã</p>
<p>ç´ æ´ãããã¬ãã¥ã¼ãæä¾ããè²´éãªæ´å¯ãå
±æãããããã¯ã®ã¢ã¤ãã¢ãææ¡ãã¦ããããã¹ã¦ã®ã³ã³ããªãã¥ã¼ã¿ã¼ã«ç¹å¥ãªæè¬ãæ§ãã¾ãã</p>
<ul>
<li>Peter Hunt</li>
<li>Mrunal Patel</li>
<li>Ryan Phillips</li>
<li>Gaurav Singh</li>
</ul>
- SIG Releaseã¹ãããã©ã¤ã(ãªãªã¼ã¹ã»ãã¼ã ã»ãµãããã¸ã§ã¯ã)https://kubernetes.io/ja/blog/2024/01/15/sig-release-spotlight-2023/Mon, 15 Jan 2024 00:00:00 +0000https://kubernetes.io/ja/blog/2024/01/15/sig-release-spotlight-2023/
<p>ãªãªã¼ã¹ã»ã¹ãã·ã£ã«ã»ã¤ã³ã¿ã¬ã¹ãã»ã°ã«ã¼ã(SIG Release)ã¯ãKubernetesã4ã¶æãã¨ã«æå
ç«¯ã®æ©è½ã¨ãã°ä¿®æ£ã§ãã®åãç ãå ´æã§ããKubernetesã®ãããªå¤§ããªããã¸ã§ã¯ãããæ°ãã¼ã¸ã§ã³ããªãªã¼ã¹ããã¾ã§ã®ã¿ã¤ã ã©ã¤ã³ãã©ã®ããã«å¹ççã«ç®¡çãã¦ããã®ããã¾ããªãªã¼ã¹ãã¼ã ã®å
é¨ã¯ã©ã®ããã«ãªã£ã¦ããã®ããèãããã¨ã¯ããã¾ããï¼ãã®ãããªçåã«èå³ãããæ¹ããã£ã¨ç¥ãããæ¹ãSIG Releaseã®ä»äºã«é¢ããããæ¹ã¯ããã²èªãã§ã¿ã¦ãã ããï¼</p>
<p>SIG Releaseã¯Kubernetesã®éçºã¨é²åã«ããã¦éè¦ãªå½¹å²ãæ
ã£ã¦ãã¾ãããã®ä¸»ãªè²¬ä»»ã¯ãKubernetesã®æ°ãã¼ã¸ã§ã³ã®ãªãªã¼ã¹ããã»ã¹ã管çãããã¨ã§ãã<a href="https://www.kubernetes.dev/resources/release/">é常3ã4ã¶æãã¨</a>ã®å®æçãªãªãªã¼ã¹ãµã¤ã¯ã«ã§éå¶ããã¦ãã¾ãããã®ãµã¤ã¯ã«ã®éãKubernetesãªãªã¼ã¹ãã¼ã ã¯ä»ã®SIGãã³ã³ããªãã¥ã¼ã¿ã¼ã¨å¯æ¥ã«é£æºããåæ»ã§ãã¾ã調æ´ããããªãªã¼ã¹ãä¿è¨¼ãã¾ããããã«ã¯ããªãªã¼ã¹ã¹ã±ã¸ã¥ã¼ã«ã®è¨ç»ãã³ã¼ãããªã¼ãºã¨ãã¹ããã§ã¼ãºã®æéã®è¨å®ããã¤ããªãããã¥ã¡ã³ãããªãªã¼ã¹ãã¼ããªã©ã®ãªãªã¼ã¹ææç©ã®ä½æãå«ã¾ãã¾ãã</p>
<p>ããã«èªã¿é²ããåã«ãSIG Releaseã«ã¯ãªãªã¼ã¹ã»ã¨ã³ã¸ãã¢ãªã³ã°ã¨ãªãªã¼ã¹ã»ãã¼ã ã¨ãã2ã¤ã®ãµãããã¸ã§ã¯ãããããã¨ã«æ³¨æãã¦ãã ããã</p>
<p>ãã®ããã°è¨äºã§ã¯ã<a href="https://twitter.com/nitishfy">Nitish Kumar</a>ãSIG Releaseã®ãã¯ãã«ã«ã»ãªã¼ãã¼ã§ããVerónica López (PlanetScale)ã«ã¤ã³ã¿ãã¥ã¼ããRelease Teamãµãããã¸ã§ã¯ãã«ã¹ãããã©ã¤ããå½ã¦ããªãªã¼ã¹ã»ããã»ã¹ãã©ã®ããã«è¦ããããããã¦åå ããæ¹æ³ã«ã¤ãã¦èª¬æãã¾ãã</p>
<ol>
<li>
<p><strong>æåã®è¨ç»ããæçµçãªãªãªã¼ã¹ã¾ã§ãKubernetesã®æ°ãã¼ã¸ã§ã³ã®å
¸åçãªãªãªã¼ã¹ããã»ã¹ã¯ã©ã®ãããªãã®ã§ããï¼ã¹ã ã¼ãºãªãªãªã¼ã¹ãä¿è¨¼ããããã«ä½¿ç¨ãã¦ããç¹å®ã®æ¹æ³è«ããã¼ã«ã¯ããã¾ããï¼</strong></p>
<p>Kubernetesã®æ°ãã¼ã¸ã§ã³ã®ãªãªã¼ã¹ããã»ã¹ã¯ãååã«æ§é åãããã³ãã¥ããã£ä¸»å°ã®åãçµã¿ã§ããç§ãã¡ãå¾ãç¹å®ã®æ¹æ³è«ããã¼ã«ã¯ããã¾ããããç©äºãæ´çãã¦ããããã®ä¸é£ã®æé ãè¨è¼ããã«ã¬ã³ãã¼ã¯ããã¾ããå®å
¨ãªãªãªã¼ã¹ããã»ã¹ã¯æ¬¡ã®ããã«ãªãã¾ãï¼</p>
</li>
</ol>
<ul>
<li>
<p><strong>ãªãªã¼ã¹ãã¼ã ã®ç«ã¡ä¸ã</strong>ï¼ æ°ãããªãªã¼ã¹ã®ãã¾ãã¾ãªã³ã³ãã¼ãã³ãã®ç®¡çãæ
å½ããKubernetesã³ãã¥ããã£ã®ãã©ã³ãã£ã¢ãå«ããªãªã¼ã¹ãã¼ã ã®çµæããå§ãã¾ããããã¯é常ãåã®ãªãªã¼ã¹ãçµäºããåã«è¡ããã¾ãããã¼ã ãçµæãããã¨ããªãªã¼ã¹ãã¼ã ãªã¼ãã¼ã¨ãã©ã³ãããã¼ã¸ã£ã¼ãéå¸¸ã®ææç©ã®ã«ã¬ã³ãã¼ãææ¡ããéã«ãæ°ããã¡ã³ãã¼ããªã³ãã¼ãããã¾ããä¾ã¨ãã¦ãSIG Releaseã®ãªãã¸ããªã«ä½æããã<a href="https://github.com/kubernetes/sig-release/issues/2307">v1.29ãã¼ã çµæã®issue</a>ãè¦ã¦ãã ãããã³ã³ããªãã¥ã¼ã¿ã¼ããªãªã¼ã¹ãã¼ã ã®ä¸å¡ã«ãªãã«ã¯ãé常ãªãªã¼ã¹ã·ã£ãã¦ããã°ã©ã ãéãã¾ããããããSIG Releaseã«åå ããå¯ä¸ã®æ¹æ³ã¨ããããã§ã¯ããã¾ããã</p>
</li>
<li>
<p><strong>åææ®µé</strong>ï¼ åãªãªã¼ã¹ãµã¤ã¯ã«ã®æåã®æ°é±éã§ãSIG Releaseã¯Kubernetesæ©è½å¼·åææ¡(KEPs)ã§æ¦èª¬ãããæ°æ©è½ãæ©è½å¼·åã®é²æãç±å¿ã«è¿½è·¡ãã¾ãããããã®æ©è½ã®ãã¹ã¦ãã¾ã£ããæ°ãããã®ã§ã¯ããã¾ããããå¤ãã®å ´åãã¢ã«ãã¡æ®µéããå§ã¾ãããã®å¾ãã¼ã¿æ®µéã«é²ã¿ãæçµçã«ã¯å®å®ããã¹ãã¼ã¿ã¹ã«å°éãã¾ãã</p>
</li>
<li>
<p><strong>æ©è½ã®æç段é</strong>ï¼ é常ãã³ãã¥ããã£ããã®ãã£ã¼ãããã¯ãéãããããå®é¨çãªæ°æ©è½ãå«ãã¢ã«ãã¡ã»ãªãªã¼ã¹ã2ã3åè¡ãããã®å¾ãæ©è½ãããå®å®ãããã°ã®ä¿®æ£ãä¸å¿ã¨ãªããã¼ã¿ã»ãªãªã¼ã¹ã2ã3åè¡ãã¾ãããã®æ®µéã§ã®ã¦ã¼ã¶ã¼ããã®ãã£ã¼ãããã¯ã¯é常ã«éè¦ã§ããã®æ®µéã§çºçããå¯è½æ§ã®ãããã°ããã®ä»ã®æ¸å¿µã«å¯¾å¦ããããã«ã追å ã®ãã¼ã¿ã»ãªãªã¼ã¹ã使ããªããã°ãªããªããã¨ãããã¾ãããããã¯ãªã¢ãããã¨ãå®éã®ãªãªã¼ã¹ã®åã«ãªãªã¼ã¹åè£(RC)ã使ãã¾ãããã®ãµã¤ã¯ã«ãéãã¦ããªãªã¼ã¹ãã¼ããã¦ã¼ã¶ã¼ã¬ã¤ããªã©ã®ããã¥ã¡ã³ãã®æ´æ°ãæ¹åã«åªãã¾ãã</p>
</li>
<li>
<p><strong>å®å®å段é</strong>ï¼ æ°ãªãªã¼ã¹ã®æ°é±éåã«ã³ã¼ãããªã¼ãºã宿½ãããã®æç¹ä»¥éã¯æ°æ©è½ã®è¿½å ãç¦æ¢ãã¾ããã¡ã¤ã³ãªãªã¼ã¹ã¨ä¸¦è¡ãã¦ãç§ãã¡ã¯Kubernetesã®å¤ãå
¬å¼ãµãã¼ããã¼ã¸ã§ã³ã®ããããæ¯æä½æãç¶ãã¦ããã®ã§ãKubernetesãã¼ã¸ã§ã³ã®ã©ã¤ããµã¤ã¯ã«ã¯ãã®å¾æ°ã¶æã«åã¶ã¨è¨ãã¾ããå®å
¨ãªãªãªã¼ã¹ãµã¤ã¯ã«å
¨ä½ãéãã¦ããªãªã¼ã¹ãã¼ããã¦ã¼ã¶ã¼ã¬ã¤ããå«ãããã¥ã¡ã³ãã®æ´æ°ã¨æ¹åã«åªãã¾ãã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-overview.png"
alt="ãªãªã¼ã¹ãã¼ã ã®ãªã³ãã¼ãã£ã³ã°; åææ®µé; æ©è½ã®æç段é; å®å®å段é"/>
</figure>
</li>
</ul>
<ol start="2">
<li>
<p><strong>åãªãªã¼ã¹ã§å®å®æ§ã¨æ°æ©è½ã®å°å
¥ã®ãã©ã³ã¹ãã©ã®ããã«æ±ã£ã¦ãã¾ããï¼ã©ã®ãããªåºæºã§ãã©ã®æ©è½ããªãªã¼ã¹ã«å«ããããæ±ºå®ããã®ã§ããï¼</strong></p>
<p>çµããã®ãªãããã·ã§ã³ã§ãããéè¦ãªã®ã¯ç§ãã¡ã®ããã»ã¹ã¨ã¬ã¤ãã©ã¤ã³ãå°éãããã¨ã ã¨èãã¦ãã¾ããç§ãã¡ã®ã¬ã¤ãã©ã¤ã³ã¯ããã®ããã¸ã§ã¯ãã«è±å¯ãªç¥èã¨çµé¨ãããããã¦ãããã³ãã¥ããã£ã®ä½å人ãã®ã¡ã³ãã¼ããã使éã«ãããã£ã¦è°è«ã¨ãã£ã¼ãããã¯ãéããçµæã§ãããã峿 ¼ãªã¬ã¤ãã©ã¤ã³ããªãã£ãããç§ãã¡ã®æ³¨æãå¿
è¦ã¨ãããã£ã¨çç£çãªè°é¡ã«æéã使ã代ããã«ãåãè°è«ãä½åº¦ãç¹°ãè¿ãã¦ãã¾ãã§ãããããã¹ã¦ã®éè¦ãªä¾å¤ã¯ããã¼ã ã¡ã³ãã¼ã®å¤§åã®åæãå¿
è¦ã¨ãããããå質ã確ä¿ãããã¨ãã§ãã¾ãã</p>
<p>ä½ããªãªã¼ã¹ã«ãªãããæ±ºå®ããããã»ã¹ã¯ããªãªã¼ã¹ãã¼ã ãã¯ã¼ã¯ããã¼ãå¼ãç¶ããã£ã¨åããå§ã¾ã£ã¦ãã¾ããåSIGã¨çµé¨è±å¯ãªã³ã³ããªãã¥ã¼ã¿ã¼ããæ©è½ã夿´ãå«ãããã©ãããæ±ºå®ãã¾ãããã®å¾ããªãªã¼ã¹ãã¼ã ãããããã®è²¢ç®ãããã¥ã¡ã³ãããã¹ãã徿¹äºææ§ãªã©ã®è¦ä»¶ãæºããã¦ãããã¨ã確èªããæ£å¼ã«è¨±å¯ãã¾ããåæ§ã®ããã»ã¹ã¯æä¾ããããªãªã¼ã¹ã®ãã§ãªã¼ããã¯ã§ãè¡ãããå®å
¨ãªKEPãå¿
è¦ã¨ããPRããå½±é¿ãåãããã¹ã¦ã®ãã©ã³ããå«ã¾ãªãä¿®æ£ã¯åãå
¥ããªãã¨ããå³ããããªã·ã¼ãããã¾ãã</p>
</li>
<li>
<p><strong>Kubernetesã®éçºã¨ãªãªã¼ã¹ä¸ã«ééããæã大ããªèª²é¡ã¯ä½ã§ããï¼ãããã®èª²é¡ãã©ã®ããã«å
æãã¾ãããï¼</strong></p>
<p>ãªãªã¼ã¹ã®ãµã¤ã¯ã«ãã¨ã«ããã¾ãã¾ãªèª²é¡ãçºçãã¾ããæ°ãã«çºè¦ãããCVE(Common Vulnerabilities and Exposures)ã®ãããªåå£å ´ã®åé¡ã«åãçµãã ããå
é¨ãã¼ã«å
ã®ãã°ã解決ãããã以åã®ãªãªã¼ã¹ã®æ©è½ã«ãã£ã¦å¼ãèµ·ããããäºæãã¬ãªã°ã¬ãã·ã§ã³ã«å¯¾å¦ããããããã¨ãããã¾ããç§ãã¡ããã°ãã°ç´é¢ãããã1ã¤ã®é害ã¯ãç§ãã¡ã®ãã¼ã ã¯å¤§è¦æ¨¡ã§ãããç§ãã¡ã®ã»ã¨ãã©ããã©ã³ãã£ã¢ãã¼ã¹ã§è²¢ç®ãã¦ãããã¨ã§ããæã«ã¯äººæãè¶³ããªãã¨æãããã¨ãããã¾ãããç§ãã¡ã¯å¸¸ã«çµç¹åãããã¾ããããããã¦ãã¾ãã</p>
</li>
<li>
<p><strong>æ°ããè²¢ç®è
ã¨ãã¦ãSIG Releaseã«åå ããããã®çæ³çãªéã¯ã©ã®ãããªãã®ã§ããããï¼èª°ããèªåã®ã¿ã¹ã¯ã«å¿æ®ºããã¦ããã³ãã¥ããã£ã§ã广çã«è²¢ç®ããããã«é©åãªã¿ã¹ã¯ãè¦ã¤ããã«ã¯ã©ãããã°ããã®ã§ããããï¼</strong></p>
<p>ãªã¼ãã³ã½ã¼ã¹ã³ãã¥ããã£ã¸ã®é¢ããæ¹ã¯äººããããã§ããSIG Releaseã¯ããªãªã¼ã¹ãåºè·ã§ããããã«èªåãã¡ã§ãã¼ã«ãæ¸ãã¨ãããèªååæãªãã¼ã ã§ãã<a href="https://github.com/kubernetes/community/blob/master/sig-k8s-infra/README.md">SIG K8s Infra</a>ã®ãããªä»ã®SIGã¨ã®ã³ã©ãã¬ã¼ã·ã§ã³ãå¤ãã®ã§ãããç§ãã¡ã使ç¨ãããã¼ã«ã¯ãã¹ã¦ãã³ã¹ãã忏ãã¤ã¤ãç§ãã¡ã®å¤§è¦æ¨¡ãªæè¡çãã¼ãºã«åããã¦ä½ããããã®ã§ãªããã°ãªãã¾ããããã®ããããåã«ããªãªã¼ã¹ã使ããã ãã§ãªãããã¾ãã¾ãªã¿ã¤ãã®ããã¸ã§ã¯ããæä¼ã£ã¦ããããã©ã³ãã£ã¢ãå¸¸ã«æ¢ãã¦ãã¾ãã</p>
<p>ç§ãã¡ã®ç¾å¨ã®ããã¸ã§ã¯ãã§ã¯ã<a href="https://go.dev/">Go</a>ããã°ã©ãã³ã°ãKuberneteså
é¨ã®çè§£ãLinuxããã±ã¼ã¸ã³ã°ããµãã©ã¤ãã§ã¼ã³ã»ãã¥ãªãã£ããã¯ãã«ã«ã©ã¤ãã£ã³ã°ãä¸è¬çãªãªã¼ãã³ã½ã¼ã¹ããã¸ã§ã¯ãã®ã¡ã³ããã³ã¹ãªã©ã®ã¹ãã«ãå¿
è¦ã§ãããã®ã¹ãã«ã»ããã¯ãããã¸ã§ã¯ãã®æé·ã¨ã¨ãã«å¸¸ã«é²åãã¦ãã¾ãã</p>
<p>çæ³çãªéçã¨ãã¦ãç§ãã¡ã¯ããææ¡ãã¾ã:</p>
<ul>
<li>ã©ã®ããã«æ©è½ã管çããã¦ãããããªãªã¼ã¹ã«ã¬ã³ãã¼ããªãªã¼ã¹ãã¼ã ã®å
¨ä½çãªæ§é ãªã©ãã³ã¼ãã«æ
£ããã</li>
<li><a href="https://communityinviter.com/apps/kubernetes/community">Slack</a>(#sig-release)ãªã©ã®Kubernetesã³ãã¥ããã£ã®ã³ãã¥ãã±ã¼ã·ã§ã³ãã£ã³ãã«ã«åå ããã</li>
<li>ã³ãã¥ããã£å
¨å¡ãåå ã§ãã<a href="https://github.com/kubernetes/community/tree/master/sig-release#meetings">SIG Releaseã¦ã£ã¼ã¯ãªã¼ãã¼ãã£ã³ã°</a>ã«åå ããããããã®ãã¼ãã£ã³ã°ã«åå ãããã¨ã¯ãããªãã®ã¹ãã«ã»ãããèå³ã«é¢é£ããã¨æãããé²è¡ä¸ã®ããã¸ã§ã¯ããå°æ¥ã®ããã¸ã§ã¯ãã«ã¤ãã¦å¦ã¶ç´ æ´ãããæ¹æ³ã§ãã</li>
</ul>
<p>çµé¨è±å¯ãªè²¢ç®è
ã¯çããã¤ã¦ããªãã®ãããªç«å ´ã«ãã£ããã¨ãå¿ããªãã§ãã ãããé æ
®ããã«è³ªåããè°è«ã«åå ããè²¢ç®ããããã®å°ããªä¸æ©ãè¸ã¿åºãã¾ãããã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-meetings.png"
alt="SIG Releaseã«é¢ãã質å"/>
</figure>
</li>
<li>
<p><strong>ãªãªã¼ã¹ã·ã£ãã¦ããã°ã©ã ã¨ã¯ä½ã§ããï¼ã¾ããä»ã®æ§ã
ãªSIGã«å«ã¾ããã·ã£ãã¦ããã°ã©ã ã¨ã®éãã¯ä½ã§ããï¼</strong></p>
<p>ãªãªã¼ã¹ã·ã£ãã¦ããã°ã©ã ã¯ãKubernetesã®ãªãªã¼ã¹ãµã¤ã¯ã«ãéãã¦ããªãªã¼ã¹ãã¼ã ã®çµé¨è±å¯ãªã¡ã³ãã¼ãã·ã£ãã¦ã¤ã³ã°ããæ©ä¼ãæä¾ãã¾ããããã¯ãKubernetesã®ãªãªã¼ã¹ã«å¿
è¦ãªããµããã¼ã ã«ã¾ããããã¹ã¦ã®å°é£ãªä»äºãè¦ãã¾ãã¨ãªããã£ã³ã¹ã§ããå¤ãã®äººã¯ãç§ãã¡ã®ä»äºã¯3ã¶æãã¨ã«ãªãªã¼ã¹ãåããã¨ã ãã ã¨æã£ã¦ãã¾ãããããã¯æ°·å±±ã®ä¸è§ã«ããã¾ããã</p>
<p>ç§ãã¡ã®ããã°ã©ã ã¯é常ãç¹å®ã®Kubernetesãªãªã¼ã¹ãµã¤ã¯ã«ã«æ²¿ã£ã¦ãããããã¯ç´3ã¶æã®äºæ¸¬å¯è½ãªã¿ã¤ã ã©ã¤ã³ãæã£ã¦ãã¾ãããã®ããã°ã©ã ã§ã¯Kubernetesã®æ°æ©è½ãæ¸ããã¨ã¯ããã¾ãããããªãªã¼ã¹ãã¼ã ã¯æ°ãªãªã¼ã¹ã¨ä½å人ãã®ã³ã³ããªãã¥ã¼ã¿ã¼ã¨ã®æå¾ã®ã¹ãããã§ãããããé«ã責任æãæ±ãããã¾ãã</p>
</li>
<li>
<p><strong>ä¸è¬çã«ã次ã®Kubernetesãªãªã¼ã¹ã®ãªãªã¼ã¹ã·ã£ãã¦/ãªãªã¼ã¹ãªã¼ãã¨ãã¦ãã©ã³ãã£ã¢ã«åå ããäººã«æ±ããè³æ ¼ã¯ä½ã§ããï¼</strong></p>
<p>ã©ã®å½¹å²ãããç¨åº¦ã®æè¡çè½åãå¿
è¦ã¨ãã¾ãããGoã®å®è·µçãªçµé¨ãKubernetes APIã«ç²¾éãã¦ãããã¨ãå¿
è¦ã¨ãããã®ãããã°ãæè¡çãªå
容ãæç¢ºãã¤ç°¡æ½ã«ä¼ããã®ã徿ãªäººãå¿
è¦ã¨ãããã®ãããã¾ããæè¡çãªå°éç¥èããããç±æã¨ã³ãããã¡ã³ããéè¦ãã¦ãã¾ããããããªããæ£ããå§¿å¢ãæã£ã¦ãã¦ãKubernetesããªãªã¼ã¹ã»ã¨ã³ã¸ãã¢ãªã³ã°ã®ä»äºã楽ããã§ãããã¨ãä¼ããã°ããã¨ããããããªãã使ãå©ç¨ãã¦ç«ã¡ä¸ããå人çãªããã¸ã§ã¯ãã§ãã£ãã¨ãã¦ãããã¼ã ã¯å¿
ãããªããæå°ãã¾ããã»ã«ãã¹ã¿ã¼ã¿ã¼ã§ãããã¨ãããã¦è³ªåããããã¨ãæããªããã¨ã¯ãç§ãã¡ã®ãã¼ã ã§ããªãã大ããåé²ããã¾ãã</p>
</li>
<li>
<p><strong>ãªãªã¼ã¹ã·ã£ãã¼ããã°ã©ã ã«ä½åº¦ãä¸åæ ¼ã«ãªã£ã人ã«ä½ãå§ãã¾ããï¼</strong></p>
<p>å¿åãç¶ãããã¨ã§ãã</p>
<p>ãªãªã¼ã¹ãµã¤ã¯ã«ãã¨ã«å¿åè
æ°ãé£èºçã«å¢ãã¦ãããããé¸ã°ããã®ãé£ãããªããè½èãããã¨ãããã¾ããã䏿¡ç¨ã«ãªã£ãããã¨ãã£ã¦ãããªãã«æè½ããªãã¨ããããã§ã¯ãªããã¨ãç¥ã£ã¦ããã¦ãã ããããã¹ã¦ã®å¿åè
ãåãå
¥ãããã¨ã¯ç¾å®çã«ä¸å¯è½ã§ããããããããã«ç§ãã¡ãææ¡ããä»£æ¿æ¡ãããã¾ãã:</p>
<p>æ¯é±éå¬ãããKubernetes SIGã®ãªãªã¼ã¹ãã¼ãã£ã³ã°ã«åå ãã¦ãèªå·±ç´¹ä»ããããã¼ã ãç§ãã¡ãåãçµãã§ããããã¸ã§ã¯ãã«æ
£ãã¦ãã ããã</p>
<p>ãªãªã¼ã¹ãã¼ã ã¯SIG Releaseã«åå ããæ¹æ³ã®1ã¤ã§ãããç§ãã¡ã¯å¸¸ã«æä¼ã£ã¦ãããäººãæ¢ãã¦ãã¾ããç¹°ãè¿ãã«ãªãã¾ãããä¸å®ã®æè¡çãªè½åã«å ãã¦ãç§ãã¡ãæãæ±ãã¦ããç¹æ§ã¯ãä¿¡é ¼ã§ãã人ã§ãããããã«ã¯æéãå¿
è¦ã§ãã</p>
<figure>
<img src="https://kubernetes.io/ja/blog/2024/01/15/sig-release-spotlight-2023/sig-release-motivation.png"
alt="SIG Releaseã®ã¢ããã¼ã·ã§ã³"/>
</figure>
</li>
<li>
<p><strong>ãªãªã¼ã¹ãã¼ã ãKubernetes v1.28ã«ç¹ã«æå¾
ãã¦ããé²è¡ä¸ã®åãçµã¿ãä»å¾ã®æ©è½ã«ã¤ãã¦æãã¦ãã ããããããã®é²æ©ã¯ãKubernetesã®é·æçãªãã¸ã§ã³ã¨ã©ã®ããã«æ´åãã¦ããã®ã§ããããï¼</strong></p>
<p>Kubernetesã®ããã±ã¼ã¸ãã³ãã¥ããã£ã¤ã³ãã©ä¸ã§ã¤ãã«å
¬éã§ãããã¨ã«è奮ãã¦ãã¾ããæ°å¹´åããããããã¨æã£ã¦ãããã¨ã§ãããç§»è¡ããåã«æ´ããªããã°ãªããªãæè¡çãªæå³åããå¤ãããã¸ã§ã¯ãã§ãããããçµããã°ãçç£æ§ãåä¸ãããã¯ã¼ã¯ããã¼å
¨ä½ãã³ã³ããã¼ã«ã§ããããã«ãªãã¾ãã</p>
</li>
</ol>
<h2 id="æå¾ã«">æå¾ã«</h2>
<p>ãã¦ããã®å¯¾è«ã¯ããã§çµããã§ãããå¦ç¿ã¯ããã§çµããã§ã¯ããã¾ããããã®ã¤ã³ã¿ãã¥ã¼ããSIG Releaseãä½ããã¦ããã®ããããã¦ã©ã®ããã«æå©ããå§ãããããã®ããããç¨åº¦ããã£ã¦ããã ããã¨æãã¾ããéè¦ãªãã¨ã¨ãã¦ããã®è¨äºã¯SIG Releaseã®æåã®ãµãããã¸ã§ã¯ãã§ãããªãªã¼ã¹ã»ãã¼ã ãåãä¸ãã¦ãã¾ããæ¬¡åã®SIG Releaseã®ã¹ãããã©ã¤ãããã°ã§ã¯ãRelease Engineeringãµãããã¸ã§ã¯ãã«ã¹ãããã©ã¤ããå½ã¦ããã®æ´»åå
容ãåå æ¹æ³ã«ã¤ãã¦ç´¹ä»ãã¾ããæå¾ã«ãSIG Releaseã®éå¶æ¹æ³ã«ã¤ãã¦ããæ·±ãçè§£ããããã«ã<a href="https://github.com/kubernetes/community/tree/master/sig-release">SIG Releaseæ²ç« </a>ãã覧ãã ããã</p>
- ãã©ã¬ã³ã¸ãã¯ã³ã³ããåæhttps://kubernetes.io/ja/blog/2023/03/10/forensic-container-analysis/Fri, 10 Mar 2023 00:00:00 +0000https://kubernetes.io/ja/blog/2023/03/10/forensic-container-analysis/
<p>ååæç¨¿ãã<a href="https://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/">Kubernetesã«ããããã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦ç</a>ã§ã¯ãKubernetesã§ã®ãã§ãã¯ãã¤ã³ãã®ä½æãããããã©ã®ããã«ã»ããã¢ãããããã©ã®ããã«ä½¿ç¨ãããã®ããç´¹ä»ãã¾ããã
æ©è½ã®ååã¯ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãã§ãããKubernetesã«ãã£ã¦ä½æããããã§ãã¯ãã¤ã³ãã®å®éã®åææ¹æ³ã«ã¤ãã¦ã¯ã詳細ã説æãã¾ããã§ããã
ãã®è¨äºã§ã¯ããã§ãã¯ãã¤ã³ããã©ã®ããã«åæãããã®ãã«ã¤ãã¦ã®è©³ç´°ãæä¾ãã¾ãã</p>
<p>ãã§ãã¯ãã¤ã³ãã®ä½æã¯ã¾ã Kubernetesã§alphaæ©è½ã§ããããã®è¨äºã§ã¯ãã®æ©è½ãå°æ¥ã©ã®ããã«åä½ããã®ãã«ã¤ãã¦ã®ãã¬ãã¥ã¼ãæä¾ãã¾ãã</p>
<h2 id="æºå">æºå</h2>
<p>ãã§ãã¯ãã¤ã³ã使ã®ãµãã¼ããæå¹ã«ããããã®Kubernetesã®è¨å®æ¹æ³ããåºç¤ã¨ãªãCRIå®è£
æ¹æ³ã«ã¤ãã¦ã®è©³ç´°ã¯<a href="https://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/">Kubernetesã«ããããã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦ç</a>ãåç
§ãã¦ãã ããã</p>
<p>ä¸ä¾ã¨ãã¦ããã®è¨äºå
ã§ãã§ãã¯ãã¤ã³ãã使ãåæããã³ã³ããã¤ã¡ã¼ã¸(<code>quay.io/adrianreber/counter:blog</code>)ãæºåãã¾ããã
ãã®ã³ã³ããã¯ã³ã³ããå
ã§ãã¡ã¤ã«ã使ãããã¨ãã§ããå¾ã§ãã§ãã¯ãã¤ã³ãå
ã§æ¢ãããæ
å ±ãã¡ã¢ãªã¼ã«æ ¼ç´ãã¦ãããã¨ãã§ãã¾ãã</p>
<p>ã³ã³ãããå®è¡ããããã«ã¯Podãå¿
è¦ã§ããããã®ä¾ã§ã¯ä¸è¨ã®Podãããã§ã¹ãã使ç¨ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>counters<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>counter<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>quay.io/adrianreber/counter:blog<span style="color:#bbb">
</span></span></span></code></pre></div><p>ãã®çµæã<code>counter</code>ã¨å¼ã°ããã³ã³ããã<code>counters</code>ã¨å¼ã°ããPodå
ã§å®è¡ããã¾ãã</p>
<p>ä¸åº¦ã³ã³ãããå®è¡ãããã¨ãã³ã³ããã§ä¸è¨ã¢ã¯ã·ã§ã³ãè¡ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> kubectl get pod counters --template <span style="color:#b44">'{{.status.podIP}}'</span>
</span></span><span style="display:flex;"><span><span style="color:#888">10.88.0.25
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span> curl 10.88.0.25:8088/create?test-file
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> curl 10.88.0.25:8088/secret?RANDOM_1432_KEY
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> curl 10.88.0.25:8088
</span></span></code></pre></div><p>æåã®ã¢ã¯ã»ã¹ã¯ã³ã³ããå
ã§<code>test-file</code>ã¨ããå
容ã§<code>test-file</code>ã¨å¼ã°ãããã¡ã¤ã«ã使ãã¾ãã
次ã®ã¢ã¯ã»ã¹ã§ãã³ã³ããã®ã¡ã¢ãªã¼å
ã®ã©ããã«ã·ã¼ã¯ã¬ããæ
å ±(<code>RANDOM_1432_KEY</code>)ãè¨æ¶ãã¾ãã
æå¾ã®ã¢ã¯ã»ã¹ã¯å
é¨ã®ãã°ãã¡ã¤ã«ã«1è¡è¿½å ããã ãã§ãã</p>
<p>ãã§ãã¯ãã¤ã³ããåæããåã®æå¾ã®ã¹ãããã¯ããã§ãã¯ãã¤ã³ãã使ãããã¨ãKubernetesã«æç¤ºãããã¨ã§ãã
ååã®è¨äºã§èª¬æããããã«ãããã«ã¯<em>kubelet</em>éå®ã®<code>ãã§ãã¯ãã¤ã³ã</code>APIã¨ã³ããã¤ã³ãã¸ã®ã¢ã¯ã»ã¹ãå¿
è¦ã¨ãã¾ãã</p>
<p><em>default</em>åå空éå
ã®<em>counters</em>ã¨ããååã®Podå
ã®<em>counter</em>ã¨ããååã®ã³ã³ããã«å¯¾ãã¦ã<em>kubelet</em> APIã¨ã³ããã¤ã³ããæ¬¡ã®å ´æã§å°éå¯è½ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#080;font-style:italic"># Podãå®è¡ããã¦ããNodeä¸ã§å®è¡ãã</span>
</span></span><span style="display:flex;"><span>curl -X POST <span style="color:#b44">"https://localhost:10250/checkpoint/default/counters/counter"</span>
</span></span></code></pre></div><p>å³å¯ã«ã¯ã<em>kubelet</em>ã®èªå·±ç½²åè¨¼ææ¸ã許容ã<em>kubelet</em> <code>ãã§ãã¯ãã¤ã³ã</code>APIã®ä½¿ç¨ãèªå¯ããããã«ãä¸è¨ã®<code>curl</code>ã³ãã³ãã®ãªãã·ã§ã³ãå¿
è¦ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>--insecure --cert /var/run/kubernetes/client-admin.crt --key /var/run/kubernetes/client-admin.key
</span></span></code></pre></div><p>ãã§ãã¯ãã¤ã³ãã®ä½æãçµäºããã¨ã<code>/var/lib/kubelet/checkpoints/checkpoint-<pod-name>_<namespace-name>-<container-name>-<timestamp>.tar</code>ã§ãã§ãã¯ãã¤ã³ããå©ç¨å¯è½ã«ãªãã¾ãã</p>
<p>ãã®è¨äºã®å¾è¿°ã®ã¹ãããã§ã¯ããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ããåæããéã«<code>checkpoint.tar</code>ã¨ããååã使ç¨ãã¾ãã</p>
<h2 id="checkpointctl-ã使ç¨ãããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã®åæ"><code>checkpointctl</code>ã使ç¨ãããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã®åæ</h2>
<p>ãã§ãã¯ãã¤ã³ãã使ããã³ã³ããã«é¢ããããã¤ãã®åææ
å ±ãå¾ãããã«ã¯ããã®ããã«<a href="https://github.com/checkpoint-restore/checkpointctl">checkpointctl</a>ã使ç¨ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> checkpointctl show checkpoint.tar --print-stats
</span></span><span style="display:flex;"><span><span style="color:#888">+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
</span></span></span><span style="display:flex;"><span><span style="color:#888">| CONTAINER | IMAGE | ID | RUNTIME | CREATED | ENGINE | IP | CHKPT SIZE | ROOT FS DIFF SIZE |
</span></span></span><span style="display:flex;"><span><span style="color:#888">+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
</span></span></span><span style="display:flex;"><span><span style="color:#888">| 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 |
</span></span></span><span style="display:flex;"><span><span style="color:#888">+-----------+----------------------------------+--------------+---------+---------------------+--------+------------+------------+-------------------+
</span></span></span><span style="display:flex;"><span><span style="color:#888">CRIU dump statistics
</span></span></span><span style="display:flex;"><span><span style="color:#888">+---------------+-------------+--------------+---------------+---------------+---------------+
</span></span></span><span style="display:flex;"><span><span style="color:#888">| FREEZING TIME | FROZEN TIME | MEMDUMP TIME | MEMWRITE TIME | PAGES SCANNED | PAGES WRITTEN |
</span></span></span><span style="display:flex;"><span><span style="color:#888">+---------------+-------------+--------------+---------------+---------------+---------------+
</span></span></span><span style="display:flex;"><span><span style="color:#888">| 100809 us | 119627 us | 11602 us | 7379 us | 7800 | 2198 |
</span></span></span><span style="display:flex;"><span><span style="color:#888">+---------------+-------------+--------------+---------------+---------------+---------------+
</span></span></span></code></pre></div><p>ããã«ãã£ã¦ããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãå
ã®ãã§ãã¯ãã¤ã³ãã«ã¤ãã¦ã®ããã¤ãã®æ
å ±ãããã§ã«åå¾ã§ãã¦ãã¾ãã
ã³ã³ããã®ååãã³ã³ããã©ã³ã¿ã¤ã ãã³ã³ããã¨ã³ã¸ã³ã«ã¤ãã¦ã®æ
å ±ãè¦ããã¨ãã§ãã¾ãã
ãã§ãã¯ãã¤ã³ãã®ãµã¤ãº(<code>CHKPT SIZE</code>)ããªã¹ãåããã¾ãã
ããã¯å¤§é¨åããã§ãã¯ãã¤ã³ãã«å«ã¾ããã¡ã¢ãªã¼ãã¼ã¸ã®ãµã¤ãºã§ãããã³ã³ããå
ã®å
¨ã¦ã®å¤æ´ããããã¡ã¤ã«ã®ãµã¤ãº(<code>ROOT FS DIFF SIZE</code>)ã«ã¤ãã¦ã®æ
å ±ãããã¾ãã</p>
<p>追å ã®ãã©ã¡ã¼ã¿ã¼<code>--print-stats</code>ã¯ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãå
ã®æ
å ±ã復å·åãã2çªç®ã®ãã¼ãã«(<em>CRIU dump statistics</em>)ã§è¡¨ç¤ºãã¾ãã
ãã®æ
å ±ã¯ãã§ãã¯ãã¤ã³ã使ä¸ã«åéãããCRIUãã³ã³ããå
ã®ããã»ã¹ããã§ãã¯ãã¤ã³ãããããã«å¿
è¦ãªæéã¨ããã§ãã¯ãã¤ã³ã使ä¸ã«åæããæ¸ãè¾¼ã¾ããã¡ã¢ãªã¼ãã¼ã¸æ°ã®æ¦è¦ã示ãã¾ãã</p>
<h2 id="ããæ·±ãæãä¸ãã">ããæ·±ãæãä¸ãã</h2>
<p><code>checkpointctl</code>ã®å©ããåãã¦ããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã«ã¤ãã¦ã®ãã¤ã¬ãã«ãªæ
å ±ãå¾ããã¨ãã§ãã¾ãã
ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ããããã«åæããã«ã¯ããããå±éããå¿
è¦ãããã¾ãã
ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã¯<em>tar</em>ã¢ã¼ã«ã¤ãã§ããã<code>tar xf checkpoint.tar</code>ã®å©ããåãã¦å±éå¯è½ã§ãã</p>
<p>ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ããå±éããã¨ãä¸è¨ã®ãã¡ã¤ã«ããã£ã¬ã¯ããªã使ããã¾ãã</p>
<ul>
<li><code>bind.mounts</code> - ãã®ãã¡ã¤ã«ã«ã¯ãã¤ã³ããã¦ã³ãã«ã¤ãã¦ã®æ
å ±ãå«ã¾ãã¦ããã復å
ä¸ã«å
¨ã¦ã®å¤é¨ãã¡ã¤ã«ã¨ãã£ã¬ã¯ããªãæ£ããå ´æã«ãã¦ã³ãããããã«å¿
è¦ã«ãªãã¾ãã</li>
<li><code>checkpoint/</code> - ãã®ãã£ã¬ã¯ããªã«ã¯CRIUã«ãã£ã¦ä½æãããå®éã®ãã§ãã¯ãã¤ã³ããå«ã¾ãã¦ãã¾ãã</li>
<li><code>config.dump</code>ã¨<code>spec.dump</code> - ãããã®ãã¡ã¤ã«ã«ã¯ã復å
ä¸ã«å¿
è¦ã¨ãããã³ã³ããã«ã¤ãã¦ã®ã¡ã¿ãã¼ã¿ãå«ã¾ãã¦ãã¾ãã</li>
<li><code>dump.log</code> - ãã®ãã¡ã¤ã«ã«ã¯ãã§ãã¯ãã¤ã³ã使ä¸ã«ä½æãããCRIUã®ãããã°åºåãå«ã¾ãã¦ãã¾ãã</li>
<li><code>stats-dump</code> - ãã®ãã¡ã¤ã«ã«ã¯ã<code>checkpointctl</code>ã<code>--print-stats</code>ã§ãã³ãçµ±è¨æ
å ±ã表示ããããã«ä½¿ç¨ãããã¼ã¿ãå«ã¾ãã¦ãã¾ãã</li>
<li><code>rootfs-diff.tar</code> - ãã®ãã¡ã¤ã«ã«ã¯ãã³ã³ããã®ãã¡ã¤ã«ã·ã¹ãã ä¸ã§å¤æ´ãããå
¨ã¦ã®ãã¡ã¤ã«ãå«ã¾ãã¦ãã¾ãã</li>
</ul>
<h3 id="ãã¡ã¤ã«ã·ã¹ãã ã®å¤æ´-rootfs-diff-tar">ãã¡ã¤ã«ã·ã¹ãã ã®å¤æ´ - <code>rootfs-diff.tar</code></h3>
<p>ã³ã³ããã®ãã§ãã¯ãã¤ã³ããããã«åæããããã®æåã®ã¹ãããã¯ãã³ã³ããå
ã§å¤æ´ããããã¡ã¤ã«ãè¦ããã¨ã§ãã
ããã¯<code>rootfs-diff.tar</code>ãã¡ã¤ã«ãåç
§ãããã¨ã§è¡ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> tar xvf rootfs-diff.tar
</span></span><span style="display:flex;"><span><span style="color:#888">home/counter/logfile
</span></span></span><span style="display:flex;"><span><span style="color:#888">home/counter/test-file
</span></span></span></code></pre></div><p>ããã§ã³ã³ããå
ã§å¤æ´ããããã¡ã¤ã«ã調ã¹ããã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> cat home/counter/logfile
</span></span><span style="display:flex;"><span><span style="color:#888">10.88.0.1 - - [02/Mar/2023 06:07:29] "GET /create?test-file HTTP/1.1" 200 -
</span></span></span><span style="display:flex;"><span><span style="color:#888">10.88.0.1 - - [02/Mar/2023 06:07:40] "GET /secret?RANDOM_1432_KEY HTTP/1.1" 200 -
</span></span></span><span style="display:flex;"><span><span style="color:#888">10.88.0.1 - - [02/Mar/2023 06:07:43] "GET / HTTP/1.1" 200 -
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span>Â cat home/counter/test-file
</span></span><span style="display:flex;"><span><span style="color:#888">test-fileÂ
</span></span></span></code></pre></div><p>ãã®ã³ã³ããã®ãã¼ã¹ã«ãªã£ã¦ããã³ã³ããã¤ã¡ã¼ã¸(<code>quay.io/adrianreber/counter:blog</code>)ã¨æ¯è¼ããã¨ãã³ã³ãããæä¾ãããµã¼ãã¹ã¸ã®å
¨ã¦ã®ã¢ã¯ã»ã¹æ
å ±ãå«ãã <code>logfile</code>ãäºæ³éã使ããã<code>test-file</code>ãã¡ã¤ã«ã確èªãããã¨ãã§ãã¾ãã</p>
<p><code>rootfs-diff.tar</code>ã®å©ããåãããã¨ã§ã使ã¾ãã¯å¤æ´ãããå
¨ã¦ã®ãã¡ã¤ã«ããã³ã³ããã®ãã¼ã¹ã¤ã¡ã¼ã¸ã¨æ¯è¼ãã¦æ¤æ»ãããã¨ãå¯è½ã§ãã</p>
<h3 id="ãã§ãã¯ãã¤ã³ãå¦çããããã»ã¹ãåæãã-checkpoint">ãã§ãã¯ãã¤ã³ãå¦çããããã»ã¹ãåæãã - <code>checkpoint/</code></h3>
<p>ãã£ã¬ã¯ããª<code>checkpoint/</code>ã¯ã³ã³ããå
ã§ããã»ã¹ããã§ãã¯ãã¤ã³ããã¦ããéã«CRIUã«ãã£ã¦ä½æããããã¼ã¿ãå«ãã§ãã¾ãã
ãã£ã¬ã¯ããª<code>checkpoint/</code>ã®å
容ã¯ãCRIUã®ä¸é¨ã¨ãã¦é
å¸ããã¦ãã<a href="https://criu.org/CRIT">CRIT</a>ãã¼ã«ã使ç¨ãã¦åæã§ãããã¾ãã¾ãª<a href="https://criu.org/Images">ã¤ã¡ã¼ã¸ãã¡ã¤ã«</a>ã§æ§æããã¦ãã¾ãã</p>
<p>ã¾ããã³ã³ããã®å
é¨ããã»ã¹ã®æ¦è¦ãåå¾ãã¦ã¿ã¾ãããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> crit show checkpoint/pstree.img | jq .entries<span style="color:#666">[]</span>.pid
</span></span><span style="display:flex;"><span><span style="color:#888">1
</span></span></span><span style="display:flex;"><span><span style="color:#888">7
</span></span></span><span style="display:flex;"><span><span style="color:#888">8
</span></span></span></code></pre></div><p>ãã®åºåã¯ã³ã³ããã®PIDåå空éã®å
é¨ã«3ã¤ã®ããã»ã¹(PIDã1ã¨7ã¨8)ããããã¨ãæå³ãã¦ãã¾ãã</p>
<p>ããã¯ã³ã³ããã®PIDåå空éã®å
é¨ããã®è¦çã表示ãã¦ããã ãã§ãã
復å
ä¸ã«æ£ç¢ºã«ãããã®PIDãå使ããã¾ãã
ã³ã³ããã®PIDåå空éã®å¤é¨ããPIDã¯å¾©å
å¾ã«å¤æ´ããã¾ãã</p>
<p>次ã®ã¹ãããã¯ããããã®3ã¤ã®ããã»ã¹ã«ã¤ãã¦ã®è¿½å æ
å ±ãåå¾ãããã¨ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> crit show checkpoint/core-1.img | jq .entries<span style="color:#666">[</span>0<span style="color:#666">]</span>.tc.comm
</span></span><span style="display:flex;"><span><span style="color:#888">"bash"
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span> crit show checkpoint/core-7.img | jq .entries<span style="color:#666">[</span>0<span style="color:#666">]</span>.tc.comm
</span></span><span style="display:flex;"><span><span style="color:#888">"counter.py"
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span> crit show checkpoint/core-8.img | jq .entries<span style="color:#666">[</span>0<span style="color:#666">]</span>.tc.comm
</span></span><span style="display:flex;"><span><span style="color:#888">"tee"
</span></span></span></code></pre></div><p>ããã¯ãã³ã³ããå
ã®3ã¤ã®ããã»ã¹ã<code>bash</code>ã¨<code>counter.py</code>(Pythonã¤ã³ã¿ããªã¿ã¼)ã¨<code>tee</code>ã§ãããã¨ãæå³ãã¦ãã¾ãã
ããã»ã¹ã®è¦ªåé¢ä¿ã«ã¤ãã¦ã®è©³ç´°ã¯ã<code>checkpoint/pstree.img</code>ã«åæãããã¼ã¿ãããã«ããã¾ãã</p>
<p>ããã¾ã§ã§åéããæ
å ±ãã¾ã å®è¡ä¸ã®ã³ã³ããã¨æ¯è¼ãã¦ã¿ã¾ãããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> crictl inspect --output go-template --template <span style="color:#b44">"{{(index .info.pid)}}"</span> 059a219a22e56
</span></span><span style="display:flex;"><span><span style="color:#888">722520
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span> ps auxf | grep -A <span style="color:#666">2</span> <span style="color:#666">722520</span>
</span></span><span style="display:flex;"><span><span style="color:#888">fedora 722520 \_ bash -c /home/counter/counter.py 2>&1 | tee /home/counter/logfile
</span></span></span><span style="display:flex;"><span><span style="color:#888">fedora 722541 \_ /usr/bin/python3 /home/counter/counter.py
</span></span></span><span style="display:flex;"><span><span style="color:#888">fedora 722542 \_ /usr/bin/coreutils --coreutils-prog-shebang=tee /usr/bin/tee /home/counter/logfile
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span>Â cat /proc/722520/comm
</span></span><span style="display:flex;"><span><span style="color:#888">bash
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span>Â cat /proc/722541/comm
</span></span><span style="display:flex;"><span><span style="color:#888">counter.py
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="color:#000080;font-weight:bold">$</span> cat /proc/722542/comm
</span></span><span style="display:flex;"><span><span style="color:#888">tee
</span></span></span></code></pre></div><p>ãã®åºåã§ã¯ãã¾ãã³ã³ããå
ã®æåã®ããã»ã¹ã®PIDãåå¾ãã¦ãã¾ãã
ããã¦ã³ã³ãããå®è¡ãã¦ããã·ã¹ãã ä¸ã§ããã®PIDã¨åããã»ã¹ãæ¢ãã¦ãã¾ãã
3ã¤ã®ããã»ã¹ã表示ãããæåã®ãã®ã¯ã³ã³ããPIDåå空éã®ä¸ã§PID 1ã§ãã"bash"ã§ãã
次ã«<code>/proc/<PID>/comm</code>ãè¦ãã¨ããã§ãã¯ãã¤ã³ãã¤ã¡ã¼ã¸ã¨æ£ç¢ºã«åãå¤ãè¦ã¤ãããã¨ãã§ãã¾ãã</p>
<p>è¦ãã¦ããéè¦ãªãã¨ã¯ããã§ãã¯ãã¤ã³ãã¯ã³ã³ããã®PIDåå空éå
ã®è¦çãå«ã¾ãã¦ãããã¨ã§ãã
ãªããªãããããã®æ
å ±ã¯ããã»ã¹ã復å
ããããã«éè¦ã ããã§ãã</p>
<p><code>crit</code>ãã³ã³ããã«ã¤ãã¦æãã¦ãããæå¾ã®ä¾ã¯ãUTSåå空éã«é¢ããæ
å ±ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> crit show checkpoint/utsns-12.img
</span></span><span style="display:flex;"><span><span style="color:#888">{
</span></span></span><span style="display:flex;"><span><span style="color:#888"> "magic": "UTSNS",
</span></span></span><span style="display:flex;"><span><span style="color:#888"> "entries": [
</span></span></span><span style="display:flex;"><span><span style="color:#888"> {
</span></span></span><span style="display:flex;"><span><span style="color:#888"> "nodename": "counters",
</span></span></span><span style="display:flex;"><span><span style="color:#888"> "domainname": "(none)"
</span></span></span><span style="display:flex;"><span><span style="color:#888"> }
</span></span></span><span style="display:flex;"><span><span style="color:#888"> ]
</span></span></span><span style="display:flex;"><span><span style="color:#888">}
</span></span></span></code></pre></div><p>UTSåå空éå
ã®ãã¹ããã¼ã ã<code>counters</code>ã§ãããã¨ãæãã¦ããã¾ãã</p>
<p>ãã§ãã¯ãã¤ã³ã使ä¸ã«åéãããåãªã½ã¼ã¹CRIUã«ã¤ãã¦ã<code>checkpoint/</code>ãã£ã¬ã¯ããªã¯å¯¾å¿ããã¤ã¡ã¼ã¸ãã¡ã¤ã«ãå«ãã§ãã¾ãã
ãã®ã¤ã¡ã¼ã¸ãã¡ã¤ã«ã¯<code>crit</code>ã使ç¨ãããã¨ã§åæå¯è½ã§ãã</p>
<h4 id="ã¡ã¢ãªã¼ãã¼ã¸ãè¦ã">ã¡ã¢ãªã¼ãã¼ã¸ãè¦ã</h4>
<p>CRITã使ç¨ãã¦å¾©å·åã§ããCRIUããã®æ
å ±ã«å ãã¦ãCRIUããã£ã¹ã¯ã«æ¸ãè¾¼ãã çã®ã¡ã¢ãªã¼ãã¼ã¸ãå«ãã§ãããã¡ã¤ã«ãããã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> ls checkpoint/pages-*
</span></span><span style="display:flex;"><span><span style="color:#888">checkpoint/pages-1.img checkpoint/pages-2.img checkpoint/pages-3.img
</span></span></span></code></pre></div><p>æåã«ã³ã³ããã使ç¨ããéã«ãã¡ã¢ãªã¼å
ã®ã©ããã«ã©ã³ãã ãã¼(<code>RANDOM_1432_KEY</code>)ãä¿åãã¾ããã
è¦ã¤ãããã¨ãã§ãããã©ããè¦ã¦ã¿ã¾ãããã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> grep -ao RANDOM_1432_KEY checkpoint/pages-*
</span></span><span style="display:flex;"><span><span style="color:#888">checkpoint/pages-2.img:RANDOM_1432_KEY
</span></span></span></code></pre></div><p>ããã¦å®éã«ãç§ã®ãã¼ã¿ãããã¾ãã
ãã®æ¹æ³ã§ãã³ã³ããå
ã®ããã»ã¹ã®å
¨ã¦ã®ã¡ã¢ãªã¼ãã¼ã¸ã®å
容ãç°¡åã«è¦ããã¨ãã§ãã¾ãã
ãããããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã«ã¢ã¯ã»ã¹ã§ãããªã誰ã§ããã³ã³ããã®ããã»ã¹ã®ã¡ã¢ãªã¼å
ã«ä¿åãããå
¨ã¦ã®æ
å ±ã«ã¢ã¯ã»ã¹ã§ãããã¨ãè¦ãã¦ãããã¨ãéè¦ã§ãã</p>
<h4 id="ãããªãåæã®ããã«gdbã使ç¨ãã">ãããªãåæã®ããã«gdbã使ç¨ãã</h4>
<p>ãã§ãã¯ãã¤ã³ãã¤ã¡ã¼ã¸ãè¦ãããã®ä»ã®æ¹æ³ã¯<code>gdb</code>ã§ãã
CRIUãªãã¸ããªã¯ããã§ãã¯ãã¤ã³ããã³ã¢ãã³ããã¡ã¤ã«ã«å¤æãã<a href="https://github.com/checkpoint-restore/criu/tree/criu-dev/coredump">coredump</a>ã¹ã¯ãªãããå«ãã§ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> /home/criu/coredump/coredump-python3
</span></span><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span> ls -al core*
</span></span><span style="display:flex;"><span><span style="color:#888">core.1 core.7 core.8
</span></span></span></code></pre></div><p><code>coredump-python3</code>ã¹ã¯ãªãããå®è¡ããã¨ããã§ãã¯ãã¤ã³ãã¤ã¡ã¼ã¸ãã³ã³ããå
ã®åããã»ã¹ã«å¯¾ã1ã¤ã®ã³ã¢ãã³ããã¡ã¤ã«ã«å¤æããã¾ãã
<code>gdb</code>ã使ç¨ãã¦ããã»ã¹ã®è©³ç´°ãè¦ããã¨ãã§ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span><span style="color:#000080;font-weight:bold">$</span>Â <span style="color:#a2f">echo</span> info registers | gdb --core checkpoint/core.1 -q
</span></span><span style="display:flex;"><span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#888">[New LWP 1]
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#888">Core was generated by `bash -c /home/counter/counter.py 2>&1 | tee /home/counter/logfile'.
</span></span></span><span style="display:flex;"><span><span style="color:#888"></span><span style="">
</span></span></span><span style="display:flex;"><span><span style=""></span><span style="color:#000080;font-weight:bold">#</span><span style="color:#666">0</span> 0x00007fefba110198 in ?? <span style="color:#666">()</span>
</span></span><span style="display:flex;"><span><span style="color:#888">(gdb)
</span></span></span><span style="display:flex;"><span><span style="color:#888">rax 0x3d 61
</span></span></span><span style="display:flex;"><span><span style="color:#888">rbx 0x8 8
</span></span></span><span style="display:flex;"><span><span style="color:#888">rcx 0x7fefba11019a 140667595587994
</span></span></span><span style="display:flex;"><span><span style="color:#888">rdx 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">rsi 0x7fffed9c1110 140737179816208
</span></span></span><span style="display:flex;"><span><span style="color:#888">rdi 0xffffffff 4294967295
</span></span></span><span style="display:flex;"><span><span style="color:#888">rbp 0x1 0x1
</span></span></span><span style="display:flex;"><span><span style="color:#888">rsp 0x7fffed9c10e8 0x7fffed9c10e8
</span></span></span><span style="display:flex;"><span><span style="color:#888">r8 0x1 1
</span></span></span><span style="display:flex;"><span><span style="color:#888">r9 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">r10 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">r11 0x246 582
</span></span></span><span style="display:flex;"><span><span style="color:#888">r12 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">r13 0x7fffed9c1170 140737179816304
</span></span></span><span style="display:flex;"><span><span style="color:#888">r14 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">r15 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">rip 0x7fefba110198 0x7fefba110198
</span></span></span><span style="display:flex;"><span><span style="color:#888">eflags 0x246 [ PF ZF IF ]
</span></span></span><span style="display:flex;"><span><span style="color:#888">cs 0x33 51
</span></span></span><span style="display:flex;"><span><span style="color:#888">ss 0x2b 43
</span></span></span><span style="display:flex;"><span><span style="color:#888">ds 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">es 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">fs 0x0 0
</span></span></span><span style="display:flex;"><span><span style="color:#888">gs 0x0 0
</span></span></span></code></pre></div><p>ãã®ä¾ã§ã¯ããã§ãã¯ãã¤ã³ãä¸ã®å
¨ã¦ã®ã¬ã¸ã¹ããªã®å¤ãè¦ããã¨ãã§ããã³ã³ããã®PID 1ã®ããã»ã¹ã®å®å
¨ãªã³ãã³ãã©ã¤ã³(<code>bash -c /home/counter/counter.py 2>&1 | tee /home/counter/logfile</code>)ãè¦ããã¨ãã§ãã¾ãã</p>
<h2 id="ã¾ã¨ã">ã¾ã¨ã</h2>
<p>ã³ã³ãããã§ãã¯ãã¤ã³ãã使ãããã¨ã§ãã³ã³ããã忢ãããã¨ããã§ãã¯ãã¤ã³ãã使ããããã¨ãç¥ããã¨ãªããå®è¡ä¸ã®ã³ã³ããã®ãã§ãã¯ãã¤ã³ãã使ãããã¨ãå¯è½ã§ãã
Kubernetesã«ããã¦ã³ã³ããã®ãã§ãã¯ãã¤ã³ãã使ããçµæããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã§ãã
<code>checkpointctl</code>ã<code>tar</code>ã<code>crit</code>ã<code>gdb</code>ã®ãããªç°ãªããã¼ã«ã使ç¨ãã¦ããã§ãã¯ãã¤ã³ããåæã§ãã¾ãã
<code>grep</code>ã®ãããªã·ã³ãã«ãªãã¼ã«ã§ããããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãå
ã®æ
å ±ãè¦ã¤ãããã¨ãå¯è½ã§ãã</p>
<p>ãã®è¨äºã§ç¤ºãããã§ãã¯ãã¤ã³ãã®åææ¹æ³ã®ãã¾ãã¾ãªä¾ã¯åºçºç¹ã«ããã¾ããã
ãã®è¨äºã§ã¯ãã§ãã¯ãã¤ã³ãã®åæãå§ããæ¹æ³ãç´¹ä»ãã¾ããããè¦ä»¶ã«ãã£ã¦ã¯ããªã詳細ã«ç¹å®ã®ç©äºãè¦ããã¨ãå¯è½ã§ãã</p>
<h2 id="åå ããããã«ã¯ã©ãããã°ããã§ãã">åå ããããã«ã¯ã©ãããã°ããã§ããï¼</h2>
<p>SIG Nodeã«ã¯ããã¤ãã®æ¹æ³ã§ã¢ã¯ã»ã¹ã§ãã¾ãã</p>
<ul>
<li>Slack: <a href="https://kubernetes.slack.com/messages/sig-node">#sig-node</a></li>
<li>Slack: <a href="https://kubernetes.slack.com/messages/sig-security">#sig-security</a></li>
<li><a href="https://groups.google.com/forum/#!forum/kubernetes-sig-node">ã¡ã¼ãªã³ã°ãªã¹ã</a></li>
</ul>
- Kubernetes 1.26: PodDisruptionBudgetã«ãã£ã¦ä¿è·ãããä¸å¥å
¨ãªPodã«å¯¾ããéé¿ããªã·ã¼https://kubernetes.io/ja/blog/2023/01/06/unhealthy-pod-eviction-policy-for-pdbs/Fri, 06 Jan 2023 00:00:00 +0000https://kubernetes.io/ja/blog/2023/01/06/unhealthy-pod-eviction-policy-for-pdbs/
<p>ã¢ããªã±ã¼ã·ã§ã³ã®ä¸æããã®å¯ç¨æ§ã«å½±é¿ãä¸ããªãããã«ãããã¨ã¯ãç°¡åãªä½æ¥ã§ã¯ããã¾ããã
å
æãªãªã¼ã¹ãããKubernetes v1.26ã§ã¯ã<a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/disruptions/#pod-disruption-budgets">PodDisruptionBudget</a> (PDB) ã«
<em>ä¸å¥å
¨ãªPodã®éé¿ããªã·ã¼</em> ãæå®ãã¦ããã¼ã管çæä½ä¸ã«å¯ç¨æ§ãç¶æã§ããããã«ãªãã¾ããã
ãã®è¨äºã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ææè
ã䏿ãããæè»ã«ç®¡çã§ããããã«ããããã«ãPDBã«ã©ã®ãããªå¤æ´ãå°å
¥ãããã®ãã詳ãã説æãã¾ãã</p>
<h2 id="what-problem-does-this-solve">ããã¯ã©ã®ãããªåé¡ã解決ãã¾ããï¼</h2>
<p>APIã«ãã£ã¦éå§ãããPodã®éé¿ã§ã¯ãPodDisruptionBudget(PDB)ãèæ
®ããã¾ãã
ããã¯ãéé¿ã«ããPodã¸ã®<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/#pod-disruption">èªçºçãªä¸æ</a>ã®è¦æ±ã¯ä¿è·ãããã¢ããªã±ã¼ã·ã§ã³ã䏿ãã¦ã¯ãªããã
PDBã®<code>.status.currentHealthy</code>ã<code>.status.desiredHealthy</code>ãä¸åã£ã¦ã¯ãããªããã¨ãæå³ãã¾ãã
<a href="https://kubernetes.io/ja/docs/tasks/run-application/configure-pdb/#healthiness-of-a-pod">Unhealthy</a>ãªå®è¡ä¸ã®Podã¯PDBã¹ãã¼ã¿ã¹ã«ã¯ã«ã¦ã³ãããã¾ãããã
ãããã®éé¿ã¯ã¢ããªã±ã¼ã·ã§ã³ã䏿ãããªãå ´åã«ã®ã¿å¯è½ã§ãã
ããã«ããã䏿ãããã¢ããªã±ã¼ã·ã§ã³ãã¾ã éå§ããã¦ããªãã¢ããªã±ã¼ã·ã§ã³ããéé¿ã«ãã£ã¦è¿½å ã®ãã¦ã³ã¿ã¤ã ãçºçãããã¨ãªããã§ããã ãæ©ãå¯ç¨æ§ãéæã§ããããã«ãªãã¾ãã</p>
<p>æ®å¿µãªãããããã¯æåã®ä»å
¥ãªãã§ãã¼ãããã¬ã¤ã³ãããã¯ã©ã¹ã¿ã¼ç®¡çè
ã«ã¨ã£ã¦åé¡ãå¼ãèµ·ããã¾ãã
(ãã°ã¾ãã¯æ§æãã¹ã«ãã)Podã<code>CrashLoopBackOff</code>ç¶æ
ã«ãªã£ã¦ããã¢ããªã±ã¼ã·ã§ã³ãã¾ãã¯åã«æºåãã§ãã¦ããªãPodãããã¢ããªã±ã¼ã·ã§ã³ã誤åä½ãã¦ããå ´åããã®ã¿ã¹ã¯ã¯ããã«å°é£ã«ãªãã¾ãã
ã¢ããªã±ã¼ã·ã§ã³ã®ãã¹ã¦ã®Podãæ£å¸¸ã§ãªãå ´åãPDBã®éåã«ããéé¿ãªã¯ã¨ã¹ãã¯å¤±æãã¾ãããã®å ´åããã¼ãã®ãã¬ã¤ã³ã¯é²è¡ã§ãã¾ããã</p>
<p>䏿¹ã§ã次ã®ç®çã§å¾æ¥ã®åä½ã«ä¾åããã¦ã¼ã¶ã¼ããã¾ãã</p>
<ul>
<li>åºç¤ã¨ãªããªã½ã¼ã¹ã¾ãã¯ã¹ãã¬ã¼ã¸ãä¿è·ãã¦ããPodã®åé¤ã«ãã£ã¦å¼ãèµ·ãããããã¼ã¿æå¤±ã鲿¢ãã</li>
<li>ã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦å¯è½ãªéãæé«ã®å¯ç¨æ§ãå®ç¾ãã</li>
</ul>
<p>Kubernetes 1.26ã§ã¯ãPodDisruptionBudget APIã«æ°ããå®é¨çãã£ã¼ã«ã<code>.spec.unhealthyPodEvictionPolicy</code>ãå°å
¥ããã¾ããã
ãã®ãã£ã¼ã«ããæå¹ã«ããã¨ããããã®è¦ä»¶ã®ä¸¡æ¹ããµãã¼ãã§ããããã«ãªãã¾ãã</p>
<h2 id="how-does-it-work">ã©ã®ããã«æ©è½ãã¾ããï¼</h2>
<p>APIã«ãã£ã¦éå§ãããéé¿ã¯ãPodã®å®å
¨ãªçµäºãããªã¬ã¼ããããã»ã¹ã§ãã
ãã®ããã»ã¹ã¯ãAPIãç´æ¥å¼ã³åºããã<code>kubectl drain</code>ã³ãã³ãã使ç¨ããããã¯ã©ã¹ã¿ã¼å
ã®ä»ã®ã¢ã¯ã¿ã¼ã使ç¨ãã¦éå§ã§ãã¾ãã
ãã®ããã»ã¹ä¸ã«ãååãªæ°ã®Podã常ã«ã¯ã©ã¹ã¿ã¼å
ã§å®è¡ããã¦ãããã¨ã確èªããããã«ããã¹ã¦ã®Podã®åé¤ãé©åãªPDBã¨ç
§åããã¾ãã</p>
<p>次ã®ããªã·ã¼ã«ãããPDBã®ä½æè
ã¯ãããã»ã¹ãä¸å¥å
¨ãªPodãå¦çããæ¹æ³ããã詳細ã«å¶å¾¡ã§ããããã«ãªãã¾ãã</p>
<p><code>IfHealthyBudget</code>ã¨<code>AlwaysAllow</code>ã®2ã¤ã®ããªã·ã¼ãã鏿ã§ãã¾ãã</p>
<p>åè
ã®<code>IfHealthyBudget</code>ã¯ã徿¥ã®åä½ã«å¾ã£ã¦ãããã©ã«ãã§å¾ãããæé«ã®å¯ç¨æ§ãå®ç¾ãã¾ãã
ä¸å¥å
¨ãªPodã¯ãã¢ããªã±ã¼ã·ã§ã³ãå©ç¨å¯è½ãªæå°æ°ã®<code>.status.desiredHealthy</code>ã ãPodãããå ´åã«ã®ã¿ä¸æã§ãã¾ãã</p>
<p>PDBã®<code>spec.unhealthyPodEvictionPolicy</code>ãã£ã¼ã«ãã<code>AlwaysAllow</code>ã«è¨å®ãããã¨ã«ãããã¢ããªã±ã¼ã·ã§ã³ã«ã¨ã£ã¦ãã¹ãã¨ãã©ã¼ãã®å¯ç¨æ§ã鏿ãããã¨ã«ãªãã¾ãã
ãã®ããªã·ã¼ã使ç¨ããã¨ãä¸å¥å
¨ãªPodããã¤ã§ãåé¤ã§ãã¾ããããã«ãããã¯ã©ã¹ã¿ã¼ã®ä¿å®ã¨ã¢ããã°ã¬ã¼ãã容æã«ãªãã¾ãã</p>
<p>å¤ãã®å ´åã<code>AlwaysAllow</code>ãããè¯ã鏿ã§ããã¨èãããã¾ãããä¸é¨ã®éè¦ãªã¯ã¼ã¯ãã¼ãã§ã¯ã
ä¸å¥å
¨ãªPodã§ãã£ã¦ããã¼ããã¬ã¤ã³ãAPIã«ãã£ã¦éå§ãããä»ã®å½¢å¼ã®éé¿ããä¿è·ããæ¹ãæã¾ããå ´åãããã¾ãã</p>
<h2 id="how-do-i-use-it">ã©ã®ããã«å©ç¨ã§ãã¾ããï¼</h2>
<p>ããã¯ã¢ã«ãã¡æ©è½ã§ãããããkube-apiserverã«å¯¾ãã¦ã³ãã³ãã©ã¤ã³å¼æ°<code>--feature-gates=PDBUnhealthyPodEvictionPolicy=true</code>ãæå®ãã¦
<code>PDBUnhealthyPodEvictionPolicy</code><a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ãæå¹ã«ããå¿
è¦ãããã¾ãã</p>
<p>ããã«ä¾ã示ãã¾ããã¯ã©ã¹ã¿ã¼ã§ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ãããã¬ã¼ã³ãªWebãµã¼ãã¼ãå®è¡ããDeploymentããã§ã«å®ç¾©ãã¦ããã¨ä»®å®ãã¾ãã
ãã®Deploymentã®Podã«<code>app: nginx</code>ã¨ããã©ãã«ãä»ãã¾ããã
åé¿å¯è½ãªä¸æãå¶éãããã¨èãã¦ããããã®ã¢ããªã«ã¯ãã¹ãã¨ãã©ã¼ãã®å¯ç¨æ§ã§ååã§ãããã¨ãããã£ã¦ãã¾ãã
Webãµã¼ãã¼ã®Podãä¸å¥å
¨ãªå ´åã§ããéé¿ã許å¯ãããã¨ã«ãã¾ããã
ä¸å¥å
¨ãªPodãæé¤ããããã®<code>AlwaysAllow</code>ããªã·ã¼ã使ç¨ãã¦ããã®ã¢ããªã±ã¼ã·ã§ã³ãä¿è·ããPDBã使ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>policy/v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>PodDisruptionBudget<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>nginx-pdb<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">selector</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">matchLabels</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">app</span>:<span style="color:#bbb"> </span>nginx<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">maxUnavailable</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">unhealthyPodEvictionPolicy</span>:<span style="color:#bbb"> </span>AlwaysAllow<span style="color:#bbb">
</span></span></span></code></pre></div><h2 id="how-can-i-learn-more">ãã£ã¨å¦ã¶ã«ã¯ï¼</h2>
<ul>
<li>KEPãèªãã§ãã ãã: <a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-apps/3017-pod-healthy-policy-for-pdb">Unhealthy Pod Eviction Policy for PDBs</a></li>
<li>PodDisruptionBudgetã«ã¤ãã¦ã®ããã¥ã¡ã³ããèªãã§ãã ãã: <a href="https://kubernetes.io/ja/docs/tasks/run-application/configure-pdb/#unhealthy-pod-eviction-policy">Unhealthy Pod Eviction Policy</a></li>
<li><a href="https://kubernetes.io/ja/docs/concepts/workloads/pods/disruptions/#pod-disruption-budgets">PodDisruptionBudget</a>ã<a href="https://kubernetes.io/ja/docs/tasks/administer-cluster/safely-drain-node/">draining of Nodes</a>ããã³<a href="https://kubernetes.io/ja/docs/concepts/scheduling-eviction/api-eviction/">evictions</a>ã«ã¤ãã¦Kubernetesããã¥ã¡ã³ãã確èªãã¦ãã ãã</li>
</ul>
<h2 id="how-do-i-get-involved">ã©ãããã°åå ã§ãã¾ããï¼</h2>
<p>ãã£ã¼ãããã¯ãããå ´åã¯ãSlackã®<a href="https://kubernetes.slack.com/archives/C18NZM5K9">#sig-apps</a> ãã£ã³ãã«(å¿
è¦ãªå ´å㯠<a href="https://slack.k8s.io/">https://slack.k8s.io/</a> ã«ã¢ã¯ã»ã¹ãã¦æå¾
ãåãã¦ãã ãã)ãã¾ãã¯SIG Appsã¡ã¼ãªã³ã°ãªã¹ãã«ãé£çµ¡ãã ããã[email protected]</p>
- Kubernetesã«ããããã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çhttps://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/Mon, 05 Dec 2022 00:00:00 +0000https://kubernetes.io/ja/blog/2022/12/05/forensic-container-checkpointing-alpha/
<p>ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çã¯<a href="https://criu.org/">Checkpoint/Restore In Userspace</a> (CRIU)ã«åºã¥ãã¦ãããã³ã³ããããã§ãã¯ãã¤ã³ãããã¦ãããã¨ãèªèãããã¨ãªããå®è¡ä¸ã®ã³ã³ããã®ã¹ãã¼ããã«ã³ãã¼ã使ãããã¨ãã§ãã¾ãã
ã³ã³ããã®ã³ãã¼ã¯ãå
ã®ã³ã³ããã«æ°ã¥ããããã¨ãªãããµã³ãããã¯ã¹ç°å¢ã§è¤æ°åã®åæããªã¹ãã¢ãå¯è½ã§ãã
ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çã¯Kubernetes v1.25ã§alphaæ©è½ã¨ãã¦å°å
¥ããã¾ããã</p>
<h2 id="ã©ã®ããã«æ©è½ãã¾ãã">ã©ã®ããã«æ©è½ãã¾ããï¼</h2>
<p>CRIUã使ç¨ãã¦ã³ã³ããã®ãã§ãã¯ãã¤ã³ãããªã¹ãã¢ãè¡ããã¨ãå¯è½ã§ãã
CRIUã¯runcãcrunãCRI-Oãcontainerdã¨çµ±åããã¦ãããKubernetesã§å®è£
ããã¦ãããã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çã¯ãæ¢åã®CRIUçµ±åã使ç¨ãã¾ãã</p>
<h2 id="ãªãéè¦ãªã®ã">ãªãéè¦ãªã®ãï¼</h2>
<p>CRIUã¨å¯¾å¿ããçµ±åæ©è½ã使ç¨ãããã¨ã§ãå¾ã§ãã©ã¬ã³ã¸ãã¯åæãè¡ãããã«ããã£ã¹ã¯ä¸ã§å®è¡ä¸ã®ã³ã³ããã«é¢ããå
¨ã¦ã®æ
å ±ã¨ç¶æ
ãåå¾ãããã¨ãå¯è½ã§ãã
ãã©ã¬ã³ã¸ãã¯åæã¯ãçãããã³ã³ããã忢ãããå½±é¿ãä¸ãããã¨ãªãæ¤æ»ããããã«éè¦ã¨ãªãå ´åãããã¾ãã
ã³ã³ãããæ¬å½ã«æ»æãåãã¦ããå ´åãæ»æè
ã¯ã³ã³ãããæ¤æ»ããå¦çãæ¤ç¥ããããããã¾ããã
ãã§ãã¯ãã¤ã³ããåå¾ããµã³ãããã¯ã¹ç°å¢ã§ã³ã³ãããåæãããã¨ã¯ãå
ã®ã³ã³ããããããããæ»æè
ã«ãæ¤æ»ãèªèããããã¨ãªããã³ã³ãããæ¤æ»ãããã¨ãã§ããå¯è½æ§ãããã¾ãã</p>
<p>ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çã®ã¦ã¼ã¹ã±ã¼ã¹ã«å ãã¦ãå
é¨ç¶æ
ã失ããã¨ãªãããããã¼ãããä»ã®ãã¼ãã«ã³ã³ãããç§»è¡ãããã¨ãå¯è½ã§ãã
ç¹ã«åæåæéã®é·ãã¹ãã¼ããã«ã³ã³ããã®å ´åããã§ãã¯ãã¤ã³ããããªã¹ãã¢ãããã¨ã¯åèµ·åå¾ã®æéãç¯ç´ãããããèµ·åæéãããæ©ããªãå¯è½æ§ãããã¾ãã</p>
<h2 id="ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çãå©ç¨ããã«ã¯">ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çãå©ç¨ããã«ã¯ï¼</h2>
<p>æ©è½ã¯<a href="https://kubernetes.io/ja/docs/reference/command-line-tools-reference/feature-gates/">ãã£ã¼ãã£ã¼ã²ã¼ã</a>ã§å¶éããã¦ãããããæ°ããæ©è½ã使ç¨ããåã«<code>ContainerCheckpoint</code>ãæå¹ã«ãã¦ãã ããã</p>
<p>ã©ã³ã¿ã¤ã ãã³ã³ãããã§ãã¯ãã¤ã³ãå¦çããµãã¼ããã¦ããå¿
è¦ãããã¾ãã</p>
<ul>
<li>containerd: ãµãã¼ãã¯ç¾å¨æ¤è¨ä¸ã§ãã詳細ã¯containerdãã«ãªã¯ã¨ã¹ã<a href="https://github.com/containerd/containerd/pull/6965">#6965</a>ãè¦ã¦ãã ããã</li>
<li>CRI-O: v1.25ã¯ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çããµãã¼ããã¦ãã¾ãã</li>
</ul>
<h3 id="cri-oã§ã®ä½¿ç¨ä¾">CRI-Oã§ã®ä½¿ç¨ä¾</h3>
<p>CRI-Oã¨ã®çµã¿åããã§ãã©ã¬ã³ã¸ãã¯ã³ã³ãããã§ãã¯ãã¤ã³ãå¦çã使ç¨ããããã«ã¯ãã©ã³ã¿ã¤ã ãã³ãã³ãã©ã¤ã³ãªãã·ã§ã³<code>--enable-criu-support=true</code>ã§èµ·åããå¿
è¦ãããã¾ãã
Kubernetesã§ã¯ã<code>ContainerCheckpoint</code>ãã£ã¼ãã£ã¼ã²ã¼ããæå¹ã«ããã¯ã©ã¹ã¿ã¼ãå®è¡ããå¿
è¦ãããã¾ãã
ãã§ãã¯ãã¤ã³ãå¦çã®æ©è½ã¯CRIUã«ãã£ã¦æä¾ããã¦ãããããCRIUãã¤ã³ã¹ãã¼ã«ãããã¨ãå¿
è¦ã¨ãªãã¾ãã
é常ãruncãcrunã¯CRIUã«ä¾åãã¦ãããããèªåçã«ã¤ã³ã¹ãã¼ã«ããã¾ãã</p>
<p>å·çæç¹ã§ã¯ãã§ãã¯ãã¤ã³ãæ©è½ã¯CRI-OãKubernetesã«ããã¦alphaæ©è½ã¨ãã¦ã¿ãªããã¦ãããã»ãã¥ãªãã£å½±é¿ãã¾ã æ¤è¨ä¸ã§ãããã¨ã«è¨åãããã¨ãéè¦ã§ãã</p>
<p>ã³ã³ããã¨Podãå®è¡ãããã¨ããã§ãã¯ãã¤ã³ãã使ãããã¨ãå¯è½ã«ãªãã¾ãã
<a href="https://kubernetes.io/docs/reference/node/kubelet-checkpoint-api/">ãã§ãã¯ãã¤ã³ãå¦ç</a>ã¯<strong>kubelet</strong>ã¬ãã«ã§ã®ã¿å
¬éããã¦ãã¾ãã
ã³ã³ããããã§ãã¯ãã¤ã³ãããããã«ã¯ãã³ã³ãããå®è¡ããã¦ãããã¼ãä¸ã§<code>curl</code>ãå®è¡ãããã§ãã¯ãã¤ã³ããããªã¬ã¼ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>curl -X POST <span style="color:#b44">"https://localhost:10250/checkpoint/namespace/podId/container"</span>
</span></span></code></pre></div><p><em>default</em>åå空éå
ã®<em>counters</em>ã¨å¼ã°ããPodå
ã®<em>counter</em>ã¨å¼ã°ããã³ã³ããã«å¯¾ãã<strong>kubelet</strong> APIã¨ã³ããã¤ã³ããæ¬¡ã®å ´æã§å°éå¯è½ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>curl -X POST <span style="color:#b44">"https://localhost:10250/checkpoint/default/counters/counter"</span>
</span></span></code></pre></div><p>å³å¯ã«ã¯ãkubeletã®èªå·±ç½²åè¨¼ææ¸ã許容ããkubeletãã§ãã¯ãã¤ã³ãAPIã®ä½¿ç¨ãèªå¯ããããã«ãä¸è¨ã®curlã³ãã³ãã®ãªãã·ã§ã³ãå¿
è¦ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>--insecure --cert /var/run/kubernetes/client-admin.crt --key /var/run/kubernetes/client-admin.key
</span></span></code></pre></div><p>ãã®<strong>kubelet</strong> APIãå®è¡ãããã¨ãCRI-Oãããã§ãã¯ãã¤ã³ãã®ä½æããªã¯ã¨ã¹ããã¾ãã
CRI-Oã¯ä½ã¬ãã«ã©ã³ã¿ã¤ã (ä¾ãã°<code>runc</code>)ãããã§ãã¯ãã¤ã³ãããªã¯ã¨ã¹ããã¾ãã
ãã®ãªã¯ã¨ã¹ãã確èªããã¨ã<code>runc</code>ã¯å®éã®ãã§ãã¯ãã¤ã³ããè¡ãããã«<code>criu</code>ãã¼ã«ãå¼ã³åºãã¾ãã</p>
<p>ãã§ãã¯ãã¤ã³ãå¦çãçµäºããã¨ããã§ãã¯ãã¤ã³ãã¯<code>/var/lib/kubelet/checkpoints/checkpoint-<pod-name>_<namespace-name>-<container-name>-<timestamp>.tar</code>ã§å©ç¨å¯è½ã«ãªãã¾ãã</p>
<p>ãã®å¾ããã®tarã¢ã¼ã«ã¤ãã使ç¨ãã¦ã³ã³ãããå¥ã®å ´æã«ãªã¹ãã¢ã§ãã¾ãã</p>
<h3 id="restore-checkpointed-container-standalone">Kubernetesã®å¤é¨ã§ãã§ãã¯ãã¤ã³ãããã³ã³ããããªã¹ãã¢ãã(CRI-Oã使ç¨)</h3>
<p>ãã§ãã¯ãã¤ã³ãtarã¢ã¼ã«ã¤ãã使ç¨ããã¨ãCRI-Oã®ãµã³ãããã¯ã¹ã¤ã³ã¹ã¿ã³ã¹å
ã®Kubernetesã®å¤é¨ã«ã³ã³ããããªã¹ãã¢å¯è½ã§ãã
ãªã¹ãã¢ä¸ã®ããè¯ãã¦ã¼ã¶ã¨ã¯ã¹ããªã¨ã³ã¹ã®ããã«ã<em>main</em> CRI-O GitHubãã©ã³ãããCRI-Oã®latestãã¼ã¸ã§ã³ã使ç¨ãããã¨ãæ¨å¥¨ãã¾ãã
CRI-O v1.25ã使ç¨ãã¦ããå ´åãã³ã³ãããéå§ããåã«Kubernetesã使ããç¹å®ã®ãã£ã¬ã¯ããªãæåã§ä½æããå¿
è¦ãããã¾ãã</p>
<p>Kubernetesã®å¤é¨ã«ã³ã³ããããªã¹ãã¢ããããã®æåã®ã¹ãããã¯ã<em>crictl</em>ã使ç¨ãã¦Podãµã³ãããã¯ã¹ã使ãããã¨ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>crictl runp pod-config.json
</span></span></code></pre></div><p>次ã«ãããã»ã©ãã§ãã¯ãã¤ã³ãããã³ã³ãããæ°ãã使ããPodãµã³ãããã¯ã¹ã«ãªã¹ãã¢ãã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>crictl create <POD_ID> container-config.json pod-config.json
</span></span></code></pre></div><p><code>container-config.json</code>ã®ã¬ã¸ã¹ããªã§ã³ã³ããã¤ã¡ã¼ã¸ãæå®ãã代ããã«ãåã«ä½æãããã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã¸ã®ãã¹ãæå®ããå¿
è¦ãããã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">"metadata"</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">"name"</span>: <span style="color:#b44">"counter"</span>
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">"image"</span>:{
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">"image"</span>: <span style="color:#b44">"/var/lib/kubelet/checkpoints/<checkpoint-archive>.tar"</span>
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>次ã«ããã®ã³ã³ãããéå§ããããã«<code>crictl start <CONTAINER_ID></code>ãå®è¡ããã¨ãããã»ã©ãã§ãã¯ãã¤ã³ãããã³ã³ããã®ã³ãã¼ãå®è¡ããã¦ããã¯ãã§ãã</p>
<h3 id="restore-checkpointed-container-k8s">Kuberneteså
ã§ãã§ãã¯ãã¤ã³ãããã³ã³ããããªã¹ãã¢ãã</h3>
<p>å
ã»ã©ãã§ãã¯ãã¤ã³ãããã³ã³ãããKuberneteså
ã§ç´æ¥ãªã¹ãã¢ããããã«ã¯ãã¬ã¸ã¹ããªã«ããã·ã¥ã§ããã¤ã¡ã¼ã¸ã«ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã夿ããå¿
è¦ãããã¾ãã</p>
<p>ãã¼ã«ã«ã®ãã§ãã¯ãã¤ã³ãã¢ã¼ã«ã¤ãã夿ããããã®æ¹æ³ã¨ãã¦ã<a href="https://buildah.io/">buildah</a>ã使ç¨ããä¸è¨ã®ã¹ããããèãããã¾ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#b8860b">newcontainer</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>buildah from scratch<span style="color:#a2f;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>buildah add <span style="color:#b8860b">$newcontainer</span> /var/lib/kubelet/checkpoints/checkpoint-<pod-name>_<namespace-name>-<container-name>-<timestamp>.tar /
</span></span><span style="display:flex;"><span>buildah config --annotation<span style="color:#666">=</span>io.kubernetes.cri-o.annotations.checkpoint.name<span style="color:#666">=</span><container-name> <span style="color:#b8860b">$newcontainer</span>
</span></span><span style="display:flex;"><span>buildah commit <span style="color:#b8860b">$newcontainer</span> checkpoint-image:latest
</span></span><span style="display:flex;"><span>buildah rm <span style="color:#b8860b">$newcontainer</span>
</span></span></code></pre></div><p>åºæ¥ä¸ãã£ãã¤ã¡ã¼ã¸ã¯æ¨æºåããã¦ããããCRI-Oã¨ã®çµã¿åããã§ã®ã¿åä½ãã¾ãã
ãã®ã¤ã¡ã¼ã¸ã¯alphaã«ãæºããªããã©ã¼ãããã§ããã¨èãã¦ãã ããã
ãã®ãããªãã§ãã¯ãã¤ã³ãã¤ã¡ã¼ã¸ã®ãã©ã¼ããããæ¨æºåããããã®<a href="https://github.com/opencontainers/image-spec/issues/962">è°è«</a>ãé²è¡ä¸ã§ãã
ããã¯ã¾ã æ¨æºåãããã¤ã¡ã¼ã¸ãã©ã¼ãããã§ã¯ãªããCRI-Oã<code>--enable-criu-support=true</code>ã§èµ·åããå ´åã®ã¿åä½ãããã¨ãå¿ããªãã§ãã ããã
CRIUãµãã¼ãã§CRI-Oãèµ·åãããã¨ã®ã»ãã¥ãªãã£å½±é¿ã¯ã¾ã æç¢ºã§ã¯ãªãããã®ãããã¤ã¡ã¼ã¸ãã©ã¼ãããã ãã§ãªãæ©è½ãæ°ãä»ãã¦ä½¿ç¨ããã¹ãã§ãã</p>
<p>ãã¦ããã®ã¤ã¡ã¼ã¸ãã³ã³ããã¤ã¡ã¼ã¸ã¬ã¸ã¹ããªã«ããã·ã¥ããå¿
è¦ãããã¾ãã
ä¾ãã°ä»¥ä¸ã®ãããªæãã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>buildah push localhost/checkpoint-image:latest container-image-registry.example/user/checkpoint-image:latest
</span></span></code></pre></div><p>ãã®ãã§ãã¯ãã¤ã³ãã¤ã¡ã¼ã¸(<code>container-image-registry.example/user/checkpoint-image:latest</code>)ããªã¹ãã¢ããããã«ãã¤ã¡ã¼ã¸ã¯Podã®ä»æ§(Specification)ã«è¨è¼ããå¿
è¦ãããã¾ãã
以ä¸ã¯ãããã§ã¹ãã®ä¾ã§ãã</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">apiVersion</span>:<span style="color:#bbb"> </span>v1<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">kind</span>:<span style="color:#bbb"> </span>Pod<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">metadata</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">namePrefix</span>:<span style="color:#bbb"> </span>example-<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">spec</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">containers</span>:<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span><container-name><span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">image</span>:<span style="color:#bbb"> </span>container-image-registry.example/user/checkpoint-image:latest<span style="color:#bbb">
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nodeName</span>:<span style="color:#bbb"> </span><destination-node><span style="color:#bbb">
</span></span></span></code></pre></div><p>Kubernetesã¯æ°ããPodããã¼ãä¸ã«ã¹ã±ã¸ã¥ã¼ã«ãã¾ãã
ãã®ãã¼ãä¸ã®Kubeletã¯ã<code>registry/user/checkpoint-image:latest</code>ã¨ãã¦æå®ãããã¤ã¡ã¼ã¸ããã¨ã«ãã³ã³ããã使ãéå§ããããã«ã³ã³ããã©ã³ã¿ã¤ã (ãã®ä¾ã§ã¯CRI-O)ã«æç¤ºããã¾ãã
CRI-Oã¯<code>registry/user/checkpoint-image:latest</code>ãã³ã³ããã¤ã¡ã¼ã¸ã§ãªãããã§ãã¯ãã¤ã³ããã¼ã¿ã¸ã®åç
§ã§ãããã¨ãæ¤ç¥ãã¾ãã
ãã®æãã³ã³ããã使ãéå§ããé常ã®ã¹ãããã®ä»£ããã«ãCRI-Oã¯ãã§ãã¯ãã¤ã³ããã¼ã¿ããã§ããããæå®ããããã§ãã¯ãã¤ã³ãããã³ã³ããããªã¹ãã¢ãã¾ãã</p>
<p>Podå
ã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãã§ãã¯ãã¤ã³ããåå¾ããªãã£ããã®ããã«å®è¡ãç¶ãã¾ãã
ã³ã³ããå
ã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ã¯ãã§ãã¯ãã¤ã³ããããªã¹ãã¢ãããé常起åããã³ã³ããã®ãããªè¦ãç®ãåä½ããã¾ãã</p>
<p>ãããã®ã¹ãããã§ããããã¼ãã§åä½ãã¦ããPodããå¥ã®ãã¼ãã§åä½ãã¦ããæ°ããåçã®Podã«ç½®ãæãããã¨ãã§ãããã®Podå
ã®ã³ã³ããã®ç¶æ
ã失ããã¨ã¯ãªãã§ãã</p>
<h2 id="ã©ã®ããã«åå ããã°ããã§ãã">ã©ã®ããã«åå ããã°ããã§ããï¼</h2>
<p>SIG Nodeã«ã¯ããã¤ãã®ææ®µã§ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã</p>
<ul>
<li>Slack: <a href="https://kubernetes.slack.com/messages/sig-node">#sig-node</a></li>
<li><a href="https://groups.google.com/forum/#!forum/kubernetes-sig-node">ã¡ã¼ãªã³ã°ãªã¹ã</a></li>
</ul>
<h2 id="ãããªãèªã¿ç©">ãããªãèªã¿ç©</h2>
<p>ã³ã³ãããã§ãã¯ãã¤ã³ãã®åææ¹æ³ã«é¢ãã詳細ã¯å¾ç¶ã®ããã°<a href="https://kubernetes.io/blog/2023/03/10/forensic-container-analysis/">Forensic container analysis</a>ãåç
§ãã¦ãã ããã</p>
- æ´æ°: dockershimã®åé¤ã«é¢ããFAQhttps://kubernetes.io/ja/blog/2022/02/17/dockershim-faq/Thu, 17 Feb 2022 00:00:00 +0000https://kubernetes.io/ja/blog/2022/02/17/dockershim-faq/
<p><strong>ãã®è¨äºã¯2020å¹´ã®å¾åã«æç¨¿ããããªãªã¸ãã«ã®è¨äº<a href="https://kubernetes.io/blog/2020/12/02/dockershim-faq/">Dockershim Deprecation FAQ</a>ã®æ´æ°çã§ãã
ãã®è¨äºã«ã¯v1.24ã®ãªãªã¼ã¹ã«é¢ããæ´æ°ãå«ã¿ã¾ãã</strong></p>
<hr>
<p>ãã®ææ¸ã§ã¯ãKubernetesããã® <em>dockershim</em> ã®åé¤ã«é¢ãããããã質åã«ã¤ãã¦èª¬æãã¾ãã
ãã®åé¤ã¯Kubernetes v1.20ãªãªã¼ã¹ã®ä¸é¨ã¨ãã¦ã¯ããã¦<a href="https://kubernetes.io/blog/2020/12/08/kubernetes-1-20-release-announcement/">çºè¡¨</a>ããããã®ã§ãã
Kubernetes <a href="https://kubernetes.io/ja/releases/#release-v1-24">v1.24ã®ãªãªã¼ã¹</a>ã«ããã¦dockershimã¯å®éã«Kubernetesããåé¤ããã¾ããã</p>
<p>ãããä½ãæå³ãããã«ã¤ãã¦ã¯ãããã°è¨äº<a href="https://kubernetes.io/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/">Don't Panic: Kubernetes and Docker</a>ãã覧ãã ããã</p>
<p><a href="https://kubernetes.io/ja/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/">dockershimåé¤ã®å½±é¿ç¯å²ã確èªãã</a>ããèªã¿ããã ããã¨ã§ã
dockershimã®åé¤ãããªããããªãã®çµç¹ã«ä¸ããå½±é¿ãã夿ããã ãã¾ãã</p>
<p>Kubernetes 1.24ãªãªã¼ã¹ã«è³ãã¾ã§ã®éãKubernetesã³ã³ããªãã¥ã¼ã¿ã¼ã¯ãã®ç§»è¡ãåæ»ã«è¡ããããã«ããããã«å°½åãã¦ãã¾ããã</p>
<ul>
<li>ç§ãã¡ã®<a href="https://kubernetes.io/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/">ã³ãããã¡ã³ãã¨æ¬¡ã®ã¹ããã</a>ã詳述ããããã°è¨äºã</li>
<li><a href="https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/#container-runtimes">ä»ã®ã³ã³ããã©ã³ã¿ã¤ã </a>ã¸ã®ç§»è¡ã«å¤§ããªé害ããããã©ããã®ãã§ãã¯ã</li>
<li><a href="https://kubernetes.io/ja/docs/tasks/administer-cluster/migrating-from-dockershim/">dockershimããã®ç§»è¡</a>ã¬ã¤ãã®è¿½å ã</li>
<li><a href="https://kubernetes.io/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/">dockershimã®åé¤ã¨CRIäºæã©ã³ã¿ã¤ã ã®ä½¿ç¨ã«é¢ããè¨äºä¸è¦§</a>ã®ä½æã
ãã®ãªã¹ãã«ã¯ãä¸ã«ç¤ºããææ¸ã®ä¸é¨ãå«ã¾ãã¦ãããã¾ããå³é¸ãããå¤é¨ã®æ
å ±(ãã³ãã¼ã«ããã¬ã¤ããå«ã)ãã«ãã¼ãã¦ãã¾ãã</li>
</ul>
<h3 id="dockershimã¯ãªãkubernetesããåé¤ãããã®ã§ãã">dockershimã¯ãªãKubernetesããåé¤ãããã®ã§ããï¼</h3>
<p>Kubernetesã®åæã®ãã¼ã¸ã§ã³ã¯ãç¹å®ã®ã³ã³ããã©ã³ã¿ã¤ã ä¸ã§ã®ã¿åä½ãã¾ããã
Docker Engineã§ãããã®å¾ãKubernetesã¯ä»ã®ã³ã³ããã©ã³ã¿ã¤ã ã¨é£æºããããã®ãµãã¼ãã追å ãã¾ããã
ãªã¼ã±ã¹ãã¬ã¼ã¿ã¼(Kubernetesãªã©)ã¨å¤ãã®ç°ãªãã³ã³ããã©ã³ã¿ã¤ã ã®éã®ç¸äºéç¨ãå¯è½ã«ããããã
CRIæ¨æºã<a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/">使</a>ããã¾ããã
Docker Engineã¯ãã®ã¤ã³ã¿ã¼ãã§ã¼ã¹(CRI)ãå®è£
ãã¦ããªããããKubernetesããã¸ã§ã¯ãã¯ç§»è¡ãæ¯æ´ããç¹å¥ãªã³ã¼ãã使ãã
ãã® <em>dockershim</em> ã³ã¼ããKubernetesèªèº«ã®ä¸é¨ã¨ãã¾ããã</p>
<p>dockershimã³ã¼ãã¯å¸¸ã«ä¸æçãªè§£æ±ºçã§ãããã¨ãæå³ããã¦ãã¾ãã(ãã®ããshimã¨åä»ãããã¦ãã¾ã)ã
ã³ãã¥ããã£ã§ã®è°è«ãè¨ç»ã«ã¤ãã¦ã¯ã<a href="https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim">dockershimã®åé¤ã«ããKubernetesæ¹è¯ã®ææ¡</a>ã«ã¦ãèªã¿ããã ãã¾ãã</p>
<p>å®éãdockershimã®ã¡ã³ããã³ã¹ã¯Kubernetesã¡ã³ããã¼ã«ã¨ã£ã¦å¤§ããªè² æ
ã«ãªã£ã¦ãã¾ããã</p>
<p>ããã«ãdockershimã¨ã»ã¨ãã©äºææ§ã®ãªãã£ãæ©è½ããã¨ãã°cgroups v2ãã¦ã¼ã¶ã¼ãã¼ã ã¹ãã¼ã¹ãªã©ãã
ãããã®æ°ããCRIã©ã³ã¿ã¤ã ã«å®è£
ããã¦ãã¾ããKubernetesããdockershimãåé¤ãããã¨ã§ããããã®åéã§ã®ãããªãéçºãå¯è½ã«ãªãã¾ãã</p>
<h3 id="dockerã¨ã³ã³ããã¯åããã®ã§ãã">Dockerã¨ã³ã³ããã¯åããã®ã§ããï¼</h3>
<p>Dockerã¯Linuxã®ã³ã³ãããã¿ã¼ã³ãæ®åããããã®åºç¤æè¡ã®çºå±ã«å¯ä¸ãã¦ãã¾ãããã
Linuxã®ã³ã³ããæè¡ãã®ãã®ã¯ããªã以åããåå¨ãã¦ãã¾ãã
ã¾ããã³ã³ããã¨ã³ã·ã¹ãã ã¯Dockerãè¶
ãã¦ããåºç¯ã«çºå±ãã¦ãã¾ããã
OCIãCRIã®ãããªæ¨æºã¯ãDockerã®æ©è½ã®ä¸é¨ãç½®ãæããããæ¢åã®æ©è½ãå¼·åããããããã¨ã§ã
ç§éã®ã¨ã³ã·ã¹ãã ã®å¤ãã®ãã¼ã«ã®æé·ã¨ç¹æ ãå©ãã¦ãã¾ããã</p>
<h3 id="æ¢åã®ã³ã³ããã¤ã¡ã¼ã¸ã¯å¼ãç¶ã使ããã®ã§ãã">æ¢åã®ã³ã³ããã¤ã¡ã¼ã¸ã¯å¼ãç¶ã使ããã®ã§ããï¼</h3>
<p>ã¯ãã<code>docker build</code>ããçæãããã¤ã¡ã¼ã¸ã¯ãå
¨ã¦ã®CRIå®è£
ã§åä½ãã¾ãã
æ¢åã®ã¤ã¡ã¼ã¸ãå
¨ãåãããã«åä½ãã¾ãã</p>
<h3 id="ãã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã«ã¤ãã¦ã¯ã©ãã§ãããã">ãã©ã¤ãã¼ãã¤ã¡ã¼ã¸ã«ã¤ãã¦ã¯ã©ãã§ããããï¼</h3>
<p>ã¯ãããã¹ã¦ã®CRIã©ã³ã¿ã¤ã ã¯Kubernetesã§ä½¿ããã¦ãããã®ã¨åä¸ã®pull secretsããµãã¼ããã¦ããã
PodSpecã¾ãã¯Service Accountãéãã¦å©ç¨ã§ãã¾ãã</p>
<h3 id="kubernetes-1-23ã§docker-engineãå¼ãç¶ã使ç¨ã§ãã¾ãã">Kubernetes 1.23ã§Docker Engineãå¼ãç¶ã使ç¨ã§ãã¾ããï¼</h3>
<p>ã¯ãã1.20ã§å¤æ´ãããã®ã¯ãDocker Engineã©ã³ã¿ã¤ã ã使ç¨ãã¦ããå ´åã«è¦åãã°ã<a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/">kubelet</a>èµ·åæã«åºãããã«ãªã£ããã¨ã ãã§ãã
ãã®è¦åã¯ã1.23ã¾ã§ã®ãã¹ã¦ã®ãã¼ã¸ã§ã³ã§è¡¨ç¤ºããã¾ãã
dockershimã®åé¤ã¯Kubernetes 1.24ã§è¡ããã¾ããã</p>
<p>Kubernetes v1.24以éãå®è¡ãã¦ããå ´åã¯ã<a href="#can-i-still-use-docker-engine-as-my-container-runtime">Docker Engineãå¼ãç¶ãã³ã³ããã©ã³ã¿ã¤ã ã¨ãã¦å©ç¨ã§ãã¾ããï¼</a>ãã覧ãã ããã
(CRIããµãã¼ãããã¦ããKubernetesãªãªã¼ã¹ã使ç¨ãã¦ããå ´åãdockershimããåãæ¿ãããã¨ãã§ãããã¨ãå¿ããªãã§ãã ããã
ãªãªã¼ã¹v1.24ããã¯Kubernetesã«dockershimãå«ã¾ããªããªã£ãããã<strong>å¿
ã</strong>åãæ¿ããªããã°ãªãã¾ãã)ã</p>
<h3 id="ã©ã®criã®å®è£
ã使ãã¹ãã§ãããã">ã©ã®CRIã®å®è£
ã使ãã¹ãã§ããããï¼</h3>
<p>ããã¯é£ãã質åã§ãæ§ã
ãªè¦ç´ ã«ä¾åãã¾ãã
ããDocker Engineããã¾ãåãã¦ããã®ã§ããã°ãcontainerdã«ç§»è¡ããã®ã¯æ¯è¼çç°¡åã§ã
æ§è½ããªã¼ãã¼ãããã確å®ã«æ¹åãããã§ãããã
ããããä»ã®é¸æã®ã»ããããªãã®ç°å¢ã«ããé©åããå ´åãããã¾ãã®ã§ã
<a href="https://landscape.cncf.io/?group=projects-and-products&view-mode=card#runtime--container-runtime">CNCF landscape</a>ã«ãããã¹ã¦ã®é¸æè¢ãæ¤è¨ããããã¨ããããããã¾ãã</p>
<h4 id="can-i-still-use-docker-engine-as-my-container-runtime">Docker Engineãå¼ãç¶ãã³ã³ããã©ã³ã¿ã¤ã ã¨ãã¦å©ç¨ã§ãã¾ããï¼</h4>
<p>第ä¸ã«ããèªèº«ã®PCã§éçºããã¹ãç¨éã§Dockerã使ç¨ãã¦ããå ´åãä½ãå¤ãããã¨ã¯ããã¾ããã
Kubernetesã§ã©ã®ã³ã³ããã©ã³ã¿ã¤ã ã使ã£ã¦ãã¦ããDockerããã¼ã«ã«ã§ä½¿ãç¶ãããã¨ãã§ãã¾ãã
ã³ã³ããã§ã¯ãã®ãããªç¸äºéç¨æ§ãå®ç¾ã§ãã¾ãã</p>
<p>Mirantisã¨Dockerã¯ãKubernetesããå
èµã®dockershimãåé¤ãããå¾ãã
Docker Engineã®ä»£æ¿ã¢ããã¿ã¼ãç¶æãããã¨ã«<a href="https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/">ã³ããã</a>ãã¦ãã¾ãã
代æ¿ã¢ããã¿ã¼ã®ååã¯<a href="https://github.com/Mirantis/cri-dockerd"><code>cri-dockerd</code></a>ã§ãã</p>
<p><code>cri-dockerd</code>ãã¤ã³ã¹ãã¼ã«ãã¦ãkubeletãDocker Engineã«æ¥ç¶ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
詳細ã«ã¤ãã¦ã¯ã<a href="https://kubernetes.io/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/">Migrate Docker Engine nodes from dockershim to cri-dockerd</a>ãèªãã§ãã ããã</p>
<h3 id="ä»ç¾å¨ã§ãããã¯ã·ã§ã³ç°å¢ã«ä»ã®ã©ã³ã¿ã¤ã ã使ç¨ãã¦ããä¾ã¯ããã®ã§ãããã">ä»ç¾å¨ã§ãããã¯ã·ã§ã³ç°å¢ã«ä»ã®ã©ã³ã¿ã¤ã ã使ç¨ãã¦ããä¾ã¯ããã®ã§ããããï¼</h3>
<p>Kubernetesããã¸ã§ã¯ããçã¿åºãããã¹ã¦ã®ææç©(Kubernetesãã¤ããª)ã¯ããªãªã¼ã¹ãã¨ã«æ¤è¨¼ããã¦ãã¾ãã</p>
<p>ã¾ãã<a href="https://kind.sigs.k8s.io/">kind</a>ããã¸ã§ã¯ãã¯ä»¥åããcontainerdã使ã£ã¦ãããããã¸ã§ã¯ãã®ã¦ã¼ã¹ã±ã¼ã¹ã«ããã¦å®å®æ§ãåä¸ãã¦ãã¦ãã¾ãã
kindã¨containerdã¯ãKubernetesã³ã¼ããã¼ã¹ã®å¤æ´ãæ¤è¨¼ããããã«æ¯æ¥ä½åãå©ç¨ããã¦ãã¾ãã
ä»ã®é¢é£ããã¸ã§ã¯ããåæ§ã®ãã¿ã¼ã³ã追ã£ã¦ãããä»ã®ã³ã³ããã©ã³ã¿ã¤ã ã®å®å®æ§ã¨ä½¿ããããã示ããã¦ãã¾ãã
ä¾ã¨ãã¦ãOpenShift 4.xã¯2019å¹´6æä»¥éãCRI-Oã©ã³ã¿ã¤ã ããããã¯ã·ã§ã³ç°å¢ã§ä½¿ã£ã¦ãã¾ãã</p>
<p>ä»ã®äºä¾ãåèè³æã¯ã«ã¤ãã¦ã¯ã
containerdã¨CRI-O(Cloud Native Computing Foundation (<a href="https://cncf.io">CNCF</a>)ã®2ã¤ã®ã³ã³ããã©ã³ã¿ã¤ã )ã®æ¡ç¨ä¾ãã覧ãã ããã</p>
<ul>
<li><a href="https://github.com/containerd/containerd/blob/master/ADOPTERS.md">containerd</a></li>
<li><a href="https://github.com/cri-o/cri-o/blob/master/ADOPTERS.md">CRI-O</a></li>
</ul>
<h3 id="ociã¨ããåèªãããè¦ãã®ã§ãã-ããã¯ä½ã§ãã">OCIã¨ããåèªãããè¦ãã®ã§ãããããã¯ä½ã§ããï¼</h3>
<p>OCIã¯<a href="https://opencontainers.org/about/overview/">Open Container Initiative</a>ã®ç¥ã§ãã³ã³ãããã¼ã«ã¨ãã¯ããã¸ã¼éã®æ°å¤ãã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®æ¨æºåãè¡ã£ãå£ä½ã§ãã
å½¼ãã¯ã³ã³ããã¤ã¡ã¼ã¸ãããã±ã¼ã¸ããããã®æ¨æºä»æ§(OCI image-spec)ã¨ã
ã³ã³ãããå®è¡ããããã®æ¨æºä»æ§(OCI runtime-spec)ãã¡ã³ããã³ã¹ãã¦ãã¾ãã
ã¾ãã<a href="https://github.com/opencontainers/runc">runc</a>ã¨ããå½¢ã§runtime-specã®å®è£
ãã¡ã³ããã³ã¹ãã¦ããã
ããã¯<a href="https://containerd.io/">containerd</a>ã¨<a href="https://cri-o.io/">CRI-O</a>ã®ä¸¡æ¹ã§ããã©ã«ãã®ä¸ä½ã©ã³ã¿ã¤ã ã¨ãªã£ã¦ãã¾ãã
CRIã¯ãããã®ä½ã¬ãã«ä»æ§ã«åºã¥ãã¦ãã³ã³ããã管çããããã®ã¨ã³ããã¼ã¨ã³ãã®æ¨æºãæä¾ãã¾ãã</p>
<h3 id="criå®è£
ã夿´ããéã«æ³¨æãã¹ããã¨ã¯ä½ã§ãã">CRIå®è£
ã夿´ããéã«æ³¨æãã¹ããã¨ã¯ä½ã§ããï¼</h3>
<p>Dockerã¨ã»ã¨ãã©ã®CRI(containerdãå«ã)ã«ããã¦ãä¸ä½ã§ä½¿ç¨ãããã³ã³ããåã³ã¼ãã¯åããã®ã§ããã
ããã¤ãã®ç´°ããéããåå¨ãã¾ããç§»è¡ããéã«èæ
®ãã¹ãä¸è¬çãªäºé
ã¯æ¬¡ã®ã¨ããã§ãã</p>
<ul>
<li>ãã°è¨å®</li>
<li>ã©ã³ã¿ã¤ã ãªã½ã¼ã¹ã®å¶é</li>
<li>ãã¼ãæ§æã¹ã¯ãªããã§dockerã³ãã³ããã³ã³ããã¼ã«ã½ã±ããçµç±ã§Docker Engineã使ç¨ãã¦ãããã®</li>
<li><code>kubectl</code>ã®ãã©ã°ã¤ã³ã§<code>docker</code> CLIã¾ãã¯Docker Engineã³ã³ããã¼ã«ã½ã±ãããå¿
è¦ãªãã®</li>
<li>Kubernetesããã¸ã§ã¯ãã®ãã¼ã«ã§Docker Engineã¸ã®ç´æ¥ã¢ã¯ã»ã¹ãå¿
è¦ãªãã®(ä¾:廿¢ããã<code>kube-imagepuller</code>ãã¼ã«)</li>
<li><code>registry-mirrors</code>ãinsecureã¬ã¸ã¹ããªãªã©ã®æ©è½ã®è¨å®</li>
<li>ãã®ä»ã®æ¯æ´ã¹ã¯ãªããããã¼ã¢ã³ã§Docker Engineãå©ç¨å¯è½ã§ãããã¨ãæ³å®ãã¦ãã¦Kuberneteså¤ã§å®è¡ããããã®(ã¢ãã¿ãªã³ã°ã»ã»ãã¥ãªãã£ã¨ã¼ã¸ã§ã³ããªã©)</li>
<li>GPUã¾ãã¯ç¹å¥ãªãã¼ãã¦ã§ã¢ãããã¦ã©ã³ã¿ã¤ã ããã³Kubernetesã¨ããããã¼ãã¦ã§ã¢ã®çµ±åæ¹æ³</li>
</ul>
<p>ããªããKubernetesã®ãªã½ã¼ã¹è¦æ±/å¶éããã¡ã¤ã«ãã¼ã¹ã®ãã°åéDaemonSetã使ç¨ãã¦ããã®ã§ããã°ããããã¯åé¡ãªãåä½ãç¶ãã¾ããã
<code>dockerd</code>ã®è¨å®ãã«ã¹ã¿ãã¤ãºãã¦ããå ´åã¯ããããæ°ããã³ã³ããã©ã³ã¿ã¤ã ã«é©åãããå¿
è¦ãããã§ãããã</p>
<p>ä»ã«æ³¨æãããã¨ã¨ãã¦ã¯ãã·ã¹ãã ã¡ã³ããã³ã¹ãå®è¡ãããããªãã®ããã³ã³ããå
ã§ã¤ã¡ã¼ã¸ããã«ããããããªãã®ãåä½ããªããªãã¾ãã
åè
ã®å ´åã¯ã<a href="https://github.com/kubernetes-sigs/cri-tools"><code>crictl</code></a>ãã¼ã«ãdrop-inã®ç½®ãæãã¨ãã¦ä½¿ç¨ã§ãã¾ã(<a href="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">docker cliããcrictlã¸ã®ãããã³ã°</a>ãåç
§)ã
å¾è
ã®å ´åã¯ã<a href="https://github.com/genuinetools/img">img</a>ã<a href="https://github.com/containers/buildah">buildah</a>ã<a href="https://github.com/GoogleContainerTools/kaniko">kaniko</a>ã<a href="https://github.com/vmware-tanzu/buildkit-cli-for-kubectl">buildkit-cli-for-kubectl</a>ã®ãããªDockerãå¿
è¦ã¨ããªãæ°ããã³ã³ãããã«ãã®é¸æè¢ã使ç¨ã§ãã¾ãã</p>
<p>containerdã使ã£ã¦ããã®ã§ããã°ã<a href="https://github.com/containerd/cri/blob/master/docs/registry.md">ããã¥ã¡ã³ã</a>ãåç
§ãã¦ãç§»è¡ããã®ã«ã©ã®ãããªæ§æãå©ç¨å¯è½ãã確èªããã¨ããããå§ããã¨ããã§ãããã</p>
<p>containerdã¨CRI-OãKubernetesã§ä½¿ç¨ããæ¹æ³ã«é¢ãã¦ã¯ã<a href="https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/">ã³ã³ããã©ã³ã¿ã¤ã </a>ã«é¢ããKubernetesã®ããã¥ã¡ã³ããåç
§ãã¦ãã ããã</p>
<h3 id="ããã«è³ªåãããå ´åã©ãããã°ããã§ãããã">ããã«è³ªåãããå ´åã©ãããã°ããã§ããããï¼</h3>
<p>ãã³ãã¼ãµãã¼ãã®Kubernetesãã£ã¹ããªãã¥ã¼ã·ã§ã³ã使ç¨ãã¦ããå ´åãå½¼ãã®è£½åã«å¯¾ããã¢ããã°ã¬ã¼ãè¨ç»ã«ã¤ãã¦å°ãããã¨ãã§ãã¾ãã
ã¨ã³ãã¦ã¼ã¶ã¼ã®è³ªåã«é¢ãã¦ã¯ã<a href="https://discuss.kubernetes.io/">ã¨ã³ãã¦ã¼ã¶ã¼ã³ãã¥ããã£ãã©ã¼ã©ã </a>ã«æç¨¿ãã¦ãã ããã</p>
<p>dockershimã®åé¤ã«é¢ããæ±ºå®ã«ã¤ãã¦ã¯ãå°ç¨ã®<a href="https://github.com/kubernetes/kubernetes/issues/106917">GitHub issue</a>ã§è°è«ãããã¨ãã§ãã¾ãã</p>
<p>夿´ç¹ã«é¢ããããè©³ç´°ãªæè¡çãªè°è«ã¯ã<a href="https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m">å¾
ã£ã¦ãã ãããDockerã¯Kubernetesã§éæ¨å¥¨ã«ãªã£ãã®ã§ããï¼</a>ã¨ããç´ æ´ãããããã°è¨äºãåç
§ãã¦ãã ããã</p>
<h3 id="dockershimã使ã£ã¦ãããã©ãããæ¤åºã§ãããã¼ã«ã¯ããã¾ãã">dockershimã使ã£ã¦ãããã©ãããæ¤åºã§ãããã¼ã«ã¯ããã¾ããï¼</h3>
<p>ã¯ãï¼<a href="https://github.com/aws-containers/kubectl-detector-for-docker-socket">Detector for Docker Socket (DDS)</a>ã¨ããkubectlãã©ã°ã¤ã³ãã¤ã³ã¹ãã¼ã«ãããã¨ã§ããªãã®ã¯ã©ã¹ã¿ã¼ã確èªãã¦ããã ãã¾ãã
DDSã¯ãã¢ã¯ãã£ããªKubernetesã¯ã¼ã¯ãã¼ããDocker Engineã½ã±ãã(<code>docker.sock</code>)ãããªã¥ã¼ã ã¨ãã¦ãã¦ã³ããã¦ããããæ¤åºã§ãã¾ãã
ãããªã詳細ã¨ä½¿ç¨ãã¿ã¼ã³ã«ã¤ãã¦ã¯ãDDSããã¸ã§ã¯ãã®<a href="https://github.com/aws-containers/kubectl-detector-for-docker-socket">README</a>ãåç
§ãã¦ãã ããã</p>
<h3 id="ãã°ãã¦ããã ãã¾ãã">ãã°ãã¦ããã ãã¾ããï¼</h3>
<p>ã¯ããç§éã¯å¼ãç¶ããã¤ã§ããã°ã«å¿ãã¦ãã¾ããð¤ð¤ð¤</p>
- Don't Panic: Kubernetes and Dockerhttps://kubernetes.io/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/Wed, 02 Dec 2020 00:00:00 +0000https://kubernetes.io/ja/blog/2020/12/02/dont-panic-kubernetes-and-docker/
<p>Kubernetesã¯v1.20ããæ°ãããã¼ã¸ã§ã³ã§ãã³ã³ããã©ã³ã¿ã¤ã ã¨ãã¦<a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation">Dockerããµãã¼ããã¾ãã</a>ã</p>
<p><strong>ãããã¯ãèµ·ããå¿
è¦ã¯ããã¾ãããããã¯ããã»ã©ææ¬çãªãã®ã§ã¯ãªãã®ã§ãã</strong></p>
<p>æ¦è¦: ã©ã³ã¿ã¤ã ã¨ãã¦ã®Dockerã¯ãKubernetesã®ããã«éçºããã<a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/">Container Runtime Interface(CRI)</a>ãå©ç¨ãã¦ããã©ã³ã¿ã¤ã ãé¸ãã çµæã¨ãã¦ãµãã¼ããããªããªãã¾ããããããDockerã«ãã£ã¦çæãããã¤ã¡ã¼ã¸ã¯ããããããä»ã¾ã§ãããã ã£ãããã«ãã¿ãªããã®ã¯ã©ã¹ã¿ã¼ã§ä½¿ç¨å¯è½ã§ãã</p>
<p>ãããããªããKubernetesã®ã¨ã³ãã¦ã¼ã¶ã¼ã§ãããªãã°ãå¤ãã®å¤åã¯ãªãã§ããããããã¯Dockerã®æ»ãæå³ãããã®ã§ã¯ããã¾ããããéçºãã¼ã«ã¨ãã¦ä»å¾Dockerã使ç¨ããã¹ãã§ãªãã使ç¨ãããã¨ã¯åºæ¥ãªãã¨è¨ã£ã¦ããã®ã§ãããã¾ãããDockerã¯ã³ã³ããã使ããã®ã«ä¾¿å©ãªãã¼ã«ã§ãããdocker buildã³ãã³ãã§ä½æãããã¤ã¡ã¼ã¸ã¯Kubernetesã¯ã©ã¹ã¿ã¼ä¸ã§ãããããåä½å¯è½ãªã®ã§ãã</p>
<p>ãããGKEãEKSãAKSã¨ãã£ãããã¼ã¸ãKubernetesãµã¼ãã¹(ãããã¯ããã©ã«ãã§<a href="https://github.com/Azure/AKS/releases/tag/2020-11-16">containerdã使ç¨ãã¦ãã¾ã</a>)ã使ã£ã¦ããã®ãªããã¯ã¼ã«ã¼ãã¼ãããµãã¼ã対象ã®ã©ã³ã¿ã¤ã ã使ç¨ãã¦ããããDockerã®ãµãã¼ããå°æ¥ã®K8sãã¼ã¸ã§ã³ã§åããåã«ç¢ºèªãã¦ããå¿
è¦ãããã§ãããã
ããããã¼ããã«ã¹ã¿ãã¤ãºãã¦ããã®ãªããç°å¢ãRuntimeã®ä»æ§ã«åããã¦æ´æ°ããå¿
è¦ãããã§ãããããµã¼ãã¹ãããã¤ãã¼ã¨ç¢ºèªããã¢ããã°ã¬ã¼ãã®ããã®é©åãªãã¹ãã¨è¨ç»ãç«ã¦ã¦ãã ããã</p>
<p>ããããèªèº«ã§Clusterã管çãã¦ããã®ãªãããã¯ãåé¡ãçºçããåã«å¿
è¦ãªå¯¾å¿ãè¡ãå¿
è¦ãããã¾ããv1.20ã®æç¹ã§ãDockerã®ä½¿ç¨ã«ã¤ãã¦ã®è¦åã¡ãã»ã¼ã¸ã表示ãããããã«ãªãã¾ããå°æ¥ã®Kubernetesãªãªã¼ã¹(ç¾å¨ã®è¨ç»ã§ã¯2021年䏿¬ã®v1.22)ã§Dockerã®Runtimeã¨ãã¦ã®ä½¿ç¨ããµãã¼ããããªããªãã°ãcontainerdãCRI-Oã¨ãã£ãä»ã®ãµãã¼ã対象ã®Runtimeã«åãæ¿ããå¿
è¦ãããã¾ããåãæ¿ããéããã®Runtimeãç¾å¨ä½¿ç¨ãã¦ããDocker Daemonã®è¨å®ããµãã¼ããããã¨ã確èªãã¦ãã ããã(Loggingãªã©)</p>
<h2 id="ã§ã¯-ãªãæ··ä¹±ãçã-誰ããææã«é§ããã¦ããã®ã">ã§ã¯ããªãæ··ä¹±ãçãã誰ããææã«é§ããã¦ããã®ãã</h2>
<p>ããã§è°è«ã«ãªã£ã¦ããã®ã¯2ã¤ã®ç°ãªãå ´é¢ã«ã¤ãã¦ã§ããããããæ··ä¹±ã®åå ã«ãªã£ã¦ãã¾ããKubernetesã¯ã©ã¹ã¿ã¼ã®å
é¨ã§ã¯ãContainer runtimeã¨å¼ã°ãããã®ããããããã¯ImageãPullãèµ·åããå½¹ç®ãæã£ã¦ãã¾ããDockerã¯ãã®é¸æè¢ã¨ãã¦äººæ°ãããã¾ã(ä»ã«ã¯containerdãCRI-Oãæãããã¾ã)ãããããDockerã¯ããèªä½ãKubernetesã®ä¸é¨ã¨ãã¦è¨è¨ããã¦ããããã§ã¯ããã¾ããããããåé¡ã®åå ã¨ãªã£ã¦ãã¾ãã</p>
<p>ãåãããã¨æãã¾ãããããã§âDockerâã¨å¼ãã§ãããã®ã¯ããã1ã¤ã®ãã®ã§ã¯ãªãããã®æè¡çãªä½ç³»ã®å
¨ä½ã§ããããã®ä¸é¨ã«ã¯"containerd"ã¨å¼ã°ãããã®ããããããã¯ããèªä½ããã¤ã¬ãã«ãªContainer runtimeã¨ãªã£ã¦ãã¾ããDockerã¯ç´ æ´ããããã®ã§ã便å©ã§ãããªããªããå¤ãã®UXã®æ¹åãããã¦ãããããã¯äººéãéçºãè¡ãããã®æä½ãç°¡åã«ãã¦ããã®ã§ãããããããããã¯Kubernetesã«å¿
è¦ãªãã®ã§ã¯ããã¾ãããKubernetesã¯äººéã§ã¯ãªãããã§ãã
ãã®human-friendlyãªæ½è±¡åã¬ã¤ã¤ã¼ãä½ãããããã«ãçµæã¨ãã¦ã¯Kubernetesã¯ã©ã¹ã¿ã¼ã¯Dockershimã¨å¼ã°ããã»ãã®ãã¼ã«ã使ããæ¬å½ã«å¿
è¦ãªæ©è½ã¤ã¾ãcontainerdãå©ç¨ãã¦ãã¾ãããããã¯ç´ æ´ãããã¨ã¯è¨ãã¾ããããªããªããæã
ãã¡ã³ãããå¿
è¦ã®ãããã®ãå¢ãã¾ãããããã¯åé¡ãçºçããè¦å ã¨ããªãã¾ããä»åã®å¤æ´ã§å®éã«è¡ããããã¨ã¨ããã®ã¯ãDockershimãæãæ©ãå ´åã§v1.23ã®ãªãªã¼ã¹ã§kubeletããé¤å¤ãããã¨ã§ãããã®çµæã¨ãã¦ãDockerã®ãµãã¼ãããªããªãã¨ãããã¨ãªã®ã§ãã
ããã§ãcontainerdãDockerã«å«ã¾ãã¦ãããªãããªãDockershimãå¿
è¦ãªã®ãã¨çåã«æãããæ¹ãããã§ãããã</p>
<p>Dockerã¯CRI(<a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/">Container Runtime Interface</a>)ã«æºæ ãã¦ãã¾ãããããããã§ããã°shimã¯å¿
è¦ãªãã®ã§ãããç¾å®ã¯ããã§ããã¾ããã
ããããããã¯ä¸çã®çµããã§ããã¾ãããå¿é
ããªãã§ãã ãããã¿ãªããã¯Container runtimeãDockerããä»ã®ãµãã¼ã対象ã§ããContainer runtimeã«åãæ¿ããã ãã§ããã®ã§ãã</p>
<p>1ã¤æ³¨æãã¹ããã¨ã¯ãã¯ã©ã¹ã¿ã¼ã§è¡ãããå¦çã®ãªãã§Docker socket(<code>/var/run/docker.sock</code>)ã«ä¾åããé¨åãããå ´åãä»ã®Runtimeã¸åãæ¿ããã¨ãã®é¨åãåããªããªãã§ãããããã®ãã¿ã¼ã³ã¯ãã°ãã°Docker in Dockerã¨å¼ã°ãã¾ãããã®ãããªå ´åã®å¯¾å¿æ¹æ³ã¯ããããããã¾ãã<a href="https://github.com/GoogleContainerTools/kaniko">kaniko</a>ã<a href="https://github.com/genuinetools/img">img</a>ã<a href="https://github.com/containers/buildah">buildah</a>ãªã©ã§ãã</p>
<h2 id="ã§ã¯éçºè
ã«ã¨ã£ã¦-ãã®å¤æ´ã¯ä½ãæå³ããã®ã-ãããããdockerfileã使ã£ã¦ããã®ã-ãããããdockerã§ãã«ããè¡ã£ã¦ããã®ã">ã§ã¯éçºè
ã«ã¨ã£ã¦ããã®å¤æ´ã¯ä½ãæå³ããã®ãããããããDockerfileã使ã£ã¦ããã®ãããããããDockerã§ãã«ããè¡ã£ã¦ããã®ãã</h2>
<p>ãã®å¤æ´ã¯ãDockerãç´æ¥æä½ãã¦ããå¤ãã®ã¿ãªããã¨ã¯å¥ã®å ´é¢ã«å½±é¿ãä¸ããã§ãããã
ã¿ãªãããéçºãè¡ãéã«ä½¿ç¨ãã¦ããDockerã¨ãKubernetesã¯ã©ã¹ã¿ã¼ã®å
é¨ã§ä½¿ããã¦ããDocker runtimeã¯é¢ä¿ããã¾ãããããããããã«ãããã¨ã¯çè§£ãã¦ãã¾ããéçºè
ã«ã¨ã£ã¦ãDockerã¯ããããã便å©ãªãã®ã§ããããã®ã¢ãã¦ã³ã¹ããã£ãåã¨å¤ãããªãã§ããããDockerã§ãã«ããããImageã¯ã決ãã¦Dockerã§ã ãåä½ããã¨ããããã§ã¯ããã¾ãããããã¯OCI(<a href="https://opencontainers.org/">Open Container Initiative</a>) Imageã¨å¼ã°ãããã®ã§ããããããOCIæºæ ã®Imageã¯ããããä½ã®ãã¼ã«ã§ãã«ããããã«ããããKubernetesããè¦ãã°åããã®ãªã®ã§ãã<a href="https://containerd.io/">containerd</a>ã<a href="https://cri-o.io/">CRI-O</a>ãããã®ãããªImageãPullããèµ·åãããã¨ãåºæ¥ã¾ãã
ãããã³ã³ããã®ä»æ§ã«ã¤ãã¦ãå
±éã®ä»æ§ãçå®ãã¦ããçç±ãªã®ã§ãã</p>
<p>ãã¦ããã®å¤æ´ã¯æ±ºå®ãã¦ãã¾ããããã¤ãã®åé¡ã¯çºçãããããã¦ã¾ããããæ±ºãã¦å£æ»
çãªãã®ã§ã¯ãªããã»ã¨ãã©ã®å ´åã¯è¯ãå¤åã¨ãªãã§ããããKubernetesãã©ã®ããã«ä½¿ç¨ãã¦ãããã«ããã¾ããããã®å¤æ´ãç¹ã«ä½ã®å½±é¿ãåã¼ããªã人ãããã§ãããããå½±é¿ãã¨ã¦ãå°ãªãå ´åãããã¾ããé·æçã«è¦ãã°ãç©äºãç°¡åã«ããã®ã«å½¹ç«ã¤ãã®ã§ãã
ããããã®åé¡ãã¾ã ãããã«ããã¨ãã¦ããå¿é
ããªãã§ãã ãããKubernetesã§ã¯å¤ãã®ãã®ãå¤åãã¦ããããã®å
¨ã¦ã«å®ç§ã«ç²¾éãã¦ãã人ãªã©åå¨ãã¾ããã
çµé¨ã®å¤å¯¡ãé£æåº¦ã«ããããããã©ããªãã¨ã§ã質åãã¦ãã ãããæã
ã®ç®æ¨ã¯ãå
¨ã¦ã®äººãå°æ¥ã®å¤åã«ã¤ãã¦ãå¯è½ãªéãã®ç¥èã¨çè§£ãå¾ããããã¨ã§ãã
ãã®ããã°ãå¤ãã®è³ªåã®çãã¨ãªããä¸å®ãåããããã¨ãã§ããã°ã¨é¡ã£ã¦ãã¾ãã</p>
<p>å¥ã®æ
å ±ããæ¢ãã§ããã°ã<a href="https://kubernetes.io/ja/dockershim">dockershimã®åé¤ã«é¢ããFAQ</a>ãåç
§ãã¦ãã ããã</p>