Kubernetes 1.19䞻なむノベヌションの抂芁

本日、8月25日、Kubernetesの新しいリリヌスが行われたす合蚈で玄2か月遅れたした -1.19。私たちのブログの䌝統に埓い、新しいバヌゞョンでの最も重芁な倉曎に぀いお話したす。







この物質を調補するために䜿甚される情報をから取埗され、テヌブルを远跡Kubernetesの匷化、CHANGELOG-1.19、Sysdigの抂芁、ならびに関連する問題、プル芁求、Kubernetes拡匵提案KEP。



かなり䞀般的な性質のいく぀かの䞻芁な革新から始めたしょう...



Kubernetes 1.19のリリヌスにより、Kubernetesバヌゞョンの「サポヌトりィンドり」が9か月぀たり、過去3回のリリヌスから1幎぀たり、4回のリリヌスに延長されたした。どうしお



プロゞェクト開発が高速であるため頻繁にメゞャヌリリヌスされる、Kubernetesクラスタヌ管理者はむンストヌルを曎新する時間がないこずが刀明したした。察応するKEPの䜜成者は、昚幎初めにワヌキンググルヌプが実斜した調査を参照し、Kubernetesナヌザヌの玄3分の1が本番環境で実行されおいる廃止されたK8sリリヌスを扱っおいるこずを瀺したした:(





調査の時点で、Kubernetesの珟圚のバヌゞョンは1.13、぀たりすべおのK8sナヌザヌでした1.9および1.10は、その時点でサポヌトされなくなったリリヌスで機胜したした。



したがっお、Kubernetesリリヌスコヌドで芋぀かった問題を修正するパッチのリリヌスのサポヌト期間を3か月延長するず、80以䞊のナヌザヌがサポヌトされおいるバヌゞョンのK8で䜜業できるようになるず想定されたす珟時点で想定されおいる50〜60ではありたせん。 。



もう1぀の倧きな開発構造化ログの暙準が開発 されたした..。コントロヌルプレヌンの珟圚のロギングシステムは、Kubernetesでのメッセヌゞずオブゞェクト参照の均䞀な構造を保蚌しないため、このようなログの凊理が耇雑になりたす。この問題を解決するために、ログ内のメッセヌゞの新しい構造が導入されたした。この構造では、ログを生成するための構造化むンタヌフェむスを提䟛する新しいメ゜ッドず、ログ内のK8sオブゞェクトを識別するための補助メ゜ッドでklogラむブラリが拡匵されおいたす。



klog v2ぞの移行ず同時に、JSONでログを出力するための新しい圢匏ぞの移行が実行されたす。これにより、ログぞの芁求の実行ずその凊理が簡玠化されたす。このために、--logging-formatデフォルトで叀いテキスト圢匏を䜿甚するフラグが衚瀺されたす。



Kubernetesリポゞトリは巚倧であり、著者は構造化ロギングKEPは珟実䞻矩者であり、最も䞀般的なメッセヌゞに新しいアむデアを実珟するための努力を集䞭させたす。



klogの新しいメ゜ッドを䜿甚したロギングの図



klog.InfoS("Pod status updated", "pod", "kubedns", "status", "ready")

I1025 00:15:15.525108       1 controller_utils.go:116] "Pod status updated" pod="kubedns"


klog.InfoS("Pod status updated", "pod", klog.KRef("kube-system", "kubedns"), "status", "ready")

I1025 00:15:15.525108       1 controller_utils.go:116] "Pod status updated" pod="kube-system/kubedns" status="ready"


klog.ErrorS(err, "Failed to update pod status")

E1025 00:15:15.525108       1 controller_utils.go:114] "Failed to update pod status" err="timeout"


JSON圢匏の䜿甚



pod := corev1.Pod{Name: "kubedns", Namespace: "kube-system", ...}
klog.InfoS("Pod status updated", "pod", klog.KObj(pod), "status", "ready")


{
   "ts": 1580306777.04728,
   "v": 4,
   "msg": "Pod status updated",
   "pod":{
      "name": "nginx-1",
      "namespace": "default"
   },
   "status": "ready"
}


もう1぀の重芁なそしお非垞に関連性のあるむノベヌションは、廃止されたAPIに぀いお通知するメカニズムであり、ベヌタ版ずしおすぐに実装されたす぀たり、デフォルトでむンストヌルでアクティブになりたす。によっお説明異なる状態にし、異なる時間に滞圚、倚くのKubernetes垞に時代遅れの容量で、䜜者のマむル芋通し。すべおのリリヌスノヌトを泚意深く読み、構成/蚭定を手動でクリヌンアップしお、それらを远跡するこずはほずんど䞍可胜です。



この問題を解決するために、非掚奚のAPIを䜿甚するず、応答にヘッダヌが远加Warningされ、クラむアント偎で認識されたすclient-go異なる応答の可胜性がある無芖、重耇排陀、ログ。 kubectlナヌティリティでは、これらのメッセヌゞをstderrに出力する方法、コン゜ヌルでメッセヌゞを色で匷調衚瀺する方法、およびわかりやすい--warnings-as-errors名前のフラグを远加する方法を教えたした。



これに加えお、非掚奚のAPIず監査泚釈の䜿甚を報告するための特別なメトリックが远加されたした。



最埌に、開発者は ベヌタ版からのKubernetes機胜の進歩に参加したした。プロゞェクトの経隓が瀺すように、APIのいく぀かの新機胜ず倉曎は、すでに自動的にデフォルトでアクティブ化されおおり、ナヌザヌによる远加のアクションを必芁ずしないため、ベヌタステヌタスで「スタック」しおいたした。



これを防ぐために、それがされた提案したす 6か月間2぀のリリヌスベヌタ版であり、次の条件のいずれも満たさない機胜を非掚奚リストに自動的に送信したす。



  1. GA基準を満たし、安定したステヌタスに昇栌したす。
  2. 以前のベヌタ版を廃止する新しいベヌタ版がありたす。


そしお今、それぞれのSIGによっお分類されたKubernetes1.19の他の倉曎に぀いお。



ボヌルト



新しいCSIStorageCapacity オブゞェクトは、CSIボリュヌムを䜿甚するポッドのスケゞュヌリングプロセスを改善するこずを目的ずしおいたす。ストレヌゞスペヌスが䞍足しおいるノヌドには配眮されたせん。このため、䜿甚可胜なディスク領域に関する情報はAPIサヌバヌに保存され、CSIドラむバヌずスケゞュヌラヌが䜿甚できたす。珟圚の実装状況はアルファ版です。詳现に぀いおは、KEPを参照しおください。



アルファ版のもう1぀の革新は、ポッド仕様で゚フェメラルボリュヌムを盎接定矩する機胜、䞀般的な゚フェメラルむンラむンボリュヌムKEPです。。゚フェメラルボリュヌムは、特定のポッドがスポヌンするずきに䜜成され、終了するず削陀されたす。それらは以前に定矩されおいる可胜性がありたすが仕様に盎接、぀たりむンラむン方匏を含む、機胜自䜓の䞀貫性が蚌明された既存のアプロヌチは、その䜿甚のすべおのケヌスを網矅しおいたせんでした。



新しいメカニズムは、動的プロビゞョニングをサポヌトする任意のドラむバヌの゚フェメラルボリュヌムを定矩するためのシンプルなAPIを提䟛したす以前は、これにはドラむバヌの倉曎が必芁でした。これにより、任意の゚フェメラルボリュヌムCSIずツリヌ内の䞡方EmptyDirを操䜜でき、䜿甚可胜なストレヌゞスペヌスの远跡ずいう別の新機胜䞊蚘で説明のサポヌトも提䟛されたす。



新しい゚フェメラルボリュヌム汎甚むンラむンを䜿甚した高レベルのKubernetesオブゞェクトの䟋



apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: scratch
          mountPath: /scratch
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: scratch
        ephemeral:
          metadata:
            labels:
              type: fluentd-elasticsearch-volume
          spec:
            accessModes: [ "ReadWriteOnce" ]
            storageClassName: "scratch-storage-class"
            resources:
              requests:
                storage: 1Gi


ここで、DaemonSetコントロヌラヌは、ビュヌ名を䜿甚しおポッドを䜜成したすfluentd-elasticsearch-b96sd。その埌、そのようなポッドにPersistentVolumeClaimが远加されfluentd-elasticsearch-b96sd-scratchたす。



たた、アルファバヌゞョンずしお導入された最埌の完党に新しいストレヌゞ機胜は、FSGroupベヌスのアクセス蚱可KEPのサポヌトをcsidriver.spec.SupportsFSGroup瀺すCSIドラむバヌの新しいフィヌルドです。動機CSIボリュヌムの所有暩の倉曎は、コンテナヌにマりントされる前に実行されたすが、すべおのタむプのストレヌゞがそのような操䜜NFSなどをサポヌトしおいるわけではないため、゚ラヌが発生する可胜性がありたす。 ベヌタ版たで぀たり、デフォルトのむンクルヌゞョン









/ Kubelet



Seccompは安定GAず宣蚀されおいたす。特に、この䜜業により、廃止されたず宣蚀された泚釈ではなく、APIのseccompのフィヌルドに移行し新しいKubeletsは泚釈を無芖したす、PodSecurityPolicyに圱響を䞎えたした。



PodSpecに新しいフィヌルドが远加され、ポッドホストのFQDN完党修食ドメむン名を蚭定fqdnInHostnameできるようになりたした。目暙は、Kubernetesのレガシヌアプリケヌションのサポヌトを改善するこずです。著者が圌らの意図を説明する方法は次のずおりです。



« Unix Linux-, Red Hat CentOS, FQDN- hostname. , , Kubernetes, . ».


デフォルトではfalse、叀いKubernetesの堎合動䜜が保持されたす。機胜ステヌタス-アルファバヌゞョン。次のリリヌス1.20で安定しおいるず宣蚀される予定です。Kubeletによっお収集されたアクセラレヌタメトリック



を攟棄するこずが決定されたした。 PodResources APIを介しお、倖郚の監芖゚ヌゞェントによっおこのようなメトリックを収集するこずが提案されおいたす。このAPI自䜓は、メむンのKubernetesリポゞトリからすべおのデバむス固有のメトリックを取埗し、ベンダヌがKubernetesコアに倉曎を加えるこずなくそれらを実装できるようにするこずを目的ずしお、正確に䜜成されたした。 PodResources APIはベヌタ版であり機胜ゲヌトが責任を負いたすKubeletPodResources、たもなく安定したす。珟圚のリリヌスでは、攟棄プロセスはアルファステヌタスであり、詳现はKEPにありたす。



今埌、KubeletはDockerなしで構築できたす。これにより、䜜成者はDocker固有のコヌドがなく、Golangパッケヌゞに䟝存しないこずを意味したすdocker/docker。このむニシアチブの最終的な目暙は、完党に「ドッカヌレス」぀たり、Dockerに䟝存しないKubeletに到達するこずです。い぀ものように、KEPで動機に぀いおもっず読むこずができたす。この機䌚はすぐにGAステヌタスを受け取りたした。



前回のK8sリリヌスでベヌタ版に到達したNodeTopology Managerに、ポッドレベルでリ゜ヌスを平準化する機胜が远加されたした。



スケゞュヌラヌ



Kubernetes 1.18に 戻っお、偶数ポッド配垃 Even Pod Spreadingのグロヌバル構成に぀いお蚘述したしたが、パフォヌマンステストの結果に基づいお、この機胜を延期するこずが決定されたした。圌女は珟圚Kubernetesにいたすアルファステヌタス。



むノベヌションの本質は、これたでのようDefaultConstraintsにPodSpecからtopologySpreadConstraintsだけでなく、クラスタヌレベルで、より高いレベルでポッドを配垃するためのルヌルを芏制できるようにするグロヌバル制玄の远加です。デフォルトの構成は、珟圚のプラグむンず同様になりたすDefaultPodTopologySpread。



defaultConstraints:
  - maxSkew: 3
    topologyKey: "kubernetes.io/hostname"
    whenUnsatisfiable: ScheduleAnyway
  - maxSkew: 5
    topologyKey: "topology.kubernetes.io/zone"
    whenUnsatisfiable: ScheduleAnyway


詳现はKEPにありたす。



偶数ポッド拡散に関連する別の機胜障害ドメむンリヌゞョン、ゟヌン、ノヌドなどによるポッドのグルヌプの配垃がアルファからベヌタに移動されたしたデフォルトで有効。



スケゞュヌラの他の3぀の機胜は、同様の「増加」を実珟したした。





ネットワヌク



Ingressリ゜ヌスは最終的に安定しおいるず宣蚀さv1れ、APIにバヌゞョンがありたす。この点で、かなりの数の曎新が関連するドキュメントに瀺されおいたす。このPRからナヌザヌに気付く倉曎には、特に泚意を払う必芁がありたす。たずえば、spec.backend→ spec.defaultBackend、serviceName→ service.name、servicePort→ service.port.number...などの名前倉曎がありたす



。サヌビスず゚ンドポむントのAppProtocolフィヌルド、およびEndpointSlice API Linuxのkube-proxyが起動したすデフォルトではEndpointSlicesを䜿甚したすが、Windowsの堎合はアルファ版のたたですおよびSCTPサポヌト。



kubeadm



kubeadmナヌティリティに2぀の新機胜アルファ版が導入されたした。



1぀目は、パッチを䜿甚しおkubeadmによっお生成されたマニフェストを倉曎するこずです。Kustomizeアルファ版を䜿甚しおそれらを倉曎するこずはすでに可胜でしたが、kubeadm開発者は、通垞のパッチを䜿甚するこずが奜たしい方法であるず刀断したしたKustomizeは䞍芁な䟝存関係になるため、歓迎されたせん。



今ではフラグを経由しお生のパッチを適甚するこずが可胜である--experimental-patcheskubeadmコマンドのためinit、joinおよびupgrade、䞊びにこれらの段階。 Kustomizeベヌスの実装フラグ--experimental-kustomizeは非掚奚になり、削陀されたす。



2番目の機胜は、コンポヌネント構成を操䜜するための新しいアプロヌチです。そのkubeadmは動䜜したす。このナヌティリティは、デフォルト倀を生成、怜蚌、蚭定し、Kubeletやkube-proxyなどのKubernetesクラスタヌコンポヌネントの構成をConfigMapsの圢匏で保存したす。時間の経過ずずもに、これには倚くの問題が生じるこずが明らかになりたした。kubeadmによっお生成された構成ずナヌザヌによっお送信された構成を区別する方法そうでない堎合は、構成の移行をどうするか。デフォルト倀のどのフィヌルドが自動的に生成され、どのフィヌルドが意図的に蚭定されたしたか..



これらの問題を解決するために、デフォルト倀の蚭定の拒吊これはコンポヌネント自䜓が行う必芁がありたす、構成怜蚌自䜓の委任など、倚数の倉曎が提瀺されたす。コンポヌネント、生成された各ConfigMapぞの眲名など​​。



たた、kubeadmのもう1぀の重芁性の䜎い機胜は、ず呌ばれる機胜ゲヌトですPublicKeysECDSA。これには、kubeadm init ECDSA蚌明曞を䜿甚しおクラスタヌを䜜成する機胜が含たれおいたす。を介しおkubeadm alpha certs renew既存の蚌明曞を曎新するこずもできたすが、RSAずECDSAを簡単に切り替えるメカニズムはありたせん。



その他の倉曎



  • GAステヌタスは、認蚌の分野に3぀の機胜を受信蚌明曞眲名芁求API、ノヌドぞのアクセス制限入堎プラグむンを介しお特定のAPIにNodeRestriction、ブヌトストラップの自動曎新Kubeletクラむアント蚌明曞。
  • 新しいEventAPIも、重耇排陀ぞのアプロヌチが倉曎されお安定しおいるず宣蚀されたしたむベントによるクラスタヌの過負荷を回避するため。
  • (kube-apiserver, kube-scheduler, etcd ) debian distroless. : , ( — KEP).
  • Kubelet Docker runtime target-, TargetContainerName EphemeralContainer ( ).
  • « » .status.conditions, API .
  • kube-proxy IPv6DualStack Windows ( feature gate).
  • わかりやすい名前の機胜ゲヌトCSIMigrationvSpherevSphereの組み蟌み-ツリヌ内-プラグむンからCSIドラむバヌぞの移行がベヌタ版に移行したした。
  • 以䞋のためのkubectl run 远加フラグ--privileged。
  • フェヌズの埌に開始する新しい拡匵ポむントがスケゞュヌラヌに远加されたした- PostFilter、- Filter。
  • WindowsでのCri-containerdサポヌトはベヌタ版に達したした。


䟝存関係の倉曎



  • kubeadmに含たれるCoreDNSのバヌゞョン-1.7.0;
  • cri-tools 1.18.0;
  • CNIコンテナネットワヌキングむンタヌフェむス0.8.6;
  • etcd 3.4.9;
  • 䜿甚されるGoのバヌゞョンは1.15.0-rc.1です。


PS



私たちのブログも読んでください






All Articles