<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CloudKMS on LIFELOG</title>
    <link>/tags/cloudkms/</link>
    <description>Recent content in CloudKMS on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Sat, 05 Sep 2026 00:00:00 +0900</lastBuildDate><atom:link href="/tags/cloudkms/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>GKEノードプールをBlue/Greenでアップグレードして、soak期間中にロールバックしてみた</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_blue_green_node_pool_upgrade/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_blue_green_node_pool_upgrade/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ノードプールのアップグレードには&lt;a href=&#34;https://docs.cloud.google.com/kubernetes-engine/docs/concepts/node-pool-upgrade-strategies&#34; target=&#34;_blank&#34;&gt;3つの戦略があります&lt;/a&gt;。既定のSURGEは既存ノードを順番に置き換えていく方式。BLUE_GREENは新しいノード群（green）を丸ごと作ってからワークロードを移し、しばらく旧ノード群（blue）を残します。&lt;/p&gt;
&lt;p&gt;3つ目のAutoscaled blue-greenはPreviewで、greenを0台から必要に応じて増やします。ノードが倍にならない代わりに、キャンセル後のロールバックには対応していません。&lt;strong&gt;この記事で測るのは標準のBLUE_GREENだけです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;この「しばらく残す」時間が&lt;code&gt;node_pool_soak_duration&lt;/code&gt;で、&lt;strong&gt;ロールバックできる猶予&lt;/strong&gt;にあたります。満了するとblueは削除され、後戻りできません。&lt;/p&gt;
&lt;p&gt;ところが、その窓の中で実際にどうロールバックするのかは、あまり書かれていません。試したところ&lt;code&gt;gcloud container node-pools rollback&lt;/code&gt;を打っても拒否されました。正しい手順は別にあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/&#34;&gt;前回&lt;/a&gt;は&lt;code&gt;kubectl drain&lt;/code&gt;で手動移行し、断をゼロにするまで構成を作り込みました。今回は同じワークロードをGKEに移させて、同じものさしで測ります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのクラスタをTerraformで作ったことがある人です。ノードプールのアップグレードを運用でやる立場を想定しています。Kubernetesの入門は扱いません。&lt;/p&gt;
&lt;p&gt;SURGE戦略との実測比較は次回に回します。Autopilotクラスタとコントロールプレーンのアップグレード戦略は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;アップグレード中にサービスがどれだけ止まるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;soak期間中に本当にロールバックできるか。どうやるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;いまアップグレードのどの段階にいるかを、どう知るか&lt;/li&gt;
&lt;li&gt;ブートディスクのCMEK鍵バージョンはどうなるか&lt;/li&gt;
&lt;li&gt;アップグレード後の&lt;code&gt;terraform plan&lt;/code&gt;に差分が出ないか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Cloud KMS、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0&lt;/li&gt;
&lt;li&gt;GKE 1.35.7-gke.1027000 → 1.35.7-gke.1150000（REGULARチャンネル）。&lt;strong&gt;この記事でノードが到達したのはここまでです。&lt;/strong&gt; 後半に出る 1.36.2-gke.2064000 はコントロールプレーンの &lt;code&gt;master_version&lt;/code&gt; で、2回目の移行先は記録していません&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blue/Greenアップグレード中はノードが一時的に&lt;strong&gt;倍&lt;/strong&gt;になります。PodのセカンダリレンジとvCPUの割り当てに余裕が要ります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEノードのブートディスクをCMEKで暗号化して鍵をローテーションしてみた</title>
      <link>/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;顧客管理の暗号鍵（CMEK）でGKEノードのブートディスクを暗号化すると、鍵の管理責任がこちらに移ります。定期的なローテーションもその一つです。&lt;/p&gt;
&lt;p&gt;ところが鍵をローテーションしても、稼働中のノードは何も変わりません。ディスクは古い鍵バージョンで暗号化されたままです。しかも&lt;code&gt;terraform plan&lt;/code&gt;は差分なしで通ります。「回したから終わり」と思って旧バージョンを無効化すると、次にノードが再起動したとき起動できません。&lt;/p&gt;
&lt;p&gt;この記事では、鍵をローテーションしたあと何が起きるかを実測します。新しい鍵バージョンへの移し方と、移行中にサービスがどれだけ止まるかまで見ます。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのクラスタをTerraformで作ったことがあり、Cloud KMSの鍵を触ったことがある人です。それぞれの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Blue/Greenアップグレードを使った移行は扱いません。etcdやPersistentVolumeのCMEKも扱いません。ノードのブートディスクだけを見ます。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;鍵をローテーションしたあと、既存ノードのブートディスクはどうなるか&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ローテーション後の&lt;code&gt;terraform plan&lt;/code&gt;は差分を検知するか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新しい鍵バージョンにするには、本当にノードプールの入れ替えが必要か&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ノードプールを入れ替える移行で、サービスはどれだけ止まるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;旧鍵バージョンを無効化すると何が起きるか&lt;/li&gt;
&lt;li&gt;Cloud Loggingに何が残るか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Cloud KMS、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0、GKE 1.35.7-gke.1027000（REGULARチャネル）&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;使用するTerraformコード 
    &lt;div id=&#34;使用するterraformコード&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8bterraform%e3%82%b3%e3%83%bc%e3%83%89&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/20-gke-cmek-node-boot-disk-rotation&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/20-gke-cmek-node-boot-disk-rotation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;今回の構成 
    &lt;div id=&#34;今回の構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bb%8a%e5%9b%9e%e3%81%ae%e6%a7%8b%e6%88%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    subgraph GCP[&#34;Google Cloud&#34;]
        KMS[&#34;Cloud KMS&lt;br/&gt;鍵バージョン 1 / 2&#34;]
        subgraph VPC[&#34;VPC&#34;]
            subgraph GkeSubnet[&#34;GKE Subnet（外部IPなし）&#34;]
                NP1[&#34;ノードプール v1&lt;br/&gt;ディスク = 鍵バージョン 1&#34;]
                NP2[&#34;ノードプール v2&lt;br/&gt;ディスク = 鍵バージョン 2&#34;]
            end
            Bastion[&#34;踏み台&#34;]
        end
    end

    KMS --&gt;|&#34;作成時のprimaryで暗号化&#34;| NP1
    KMS --&gt;|&#34;作成時のprimaryで暗号化&#34;| NP2
    Bastion --&gt;|&#34;kubectl&#34;| NP1
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ノードプールは2つとも&lt;code&gt;boot_disk_kms_key&lt;/code&gt;に&lt;strong&gt;同じ鍵&lt;/strong&gt;を指定しています。違うのは作られた時刻だけです。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
