LoginSignup
3
0

More than 3 years have passed since last update.

Kubernetes 1.20: SIG Cluster Lifecycle の変更内容

Last updated at Posted at 2020-12-24

はじめに

Kubernetes 1.20 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。前から使用が微妙と思われていた "node-role.kubernetes.io/master" ラベルおよび "node-role.kubernetes.io/master:NoSchedule" taints の削除に動き出したようです。

主な変更点 (What's New)

kubeadm の非推奨になったフラグが削除されました

kubeadmは、このリリースで多くの非推奨と非推奨機能の削除を行います。 詳細については、「重大なアップグレードに関する警告」および「種々の変更/廃止予定」セクションを参照してください。

既知の問題 (Known Issues)

  • なし。

重大なアップグレードに関する警告 (Urgent Upgrade Notes)

  • kubeadm: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint/README.md (#95382, @neolit123) [SIG Cluster Lifecycle]
    • コントロールプレーンのノードに適用されるラベルであった "node-role.kubernetes.io/master" が非推奨になり、GAの非推奨期間後、将来のリリースで削除されます。
    • "node-role.kubernetes.io/control-plane" ラベルが追加されました。"node-role.kubernetes.io/master" ラベルが削除されるまで、それぞれのラベルは併存して付与されます。
    • kubeadm upgrade apply でアップグレード時に、"node-role.kubernetes.io/master"ラベルのみをもった既に存在するノードに"node-role.kubernetes.io/control-plane" ラベルが追加されるようになりました。
    • kubeadm の上に構築しているツールで "node-role.kubernetes.io/control-plane" を採用するようにしてください。
    • コントロールプレーンのノードに適用される taint であった "node-role.kubernetes.io/master:NoSchedule" が非推奨になり、GAの非推奨期間後、将来のリリースで削除されます。
    • 将来追加される taint である "node-role.kubernetes.io/control-plane:NoSchedule" に対する toleration を kubeadm が管理する CoreDNS/kube-dns のマニフェストを追加しました。ちなみに、この taint はまだコントロールプレーンに適用されていません。
    • "node-role.kubernetes.io/control-plane:NoSchedule" taint を許容するように事前に備えておいてください。
    • :pencil: 3行で言うと、
      • "node-role.kubernetes.io/control-plane" ラベルが追加されたので、コントロールプレーンノードにPodを配置したい場合はこのラベルを使うようにしてください。
        • "node-role.kubernetes.io/master" が将来削除されます。
      • "node-role.kubernetes.io/control-plane:NoSchedule" taint が導入されるので、コントロールプレーンノードにPodを配置したい場合はこのtaintを許容するように変更してください。
        • "node-role.kubernetes.io/master:NoSchedule" が将来削除されます。
  • kubeadm: serviceSubnet と podSubnetのバリデーションが改善されました。ServiceSubnetは、実装の都合上、サイズを制限する必要があり、マスクは20ビットを超えて割り当てることはできません。PodSubnetはkube-controller-managerの対応する--node-cidr-mask-sizeとの互換性を検証します。また、kubeadmは、IPv6を利用する際にノードマスクを自動的に設定しなくなりました。IPv6サービスのサブネットマスクがデフォルトのノードマスク/64と互換性があることを確認するか、適切に設定する必要があります。以前は、IPv6の場合、podSubnetのマスクが/112未満の場合、kubeadmはノードマスクを8の倍数として計算し、使用可能なビットを分割してノードに使用される数を最大化していました。 (#95723, @aojea) [SIG Cluster Lifecycle]
  • 非推奨であった--experimental-kustomizeフラグがkubeadmコマンドから削除されました。代わりに1.19から導入された--experimental-patchesを利用してください。移行方法の情報は--experimental-patchesのヘルプから見ることができます。 (#94871, @neolit123)
    • :pencil: KEP 1739参照のこと。
    • :pencil: 以下3タイプのパッチがサポートされている。
      1. Strategic Merge Patches (strategic)
        • Kubectl apply で利用しているmerge方法。
      2. RFC6902 JSON patches (json)
        • kustomizeでcommandsやargsの末尾にパラメータを追加するときによく使う。
      3. RFC7396 JSON merge patches (merge)
        • strategic merge patchのオリジナル版?
    • :pencil: --experimental-patches で指定したディレクトリに、以下のファイル名のフォーマットでパッチを書くことで、kubeadmで生成されるstatic podにパッチを当てることができる。
      • componentname[suffix][+patchtype].{yaml|json}
  • kubeadm: kubeadm alpha kubeconfig userコマンドに--configフラグが追加され、以下のフラグが削除されました。 (#94879, @knight42) [SIG Cluster Lifecycle]
    • apiserver-advertise-address / apiserver-bind-port: InitConfigurationlocalAPIEndpointまたはClusterConfigurationcontrolPlaneEndpointを利用してください。
    • cluster-name: ClusterConfigurationclusterNameを利用してください。
    • cert-dir: ClusterConfigurationcertificatesDirを利用してください。

種々の変更 (Changes by Kind)

廃止予定 (Deprecation)

  • kubeadm: self-hostingのサポートが非推奨になりました。実験的コマンドであるkubeadm alpha self-hostingは非推奨になり、将来のバージョンで削除します。 (#95125, @neolit123) [SIG Cluster Lifecycle]
    • :pencil: bootkubeのcheckpointer相当のことを公式にサポートしないとself-hostingは実現できないのですが、kubeletのcheckpointingはセキュリティとの兼ね合いがあって公式にサポートするのは難しかったんでしょうね。
  • kubeadm: kubeadm alpha certsコマンドがkubeadm certsコマンドとして昇格しました。kubeadm alpha certsコマンドは非推奨になり、将来のバージョンで削除されます。移行してください。 (#94938, @yagonobre) [SIG Cluster Lifecycle]
  • kubeadm: 非推奨のkubeadm alpha kubelet config enable-dynamicコマンドが削除されました。この機能を引き続き利用したい場合はk8s.ioの"Dynamic Kubelet Configuration"というガイドを参考にしてください。この変更はその上位のコマンドであるkubeadm alpha kubeletコマンドの削除も含んでいます。このコマンドはenable-dynamicサブコマンドの削除によりその他のいかなるサブコマンドも持っていません。 (#94668, @neolit123) [SIG Cluster Lifecycle]
  • kubeadm: kubeadm upgrade nodeコマンドにおける、非推奨の--kubelet-configフラグが削除されました。 (#94869, @neolit123) [SIG Cluster Lifecycle]

API の変更 (API Change)

  • なし。

機能 (Feature)

  • 現在のシステム時刻が、読み込まれた証明書の NotBeforeおよびNotAfter の範囲外である場合、kubeadm はエラーを投げる代わりに警告を出力するようになりました。 (#94504, @neolit123)
  • kubeadm: コントロールプレーンノードに少なくとも1700MBのRAMがあることを事前にチェック(preflight check)するようになりました。 (#93275, @xlgao-zju) [SIG Cluster Lifecycle]
  • kubeadm: kubeadm alpha kubeconfig userコマンドで生成されたkubeconfigファイルのクラスタ名を設定可能にする--cluster-nameフラグを追加しました。 (#93992, @prabhu43) [SIG Cluster Lifecycle]
    • :pencil: このコマンドで生成されたkubeconfigのクラスター名が変更できるようになりました。
  • kubeadm: kubeadm init phase upload-certsコマンドでkubeconfigファイルのパスを設定可能にする--kubeconfigフラグを追加しました。 (#94765, @zhanw15) [SIG Cluster Lifecycle]
  • kubeadm: etcd pod の resource.requests をデフォルトで 100m CPU, 100Mi memory, 100Mi ephemeral_storage に設定しました。 (#94479, @knight42) [SIG Cluster Lifecycle]
  • kubeadm: kubeadm alpha kubeconfig userコマンドに--configフラグが追加され、以下のフラグが削除されました。 (#94879, @knight42) [SIG Cluster Lifecycle]
    • apiserver-advertise-address / apiserver-bind-port: InitConfigurationlocalAPIEndpointまたはClusterConfigurationcontrolPlaneEndpointを利用してください。
    • cluster-name: ClusterConfigurationclusterNameを利用してください。
    • cert-dir: ClusterConfigurationcertificatesDirを利用してください。

ドキュメント (Documentation)

  • なし。

バグ修正 (Bug or Regression)

  • オプションのバージョンコマンドライン引数がkubeadm upgrade planコマンドに指定されたときに、kubeadmが致命的なエラーで終了するリグレッションが修正されました (#94421, @rosti) [SIG Cluster Lifecycle]
  • /var/lib/kubeletディレクトリがユーザによってマウントされていた場合、kubeadm reset/var/lib/kubeletディレクトリをアンマウントしないようになりました。 (#93702, @thtanaka) [SIG Cluster Lifecycle]
  • etcdのバージョンが変更されていなかったとしても、アップグレード時にetcdのマニフェストが再生成されるようになりました。 (#94395, @rosti) [SIG Cluster Lifecycle]
  • kubeadm join --control-planeの間、ユーザが全ての証明書、キーおよびkubeconfigファイルを自分で設定した場合のために、それらを署名するためのCA鍵(root CA, front-proxy CA, etcd CA)が無かった場合にエラーではなく警告を出すようにしました。 (#94988, @neolit123) [SIG Cluster Lifecycle]
  • kubeadm: kubeadm init phase control-planeに欠けていた--experimental-patchesフラグを追加しました。 (#95786, @Sh4d1) [SIG Cluster Lifecycle]
  • kubeadm: アップグレード中に起動中のCoreDNSのバージョンがサポートされているものかどうかを調べる際に、panicしないようになりました。 (#94299, @zouyee) [SIG Cluster Lifecycle]
  • kubeadm: コントロールプレーンが初期化(init)もしくは追加(join)される際に作られるetcdのデータディレクトリが0700のパーミッションで作られるようになりました。 (#94102, @neolit123) [SIG Cluster Lifecycle]
  • kubeadm: kubeadm upgrade中に新しいデフォルトがあった場合、CoreDNSのマイグレーションが走るように修正されました。 (#96907, @pacoxu) [SIG Cluster Lifecycle]
  • kubeadm: CRI socketが別のcontainer runtimeのものであったとしても、docker infoを呼び出そうと試みていたバグを修正しました。 (#94555, @SataQiu) [SIG Cluster Lifecycle]
  • kubeadm: container runtimeとしてDockerが利用されていた場合、kubeadm resetはコンテナを削除する前にコンテナを停止するようになりました。 (#94586, @BedivereZero) [SIG Cluster Lifecycle]
  • kubeadm: 既存のkubeconfigファイルを検証中に、ユーザにkubeconfig中のサーバURLを定義することができるように、kubeconfig中のサーバURLの検証を緩くしました。(例えば外部CAモードを利用する際など) (#94816, @neolit123) [SIG Cluster Lifecycle]

その他 (Other (Cleanup or Flake))

  • kubeadm: ログメッセージ中において引数の keyとvalueを分けました。 (#94016, @mrueg) [SIG Cluster Lifecycle]
    • :pencil: 何のこっちゃと思いきや、ログ中に -oyaml と出ているところを -o yaml と書き直してました。cleanup らしいです。
  • kubeadm: addonをapplyする際に、既知のimage digestsであるCoreDNSに対するチェックを削除しました。 (#94506, @neolit123) [SIG Cluster Lifecycle]
3
0
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
3
0