Kubernetes- 1.14 が今夜リリースされます。 私たちのブログのために開発した伝統によると、この素晴らしいオープンソース製品の新しいバージョンの重要な変更について話しているところです。
この資料の準備に使用される情報は、Kubernetes拡張トラッキングテーブル 、 CHANGELOG-1.14および関連する問題、プルリクエスト、Kubernetes拡張提案(KEP)から取得されます 。 更新 (3月26日): 公式リリースの発表もK8sブログに掲載されました。
SIGクラスターライフサイクルからの重要な紹介から始めましょう:Kubernetes 動的フェールオーバークラスター (より正確には、自己ホスト型HA展開) は 、通常の(シングルノードクラスターのコンテキストで)
kubeadm
(
init
および
join
)コマンドを使用して作成できるようになりました 。 要するに、これのために:
- クラスターで使用される証明書はシークレットに転送されます。
- K8sクラスター内でetcdクラスターを使用する(つまり、これまで存在していた外部依存関係を取り除く)可能性のために、 etcd-operatorが使用されます。
- フォールトトレラントな構成を提供する外部ロードバランサーの推奨設定が文書化されています(将来、この依存関係による障害の可能性は計画されていますが、この段階ではありません)。
kubeadmで構築されたKubernetes HAクラスターアーキテクチャ
設計提案で実装の詳細を見つけることができます。 この機能は非常に待望されていました。アルファ版はK8s 1.9に戻っていましたが、今だけ登場しました。
API
apply
コマンドと一般に宣言的なオブジェクト管理は 、
kubectl
から
kubectl
に移動され
kubectl
た。 開発者自身が、
kubectl apply
がKubernetesの構成を扱う基本的な部分であると述べて決定を簡単に説明し
kubectl apply
が、「バグがいっぱいで修正が難しい」ため、この機能を通常の形式に戻し、コントロールプレーンに転送する必要があります。 今日の問題のシンプルで説明的な例:
実装の詳細はKEPにあります。 現在入手可能なのはアルファ版です(ベータ版への昇格はKubernetesの次のリリースで計画されています)。
アルファ版では、OpenAPI v3スキームを使用して、(サーバー側の)ユーザー定義K8sリソース(CustomResourceDefinition、CRD)の検証に使用されるCustomResources (CR)でOpenAPIドキュメントを作成および公開する機能が利用可能になりました。 CRD用のOpenAPIを公開すると、クライアント(
kubectl
)がクライアント側で検証を実行し(
kubectl create
および
kubectl apply
一部として)、スキームに従ってドキュメントを発行
kubectl apply
(
kubectl explain
)。 詳細はKEPにあります。
既存のログは
O_APPEND
フラグ(
O_TRUNC
ではなく)で
O_TRUNC
ようになり、状況によってはログの損失を回避し、外部ローテーションユーティリティでログを切り捨てられるようになりました。
また、Kubernetes APIのコンテキストでは、
PodSandbox
および
PodSandboxStatus
フィールドが
runtime_handler
れ、ポッドの
RuntimeClass
に関する情報を考慮することに注意できます(このクラスについては 、このクラスがアルファバージョンとして表示されたKubernetes 1.12リリースに関するテキストを参照してください )。 Admission Webhooks は、サポートする
AdmissionReview
バージョンを決定する機能を実装しました 。 最後に、Admission Webhooksルールで、アプリケーションのスコープをネームスペースとクラスターフレームに制限できるようになりました。
保管施設
K8s 1.10のリリース以降にベータステータスになっている
PersistentLocalVolumes
は安定(GA)として宣言されています。この機能ゲートは無効化されなくなり、Kubernetes 1.17で削除されます。
subPath
としてマウントされたディレクトリ名に、いわゆるDownward APIの環境変数(ポッド名など)を使用する
subPath
が開発されました-新しい
subPathExpr
フィールドの形式で、これで目的のディレクトリ名が決定されます。 当初、この機能はKubernetes 1.11で登場しましたが、1.14ではアルファ版の状態のままでした。
以前のKubernetesリリースと同様に、急速に進化するCSI(Container Storage Interface)には多くの重要な変更が導入されています。
CSI
CSIボリュームのサイズ変更 サポートのサポートが利用可能になりました(アルファ版の一部として)。 これを使用するには、
ExpandCSIVolumes
と呼ばれる機能ゲートと、特定のCSIドライバーでのこの操作のサポートを有効にする必要があります。
アルファ版のCSIのもう1つの機能は、ポッド仕様の一部としてCSIボリュームを直接(つまり、PV / PVCを使用せずに)参照できることです。 これにより、CSIを排他的なリモートデータウェアハウスとして使用する際の制限がなくなり、 ローカルの一時ボリュームの世界への扉が開かれます。 ( ドキュメントの例)を使用するには、
CSIInlineVolume
機能ゲートを有効にする必要があります。
エンドユーザー(システム管理者)にはあまり目立たない、CSIに関連するKubernetesの「内部」の進歩があります...現時点では、開発者は各ストレージプラグインの2つのバージョンをサポートすることを余儀なくされています。 -tree)、および2番目-新しいCSIの一部として(たとえば、 こちらで詳細をお読みください ) 。 これにより、CSIが安定するため、対処しなければならない理解しやすい不便が生じます。 対応するKubernetesポリシーにより、ツリー内プラグインの非推奨APIを単純に非推奨にすることはできません。
これにより、アルファ版は、ツリー内に実装されたプラグインの内部コードをCSIプラグインに移行するプロセスに到達しました。これにより、開発者の懸念はプラグインの1つのバージョンをサポートすることになり、古いAPIとの互換性が維持され、いつものように廃止を宣言します。 次のKubernetesリリース(1.15)までに、すべてのクラウドプロバイダープラグインが移行され、実装はベータステータスを受け取り、デフォルトのK8sインストールでアクティブ化される予定です。 詳細については、 設計提案を参照してください。 この移行により、特定のクラウドプロバイダー(AWS、Azure、GCE、Cinder)によって定義されたボリュームの制限も拒否されました。
さらに、CSIブロックデバイス(
CSIBlockVolume
)のサポートがベータ版に変換されました。
ノード/ Kubelet
メインリソースのメトリックを返すように設計された、Kubeletの新しいエンドポイントのアルファバージョンが表示されます。 一般的に、KubeletがcAdvisorからコンテナの使用に関する統計を取得するために使用した場合、このデータはCRI(Container Runtime Interface)を介してコンテナランタイムから取得されますが、古いバージョンのDockerとの互換性は保持されます。 以前、Kubeletで収集された統計はREST APIを介して提供されていましたが、
/metrics/resource/v1alpha1
あるエンドポイントを使用するようになり
/metrics/resource/v1alpha1
。 開発者の長期戦略は、Kubeletが提供する一連のメトリックを最小限にすることです。 ところで、これらのメトリック自体は現在 「コアメトリック」ではなく「リソースメトリック」と呼ばれ、「CPUやメモリなどのファーストクラスリソース」 と呼ばれています。
非常に興味深いニュアンス:プロメテウス形式を使用するさまざまなケースと比較してgRPCエンドポイントのパフォーマンスに明らかな利点があるにもかかわらず(ベンチマークの結果の1つを参照) 、著者はコミュニティのこの監視システムの明確なリーダーシップによりプロメテウステキスト形式を好みました。
「GRPCは主要な監視パイプラインと互換性がありません。 エンドポイントは、メトリックをMetrics Serverに配信する場合、またはエンドポイントと直接統合するコンポーネントを監視する場合にのみ役立ちます。 Metrics Serverでキャッシュを使用する場合、Prometheusテキスト形式のパフォーマンスは、コミュニティでPrometheusが広く使用されていることを考えると、gRPCよりもPrometheusを優先するのに十分です。 OpenMetrics形式がより安定すると、プロトタイプベースの形式でgRPCのパフォーマンスに近づくことができます。
メトリック用の新しいKubeletエンドポイントでgRPCおよびPrometheus形式を使用した比較パフォーマンステストの1つ。 その他のグラフおよびその他の詳細は、 KEPにあります。
その他の変更点:
- Kubeletは
--system-reserved
および--kube-reserved
オプションでpid=<number>
パラメーターを受け入れるようになり、指定されたPIDがそれぞれシステム全体またはKubernetesシステムデーモン用に予約されるようにします。 機能はSupportNodePidsLimit
と呼ばれる機能ゲートが有効になるとSupportNodePidsLimit
ます。 - Kubeletは、(一度)オペレーションを再起動して削除する前に、不明な状態のコンテナを停止しようとします。
-
PodPresets
を使用する場合、同じ情報が通常のコンテナとしてinitコンテナに追加されるようになりました。 - KubeletはCRI統計プロバイダーの
usageNanoCores
使用を開始し 、Windows上のノードとコンテナーのネットワーク統計が追加されました 。 - オペレーティングシステムとアーキテクチャに関する情報は、Nodeオブジェクトの
kubernetes.io/os
およびkubernetes.io/arch
に記録されるkubernetes.io/os
なりkubernetes.io/arch
(ベータからGAに転送されます)。 - ポッド内のコンテナーに特定のシステムユーザーグループを指定する機能(
RunAsGroup
、 K8s 1.11に登場)は、ベータ版(デフォルトで有効)に進みました。 - cAdvisorで使用されるduおよびfindは、Goの実装に置き換えられます。
CLI
-kフラグがkustomizeとの統合のために cli-runtimeおよびkubectlに追加されました (ところで、現在は別のリポジトリで開発されています)。 特別なkustomizationディレクトリからの追加のYAMLファイルの処理については(それらの使用の詳細については、 KEPを参照してください):
kustomizationファイルの単純な使用例( オーバーレイ内でのkustomizeのより複雑な使用も可能です )
さらに:
- kubectlロゴとそのドキュメントが更新されました-kubectl.docs.kubernetes.ioを参照してください。
- 新しい
kubectl create cronjob
コマンドがkubectl create cronjob
さkubectl create cronjob
。その名前はそれ自身を表しています。 -
kubectl logs
は、フラグ-f
(ストリーミングログの場合は--follow
)と-l
(ラベルクエリの場合はkubectl logs
を組み合わせることができます。 - kubectl は 、ワイルドカードを使用して選択されたファイルをコピーすることを教えました 。
-
--all
フラグがkubectl wait
コマンドに追加され 、指定されたリソースタイプのネームスペース内のすべてのリソースが選択されました。 - kubectlの安定したプラグインメカニズムを宣言しました 。
その他
安定(GA)ステータスは、次の機能を受け取りました。
- Windowsノード(Windows Server 2019を含む)のサポート。これは、KubernetesでWindows Serverコンテナーを計画する可能性を意味します( KEPも参照)。
- ポッドの準備で考慮される追加の条件を決定するためにポッド仕様で使用される
ReadinessGate
。 - ラージページのサポート(
HugePages
と呼ばれる機能ゲート)。 - CustomPodDNS ;
- PriorityClass API、 ポッドの優先度とプリエンプション 。
Kubernetes 1.14で導入されたその他の変更:
- デフォルトのRBACポリシーは、認証APIへの
access-review
と認証されていないユーザーaccess-review
を提供しなくなりaccess-review
た。 - CoreDNSの公式サポートはLinuxでのみ提供されるため、クラスターでの(CoreDNS)展開にkubeadmを使用する場合、ノードはLinuxでのみ機能するはずです(この制限にはnodeSelectorsが使用されます)。
- デフォルトのCoreDNS構成では、プロキシの代わりに転送プラグインが 使用されるようになりました。 さらに、readyProbeがCoreDNSに追加され、対応する(サービスの準備ができていない)ポッドの負荷分散が防止されます。
- kubeadmの
init
またはupload-certs
では、新しいコントロールプレーンをkubeadm-certsシークレットに接続するために必要な証明書をアップロードできるようになりました (--experimental-upload-certs
フラグが使用されます)。 - Windowsインストールの場合、gMSA(Group Managed Service Account)のサポートのアルファ版-コンテナで使用できるActive Directoryの特別なアカウントが登場しました。
- GCEの場合、 etcdとkube-apiserverの間で mTLS暗号化がアクティブ化されました。
- 使用/依存ソフトウェアの更新:Go 1.12.1、CSI 1.1、CoreDNS 1.3.1、kukeradmでのDockerサポート18.09、およびDocker APIの最小サポートバージョンは1.26でした。
PS
ブログもご覧ください。