はじめに
このエントリは、Kubernetes 1.13 の CHANGELOG からKubernetes 1.13: 主な変更点 (Major Themes) についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。
- Kubernetes 1.13: Urgent Upgrade Notes
- Kubernetes 1.13: 既知の問題 (Known Issues) と 廃止予定の機能 (Deprecations)
- Kubernetes 1.13: 主な変更点 (Major Themes)
- Kubernetes 1.13: 新機能 (New features)
新機能 (New features)
New Features
- kubelet: NodeLease 新機能が有効の場合は、kubelet は Node のステータスを直前の報告が存在しないまたは変更があるときのみ送るようになりました。 (#69753, @wangzhen127)
- NodeLease は v1.12 で追加された API サーバの負荷対策に Node のハートビートの部分のみを切り出した機能ですね
- vSphereVolume は Raw Block Volume Support を実装しました (#68761, @fanzhangio)
- CRD の multi-version Schema でも Subresource, AdditionalPrintColumns がサポートされました。v1.13 より以前に additionalPrinterColumns を設定していた場合はデフォルトで top-level フィールドに設定されます。各バージョン毎に additionalPrinterColumns を設定するように変更する場合は top-level additionalPrinterColumns のフィールドに null を指定する必要があります。
- CRD の機能追加は引き続き行われていますね。KubeCon Seattle 2018 ですべてのリソースを CRD にしたいと言った話もあったようですし、引き続き今後の動向に注目したいところです。
- CSIDRIverRegistry または CSINodeInfo 機能が有効の場合に CSI CRD を自動的にインストールするアドオンが追加されました。(#70193, @saad-ali)
- kube-apiserver のような
system:masters
の無制限アクセスを許可できるようになりました (#70671, @deads2k)- パフォーマンス向上のために無制限のグループを指定できるようにしたようです
- Windows CNI プラグインのために DNS の機能を指定できるようになりました (#67435, @feiskyer)
- Windows では Pod の DNSPolicy が無視されていた問題があるようで、それの対策として追加されたようです
- kube-apiserver:
--audit-webhook-version
と--audit-log-version
のフラグのデフォルト値がaudit.k8s.io/v1
に変更になりました (#70476, @charrywanganthony)-
デフォルト値が
audit.k8s.io/v1beta1
からaudit.k8s.io/v1
に変更になったようです
-
デフォルト値が
- kubeadm: API Server の設定に timeoutForControlPlane オプションが追加されました。これにより Control Plane が立ち上がるまでのタイムアウトの時間をコントロールできるようになりました。デフォルトは 4 分です。(#70480, @rosti)
- これまでは、コントロールプレーンのタイムアウトが4分に固定されていたため、ユーザーは変更できませんでしたが、ユーザがこのタイムアウト値を変更できるようになったようです
- audience の指定がなかった場合
--api-audiences
のデフォルト値が--service-account-issuer
に指定した値となりました (#70308, @mikedanese) - describe コマンドで Projected Volume の表示がサポートされました (#70158, @WanLinghao)
- kubeadm で新たな control plane Node を追加するときに新たな stacked etcd のメンバーを自動的に作成するようになりました (外部 etcd を除く) (#69486, @fabriziopandini)
-
kubectl describe node
で ephemeral-storage の利用率が表示されるようになりました (#70268, @Pingan2017) - Docker 以外の CRI ランタイムのサポートのために Debian パッケージに br_netfilter と ip_forward を有効にする設定が追加されました (#70152, @ashwanikhemani)
- よく利用される AWS リージョンのリストに、p-northeast-3 と eu-west-3 のリージョンを追加しました (#70252, @nckturner)
- kubeadm: CPU のコア数を確認する事前チェックが実装されました (#70048, @bart0sh)
- kube-up で CoreDNS がデフォルトの DNS サーバになりました (#69883, @chrisohaver)
-
kubectl cp
でコピーする際に所有者と権限を保持する機能を無効化するオプションを追加しました(#69573, @bjhaid)-
--no-preserve
でできるようです
-
- Azure file plugin で Azure premium file をサポートしました (#69718, @andyzhangx)
- ChangeLog に乗っているの文章がピックアップミスされていて、別のフィールドの内容が ChangeLog に書かれている (この文は本来の内容を訳しています)
-
TaintBasedEvictions
新機能がベータに移行されました (#69824, @Huang-Wei)- TaintBasedEvictions は http://ccvanishing.hateblo.jp/entry/2018/12/06/195433 に詳しく書いてあります
- client-go/dynamic/fake パッケージで JSON Patch をサポートしました (#69330, @vaikas-google)
- dry-run がベータとなりデフォルトで有効になりました (#69644, @apelisse)
-
kubectl get priorityclass
でデフォルトの表示カラムが設定されました (#69431, @Huang-Wei)- Priority の具体的な値などが表示されるようになりました
- e2e テストを実行するための新たなベースコンテナイメージが追加されました (#69368, @dims)
-
LC_ALL
とLC_MESSAGES
の環境変数はLANG
を変更しないでkubectl
に必要なロケールを設定するために使うことができるようになりました (#69500, @m1kola) - NodeLifecycleController: Node の Lease 更新は、従来の NodeStatus 更新に加えて、ノードからのハートビート信号として扱われるように変更されました(#69241, @wangzhen127)
- NodeLifecycleController の判定として Lease オブジェクトの更新もハートビート扱いになったということのようです
- Informer と Lister が動的なクライアントに対応しました (#69308, @p0lyn0mial)
- 今までは静的なクライアントのみの対応でしたが、GC コントローラで CRD で作成されたリソースのウォッチなどを行うために動的なクライアントでリソースをウォッチできるようになるようです
- Kubernetes 内部で利用されている etcd client が v3.3 にアップグレードされました (#69322, @jpbetz)
-
kubectl port-forward
で名前付きポートを利用できるようになりました (#69477, @m1kola)- 名前付きポートというのは Pod のマニフェスト上で定義されたポートの名前です
-
kubectl wait
の wait の条件指定に--for condition=available=false
といった指定で true 以外の値を指定できるようになりました (#69295, @deads2k) - defaultbackend のイメージが 1.5 にアップデートされました。 (#69120, @aledbf)
- defaultbackend は Ingress のフォワード先がない場合に 404 ページをレンダリングするバックエンドです
- 1.5 で /metrics で公開されていたメトリクスが 80 ポートで公開されなくなりました
- Kubernetes Dashboard のバージョンが v1.10.0 にアップデートされました (#68450, @jeefy)
- Dashboard の変更点はこちら
- kube-controller-manager と kube-scheduler の Pod のマニフェストの requests.cpu を環境変数から設定できるようにしました (#68823, @loburm)
- https://github.com/kubernetes/kubernetes/tree/master/cluster 以下にある構築スクリプトの話です
- PodSecurityPolicy オブジェクトは
fsGroup
とsupplementalGroups
オプションのMayRunAs
ルールをサポートするようになりました。 これにより、MustRunAs
のようにデフォルトの GID を強制することなく、ポッド/コンテナに対する許可された GID の範囲を指定することができます。 つまり、このようなポリシーが適用されるコンテナは、明示的に指定されていない場合はfsGroup
とsupplementalGroup
オプションの GID を使用しませんが、指定された GID はポリシーに従って GID 範囲に収まる必要があります。 (#65135, @stlaz) - Stackdriver Logging Agent のアドオンのイメージが Fluentd v1.2 を利用している 0.6-1.6.0-1 にアップグレードされました。これはナノ秒の精度のタイムスタンプを提供します。 (#70954, @qingling128)
- BoundServiceAccountTokenVolumes のアルファの機能を有効にしたとき、ServiceAccount のボリュームは Projected Volume として作成され、
kube-api-access
のプレフィックスがついた名前となるようになりました (#69848, @mikedanese)-
Proposal は こちらのようで、これを有効にすると以前は Secret リソースに保持されていた ServiceAccount の token が ServiceAccount の
/token
サブリソースに POST して発行するようになり、Pod 単位で別の token となるようです
-
Proposal は こちらのようで、これを有効にすると以前は Secret リソースに保持されていた ServiceAccount の token が ServiceAccount の
- raw ブロックデバイスのサポートがベータに移行し、デフォルトで有効になりました。これは
Pod.spec.containers.volumeDevices
と PersistentVolume と PersistentVolumeClaim のvolumeMode
フィールドからアクセスできます。 (#71167, @msau42) - TokenReview は audience 検証をサポートするようになり、その kube-apiserver 以外が発行したトークンを防げるようになりました。(#62692, @mikedanese)
- audience を指定するとその audience 専用の token が発行されるので token の使い回しなどを防げるようになるようです
- API server では audience が指定されていない token は API server が発行した token とみなすようです
- StatefulSet で
kubectl autoscale
コマンドがサポートされました (#71103, @Pingan2017) - Container Storage Interface (CSI) が v1.13 から GA になりました。この動きの一環として、 Kubernetes は CSI v1.0.0 をサポートし、CSI 0.3 およびそれ以前のリリースのサポートを廃止しました。 以前の CSI ドライバは、Kubernetes 1.15+ で動作するためには、CSI 1.0 にアップデートし、新しい kubelet プラグイン登録ディレクトリに移動する必要があります。 (#71020, @saad-ali)
-
kubeadm init phase certs
とkubeadm alpha certs renew
で作成される証明書の代わりに CSR を作成するオプションを追加しました (#70809, @liztio) - kubelet にノード上のコンテナによって使用されるデバイスの情報を提供する grpc サービスを追加しました。 (#70508, @dashpole)
- これは、デバイスとコンテナを相関させる必要がある監視エージェントのサポートのために追加されたようです。デバイスIDとコンテナ、Podなどが紐付いた情報が取得できるようです。
- AuditSink オブジェクトによって監査 Webhook の設定を可能にする DynamicAuditing 機能が追加されました。(#67257, @pbarker)
- kube-apiserver の /healthz にオプショナルなパラメータが追加されました。このパラメータで一部のヘルスチェックを無効化できます
-
kube-apiserver のヘルスチェックから etcd のチェックを無効化することを目的として追加されたようです。 readinessProbe は
/healthz
で livenessProbe は/healthz?exclude=etcd
にするとよさそうです。
-
kube-apiserver のヘルスチェックから etcd のチェックを無効化することを目的として追加されたようです。 readinessProbe は
- Node に DNS キャッシュを動作させるようにしました。これはデフォルトでは無効となっており、KUBE_ENABLE_NODELOCAL_DNS=true を設定すると有効になります
- https://github.com/kubernetes/kubernetes/tree/master/cluster 以下にある構築スクリプトの話です
-
kubectl describe
やkubectl get pod -o wide
で readiness gates の内容が表示されるようになりました (#70775, @freehan) -
kubectl get deployment/statefulset
で Ready のカラムが表示されるようになりました (#70466, @Pingan2017) - kubelet にコンテナのログサイズを出力する新たなメトリクス
kubelet_container_log_size_bytes
が追加されました (#70749, @brancz) - NodeLifecycleController: Node Lease 機能を有効にした場合、対応する Node が削除されると、Node Lease オブジェクトも削除されます (#70034, @wangzhen127)
- GCERegionalPersistentDisk が GA になりました (#70716, @jingxu97)
- kube-scheduler に 10259 のセキュアポートが追加され、デフォルトで有効になりました。10251 の非セキュアポートは非推奨になりました。明示的にフラグを設定しない場合は自己署名の証明書をメモリ上に作成して起動します。 (#69663, @sttts)