Kubernetes 1.24 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。
主要テーマ (Major Themes)
- なし。
重大なアップグレードに関する警告 (Urgent Upgrade Notes)
-
kubeadm/k8s.io/v1beta2は非推奨になり、3リリース以内(約一年)の将来のバージョンで削除されます。新しいクラスタに対してはkubeadm.k8s.io/v1beta3を利用してください。ディスクに保存してある古い設定ファイルはkubeadm config migrateコマンドで移行することができます。 (#107013, @pacoxu) -
kubeadm: デフォルトのcontainerd向けのソケットのパスの設定が Docker のパスでは無くなりました(Unix:
unix:///var/run/containerd/containerd.sock, Windows:npipe:////./pipe/containerd-containerd)。もし、クラスタ作成中にInit|JoinConfiguration.nodeRegistration.criSocketの設定が空白で、複数のソケットが見つかった場合、エラーが発生し、どの値を利用するかについてユーザに尋ねるようになりました。kubeadmのバージョンが1.24以上の場合、kubeletのバージョンが1.23以下であったとしてもディスク状のkubeadmの設定ファイルにdockershimのソケットを含めないようにしてください。kubeadm preflightからdockerサービスのためのDockerValidatorとServiceCheckが削除されました。Dockerは現在ホスト検証の際の特別なケースはなく、理想的にはこのタスクは互換性の問題となり、外部のcri-dockerdプロジェクトで行われるべきものです。Dockerのためのdocker cliを使わずに、実行中のコンテナリストの取得や、イメージの取得のようなCRIソケットを介したすべての利用にはcrictlを使うようにしてください。 (#107317, @neolit123) -
kubeadm: labelsやtaintsから
masterという単語の利用をやめるプランの第二ステージを適用します。新しいクラスタのコントロールプレーンのノードに対してnode-role.kubernetes.io/masterのラベルは付与されず、node-role.kubernetes.io/control-planeのラベルのみが付与されます。kubeadm upgrade applyを利用して1.24にアップグレードされるクラスタに対しては、コントロールプレーンのノードから既存のnode-role.kubernetes.io/masterのラベルが削除されます。また、新しいクラスタには、古いtaintであるnode-role.kubernetes.io/master:NoScheduleと新しいtaintであるnode-role.kubernetes.io/control-plane:NoSchedule両方がコントロールプレーンのノードに付与されます。1.20リリース時(第一ステージ)のリリースノートでは、前もってこの新しいtaintに対して許容するように指示してありました。kubeadm upgrade applyを利用して1.24にアップグレードされるクラスタに対しては、既存のコントロールプレーンのノードに新しくnode-role.kubernetes.io/control-plane:NoScheduleのtaintが付与されます。これらの変更に対応するようお願いします。1.25リリース時に古いtaintであるnode-role.kubernetes.io/master:NoScheduleは削除されます。 (#107533, @neolit123)-
コントロールプレーンで起動するPodにはrole.kubernetes.io/control-plane:NoScheduleのtaintに対してtolerationを設定してください。 -
コントロールプレーンで起動するPodには、node-role.kubernetes.io/control-plane対してセレクタを設定してください。
-
種類別の変更 (Changes by Kind)
廃止予定 (Deprecation)
-
kubeadm:
UnversionedKubeletConfigMapFeature Gate がベータになりデフォルトで有効化されました。これにより、1) 新しいクラスターでは古いkubelet-config-x.yyという命名フォーマットに従ったものではなく、RBACやKubeletのConfigMapの命名フォーマットとしてkube-system/kubelet-configが利用されるようになります。2)アップグレード中にkubeadmはConfigMapやRBACにこの新しい命名フォーマットを利用します。この機能を無効化するには、新しいクラスタの場合はkubeadmの設定ファイルにてUnversionedKubeletConfigMap: falseを指定してください。既存のクラスタをアップグレードする場合はkube-system/kubeadm-config中のClusterConfigurationにパッチをすることで振る舞いを上書きしてください。詳細は関連するKEPを読んでください。 (#108027, @neolit123)
APIの変更 (API Change)
- なし。
機能 (Feature)
-
kubeadm:
kubeadm resetのdry-runのサポートを追加しました。新しいkubeadm reset --dry-runフラグは既存のkubeadm init/join/upgradeフラグと同じように、どんな変更が適用されるのかを確認することができるようになります。 (#107512, @SataQiu) -
kubeadm: etcdメンバーのデータ一貫性を保証するために、etcd static Podのマニフェストに
--experimental-initial-corrupt-checkフラグを追加しました。 (#109074, @neolit123) -
kubeadm: kubeadm アップグレード時に、コントロールプレーンノード上のstatic podを再起動するための kubelet を待機する際のエラーをより適切に表示するようにしました。 (#108315, @Monokaix)
-
kubeadm upgrade時に、コントロールプレーンノード上のstatic podを更新する際、古いstatic podのマニフェストのhashを計算するらしいのですが、その計算時にエラーが発生した場合にちゃんとそのエラーがユーザに戻らないため、なんで失敗したのかわからなくて困ってた、という話らしいです。
-
-
kubeadm: ユーザの YAML/JSON で書かれた設定ファイルの厳密な解析を改善しました。重複したフィールドや未知のフィールドがあった場合、警告を表示し(現場の振る舞い)、そののちに例えば
controlPlaneEndpointが正しくControlPlaneEndpointが不正、などのような大文字と小文字の区別が正しくないフィールドに対する警告も表示するようにしました。init時とjoin時に警告を表示するだけでなく、ClusterConfiguration,KubeletConfigurationまたはKubeProxyConfigurationをクラスターからダウンロードする際にも警告を表示するようにしました。この警告はユーザがそれぞれのConfigMapを間違ってパッチしていた場合に便利です。 (#107725, @neolit123)
バグ修正 (Bug or Regression)
-
kubeadm: kubeconfigファイルの証明書の期限をチェックする際に、
certs check-expirationコマンドにてクラスタのCA key(ca.key file)を必要としないようになりました。 (#106854, @neolit123) -
kubeadm:
certs check-expirationコマンドの実行中、etcd CAキーファイル(etcd/ca.key)がない場合はetcd CAを外部CAとして扱い、etcd CAによって署名された証明書に適切な検証を実行します。さらに、ディスク上の証明書とkubeconfigファイル内の証明書の両方について、出力テーブルのすべてのエントリのCAが含まれていることを確認するようにしました。 (#106891, @neolit123) -
kubeadm:
KubeletConfigurationのresolvConfフィールドの値が/run/systemd/resolve/resolv.confと一致しない場合に出力される警告に関連するバグを修正しました。 (#107785, @chendave)-
resolvConfに/run/systemd/resolve/resolv.confを設定していても、/run/systemd/resolve/resolv.confを設定していない、という警告が出ていたようです。 -
修正を見ると、文字列を比較するつもりがポインタ同士を比較してミスっていたようです。
-
-
kubeadm:
/etc/kubernetes/pkiにあるCAファイル(ca.key/ca.crt)と共にkubeadm init --dry-runを使った際のバグを修正しました。 (#108410, @Haleygo)-
ca.key,ca.crtがある状態でkubeadm init --dry-runが動作しなかったようです。 -
既存の CAファイルを考慮してdry-runしていなかったようです。
-
-
kubeadm: preflight errorが起こり、IPv6を利用したクラスターにWindowsノードがJoinできなかった問題を修正しました。 (#108769, @SataQiu)
-
kubeadm:
kubeadm certs generate-csrコマンドが重複するSANsを取り除かなかったバグを修正しました。 (#107982, @SataQiu)
その他 (Other (Cleanup or Flake))
-
kubeadm: すべての警告メッセージが、標準出力ではなく、標準エラー出力に表示されるようになりました。 (#107467, @SataQiu)
-
kubeadm: 新しいクラスタを作成する際の dockershim 関連フラグの削除に対する処理を追加しました。kubeletのバージョンが1.23以下、かつkubeadmのバージョンが1.24以上の場合は、ユーザがkubeadmの設定ファイルである
{Init|Join}Configuration.nodeRegistration.criSocketにUnixにおいてはunix:///var/run/dockershim.sock、Windowsにおいてはnpipe:////./pipe/dockershimを設定した場合、ビルトインのdockershimを利用し続けることができます。もし、kubeletのバージョンが1.24以上かつ、kubeadmのバージョンが1.24以上の場合はすべてのコンテナランタイムを--container-runtime=remote --container-runtime-endpoint=scheme://some/pathのフラグを利用して "remote"として取り扱います。kubeletのバージョン1.23以下の場合の特別な処理は、kubeadm 1.25で削除されます。 (#106973, @neolit123) -
kubeadm:
kubeadm init/joinがkubeletに--container-runtime-endpointを渡す際に、常にURLスキーム(Linux:unix://, Windows:npipe://)を使うようにしました。このフラグの値はkubeadmの設定ファイルのcriSocketフィールドか、CLIの--cri-socketフラグから得られた値です。ユーザの設定にURLスキームが欠けていた場合はメモリ内で自動的に追加されますが、ユーザにはディスクに保存された設定ファイルを更新するように警告がなされます。kubeadm upgrade apply/nodeコマンドの実行時に、必要な場合はNodeオブジェクトに対するkubeadm.alpha.kubernetes.io/cri-socketアノテーションとディスク上の/var/lib/kubelet/kubeadm-flags.envファイルが変更されます。これらの自動的な振る舞いは一時的なもので将来のバージョンで削除されます。また、将来のkubeletでURLスキームが設定されていないCRIのエンドポイントはサポートされなくなるかもしれません。 (#107295, @neolit123) -
kubeadm: いくつかのkubeadmのコマンドで出力の機械可読性のために利用されている非推奨の
output/v1alpha1APIが削除されました。kubeadm の 1.23 ではすでにoutput/v1alpha2を利用していました。 (#106648, @calvin0327) -
kubeadm:
ca.crtに一つの証明書しか含むことができないという制約を削除しました。複数の証明書がca.crtに含まれていた場合、kubeadmは最初の証明書をデフォルトで利用します。 (#107327, @SataQiu)-
外部のCAを利用する場合、その証明書には全ての証明書チェーンの証明書が含まれている場合があります。
-