LoginSignup
2
1

More than 1 year has passed since last update.

Kubernetes 1.24: SIG Cluster Lifecycle の変更内容

Last updated at Posted at 2022-05-17

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サービスのためのDockerValidatorServiceCheckが削除されました。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)

    • :pencil: コントロールプレーンで起動するPodにはrole.kubernetes.io/control-plane:NoScheduleのtaintに対してtolerationを設定してください。
    • :pencil: コントロールプレーンで起動するPodには、node-role.kubernetes.io/control-plane 対してセレクタを設定してください。

種類別の変更 (Changes by Kind)

廃止予定 (Deprecation)

  • kubeadm: UnversionedKubeletConfigMap Feature 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)

    • :pencil: 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: KubeletConfigurationresolvConf フィールドの値が /run/systemd/resolve/resolv.conf と一致しない場合に出力される警告に関連するバグを修正しました。 (#107785, @chendave)

    • :pencil: resolvConf/run/systemd/resolve/resolv.conf を設定していても、/run/systemd/resolve/resolv.conf を設定していない、という警告が出ていたようです。
    • :pencil: 修正を見ると、文字列を比較するつもりがポインタ同士を比較してミスっていたようです。
  • kubeadm: /etc/kubernetes/pkiにあるCAファイル(ca.key/ca.crt)と共にkubeadm init --dry-runを使った際のバグを修正しました。 (#108410, @Haleygo)

    • :pencil: ca.key, ca.crt がある状態で kubeadm init --dry-runが動作しなかったようです。
    • :pencil: 既存の 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)

    • :pencil: 外部のCAを利用する場合、その証明書には全ての証明書チェーンの証明書が含まれている場合があります。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1