Kubernetes 1.17: tổng quan về những cải tiến chính

Hôm qua, ngày 9 tháng XNUMX, đã diễn ra bản phát hành tiếp theo của Kubernetes - 1.17. Theo truyền thống đã phát triển cho blog của chúng tôi, chúng tôi nói về những thay đổi quan trọng nhất trong phiên bản mới.

Kubernetes 1.17: tổng quan về những cải tiến chính

Thông tin được sử dụng để chuẩn bị tài liệu này được lấy từ thông báo chính thức, Bảng theo dõi cải tiến Kubernetes, THAY ĐỔI-1.17 và các vấn đề liên quan, yêu cầu kéo và Đề xuất nâng cao Kubernetes (KEP). Vậy co gi mơi?..

Định tuyến nhận biết cấu trúc liên kết

Cộng đồng Kubernetes đã chờ đợi tính năng này từ lâu - Định tuyến dịch vụ nhận biết cấu trúc liên kết. Nếu MŨ LƯỠI TRAI nó bắt nguồn từ tháng 2018 năm XNUMX và chính thức tăng cường — 2 năm trước, những vấn đề thông thường (giống ) - và già thêm vài tuổi nữa...

Ý tưởng chung là cung cấp khả năng triển khai định tuyến “cục bộ” cho các dịch vụ nằm trong Kubernetes. “Địa phương” trong trường hợp này có nghĩa là “cùng cấp độ tôpô” (cấp độ cấu trúc liên kết), có thể là:

  • nút giống hệt nhau cho các dịch vụ,
  • cùng một giá máy chủ,
  • cùng một khu vực
  • cùng một nhà cung cấp đám mây,
  • ...

Ví dụ về việc sử dụng tính năng này:

  • tiết kiệm lưu lượng khi cài đặt trên đám mây với nhiều vùng sẵn sàng (multi-AZ) - xem. minh họa tươi sử dụng ví dụ về lưu lượng truy cập từ cùng một khu vực nhưng khác AZ trong AWS;
  • độ trễ hiệu suất thấp hơn/thông lượng tốt hơn;
  • dịch vụ phân đoạn có thông tin cục bộ về nút trong mỗi phân đoạn;
  • vị trí của Fluentd (hoặc tương tự) trên cùng một nút với các ứng dụng có nhật ký được thu thập;
  • ...

Việc định tuyến như vậy, “biết” về cấu trúc liên kết, còn được gọi là mối quan hệ mạng - bằng cách tương tự với mối quan hệ nút, nhóm ái lực/chống ái lực hoặc xuất hiện không lâu về trước Lập lịch khối lượng theo cấu trúc liên kết (và Cung cấp số lượng). Mức độ thực hiện hiện tại ServiceTopology trong Kubernetes - phiên bản alpha.

Để biết chi tiết về cách hoạt động của tính năng này và cách bạn có thể sử dụng nó, hãy đọc bài viết này từ một trong những tác giả.

Hỗ trợ ngăn xếp kép IPv4/IPv6

Tiến bộ đáng kể đã sửa trong một tính năng mạng khác: hỗ trợ đồng thời cho hai ngăn xếp IP, được giới thiệu lần đầu tiên trong K8s 1.16. Đặc biệt, bản phát hành mới mang đến những thay đổi sau:

  • trong proxy kube thực hiện khả năng hoạt động đồng thời ở cả hai chế độ (IPv4 và IPv6);
  • в Pod.Status.PodIPs xuất hiện hỗ trợ API đi xuống (cùng lúc với /etc/hosts bây giờ họ yêu cầu máy chủ thêm địa chỉ IPv6);
  • hỗ trợ ngăn xếp kép LOẠI (Kubernetes IN Docker) và kubeadm;
  • cập nhật các bài kiểm tra e2e.

Kubernetes 1.17: tổng quan về những cải tiến chính
Hình minh họa sử dụng IPV4/IPv6 xếp chồng kép trong KIND

Tiến bộ về CSI

Tuyên bố ổn định hỗ trợ cấu trúc liên kết cho việc lưu trữ dựa trên CSI, được giới thiệu lần đầu tiên trong K8s 1.12.

Sáng kiến ​​cho di chuyển các plugin âm lượng sang CSI - Di chuyển CSI - đã đạt đến phiên bản beta. Tính năng này rất quan trọng để dịch các plugin lưu trữ hiện có (trong cây) đến giao diện hiện đại (CSI, ngoài cây) vô hình đối với người dùng cuối Kubernetes. Quản trị viên cụm sẽ chỉ cần kích hoạt CSI Migration, sau đó các tài nguyên và khối lượng công việc có trạng thái hiện có sẽ tiếp tục “hoạt động”... nhưng sử dụng trình điều khiển CSI mới nhất thay vì các trình điều khiển lỗi thời có trong lõi Kubernetes.

Hiện tại, quá trình di chuyển trình điều khiển AWS EBS đã sẵn sàng ở phiên bản beta (kubernetes.io/aws-ebs) và GCE PD (kubernetes.io/gce-pd). Dự báo cho các cơ sở lưu trữ khác như sau:

Kubernetes 1.17: tổng quan về những cải tiến chính

Chúng tôi đã nói về cách hỗ trợ lưu trữ “truyền thống” trong K8 đến với CSI trong bài viết này. Và việc chuyển đổi quá trình di chuyển CSI sang trạng thái beta được dành riêng cho ấn phẩm riêng trên blog dự án.

Ngoài ra, một chức năng quan trọng khác trong bối cảnh CSI, bắt nguồn (triển khai alpha) trong K1.17s 8, đã đạt đến trạng thái beta (tức là được bật theo mặc định) trong bản phát hành Kubernetes 1.12 - tạo ảnh chụp nhanh và sự phục hồi từ chúng. Trong số những thay đổi được thực hiện đối với Kubernetes Volume Snapshot trên đường phát hành bản beta:

  • chia sidecar chụp nhanh bên ngoài CSI thành hai bộ điều khiển,
  • thêm bí mật để xóa (xóa bí mật) như một chú thích cho nội dung của ảnh chụp nhanh tập đĩa,
  • công cụ hoàn thiện mới (hoàn thiện) để ngăn đối tượng API ảnh chụp nhanh bị xóa nếu vẫn còn kết nối.

Tại thời điểm phát hành 1.17, tính năng này được hỗ trợ bởi ba trình điều khiển CSI: Trình điều khiển CSI đĩa liên tục GCE, Trình điều khiển Portworx CSI và Trình điều khiển NetApp Trident CSI. Thông tin chi tiết về việc triển khai và sử dụng nó có thể được tìm thấy trong ấn phẩm này trên blog.

Nhãn nhà cung cấp đám mây

Nhãn tự động được gán cho các nút và khối lượng đã tạo tùy thuộc vào nhà cung cấp đám mây được sử dụng, đã có sẵn trong Kubernetes dưới dạng phiên bản beta từ rất lâu - kể từ khi phát hành K8s 1.2 (Tháng 2016 năm XNUMX!). Do được sử dụng rộng rãi trong thời gian dài, các nhà phát triển quyết định, đã đến lúc khai báo tính năng ổn định (GA).

Do đó, tất cả chúng đều được đổi tên tương ứng (theo cấu trúc liên kết):

  • beta.kubernetes.io/instance-typenode.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zonetopology.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/regiontopology.kubernetes.io/region

... nhưng vẫn có sẵn dưới tên cũ (để tương thích ngược). Tuy nhiên, tất cả quản trị viên được khuyến nghị chuyển sang nhãn hiện tại. Tài liệu liên quan K8 đã được cập nhật.

Đầu ra có cấu trúc của kubeadm

Được trình bày ở phiên bản alpha lần đầu tiên đầu ra có cấu trúc cho tiện ích kubeadm. Các định dạng được hỗ trợ: JSON, YAML, mẫu Go.

Động lực thực hiện tính năng này (theo MŨ LƯỠI TRAI) là:

Mặc dù Kubernetes có thể được triển khai thủ công nhưng tiêu chuẩn thực tế (nếu không phải là pháp lý) cho hoạt động này là sử dụng kubeadm. Các công cụ quản lý hệ thống phổ biến như Terraform dựa vào kubeadm để triển khai Kubernetes. Các cải tiến theo kế hoạch đối với API cụm bao gồm một gói có thể kết hợp để khởi động Kubernetes với kubeadm và cloud-init.

Nếu không có đầu ra có cấu trúc, ngay cả những thay đổi vô hại nhất thoạt nhìn cũng có thể phá vỡ Terraform, Cluster API và phần mềm khác sử dụng kết quả của kubeadm.

Các kế hoạch trước mắt của chúng tôi bao gồm hỗ trợ (dưới dạng đầu ra có cấu trúc) cho các lệnh kubeadm sau:

  • alpha certs
  • config images list
  • init
  • token create
  • token list
  • upgrade plan
  • version

Minh họa phản hồi JSON cho lệnh kubeadm init -o json:

{
  "node0": "192.168.20.51:443",
  "caCrt": "sha256:1f40ff4bd1b854fb4a5cf5d2f38267a5ce5f89e34d34b0f62bf335d74eef91a3",
  "token": {
    "id":          "5ndzuu.ngie1sxkgielfpb1",
    "ttl":         "23h",
    "expires":     "2019-05-08T18:58:07Z",
    "usages":      [
      "authentication",
      "signing"
    ],
    "description": "The default bootstrap token generated by 'kubeadm init'.",
    "extraGroups": [
      "system:bootstrappers:kubeadm:default-node-token"
    ]
  },
  "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}

Ổn định các đổi mới khác

Nhìn chung, việc phát hành Kubernetes 1.17 diễn ra theo phương châm “Ổn định" Điều này được tạo điều kiện thuận lợi bởi thực tế là có nhiều tính năng trong đó (tổng số của chúng là 14) đã nhận được trạng thái GA. Trong số đó:

Các thay đổi khác

Tất nhiên, danh sách đầy đủ các cải tiến trong Kubernetes 1.17 không chỉ giới hạn ở những cải tiến được liệt kê ở trên. Dưới đây là một số khác (và để có danh sách đầy đủ hơn, hãy xem THAY ĐỔI):

  • Tính năng được trình bày trong bản phát hành trước đã đạt đến phiên bản beta RunAsUserName cho Windows;
  • thay đổi tương tự xảy ra API EndpointSlice (cũng từ K8s 1.16), tuy nhiên hiện tại, giải pháp cải thiện hiệu suất/khả năng mở rộng của API điểm cuối này không được bật theo mặc định;
  • các nhóm hiện rất quan trọng đối với hoạt động của cụm có thể được tạo ra không chỉ trong không gian tên kube-system (để biết chi tiết, xem tài liệu về Giới hạn mức tiêu thụ Hạng ưu tiên);
  • tùy chọn mới cho kubelet - --reserved-cpus — cho phép bạn xác định rõ ràng danh sách CPU dành riêng cho hệ thống;
  • cho kubectl logs trình bày cờ mới --prefix, thêm tên của nhóm và vùng chứa nguồn vào từng dòng của nhật ký;
  • в label.Selector thêm RequiresExactMatch;
  • tất cả các container trong kube-dns hiện đang chạy với ít đặc quyền hơn;
  • hyperkube được tách thành một kho GitHub riêng và sẽ không còn được đưa vào các bản phát hành Kubernetes nữa;
  • nhiều улучшена người bán hàng kube-proxy cho các cổng không phải UDP.

Thay đổi phụ thuộc:

  • Phiên bản CoreDNS có trong kubeadm là 1.6.5;
  • phiên bản crictl được cập nhật lên v1.16.1;
  • CSI 1.2.0;
  • vvd 3.4.3;
  • Phiên bản Docker thử nghiệm mới nhất được nâng cấp lên 19.03;
  • Phiên bản Go tối thiểu cần thiết để xây dựng Kubernetes 1.17 là 1.13.4.

PS

Đọc thêm trên blog của chúng tôi:

Nguồn: www.habr.com

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster