Hôm qua, ngày 9 tháng XNUMX, 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.

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, , 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 nó bắt nguồn từ tháng 2018 năm XNUMX và chính thức — 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. 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 , hoặc xuất hiện (và ). 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 từ một trong những tác giả.
Hỗ trợ ngăn xếp kép IPv4/IPv6
Tiến bộ đáng kể 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 . Đặc biệt, bản phát hành mới mang đến những thay đổi sau:
- trong proxy kube khả năng hoạt động đồng thời ở cả hai chế độ (IPv4 và IPv6);
- в
Pod.Status.PodIPshỗ trợ API đi xuống (cùng lúc với/etc/hostsbây giờ họ yêu cầu máy chủ thêm địa chỉ IPv6); - hỗ trợ ngăn xếp kép (Kubernetes IN Docker) và ;
- cập nhật các bài kiểm tra e2e.

sử dụng IPV4/IPv6 xếp chồng kép trong KIND
Tiến bộ về CSI
Tuyên bố ổn định cho việc lưu trữ dựa trên CSI, được giới thiệu lần đầu tiên trong .
Sáng kiến cho di chuyển các plugin âm lượng sang 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:

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 . 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 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 - 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 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 , đã đế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-type→node.kubernetes.io/instance-type -
failure-domain.beta.kubernetes.io/zone→topology.kubernetes.io/zone -
failure-domain.beta.kubernetes.io/region→topology.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. 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 . 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 ) 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 nút "đánh dấu" theo các điều kiện nhất định (), xuất hiện trong ;
- - một loại sự kiện mới có nhãn cho biết tất cả các đối tượng đều có phiên bản nhất định (
resourceVersion) đã được xử lý bởi đồng hồ; - (mặc định) cho Tài nguyên tùy chỉnh;
- trong không gian tên của tiến trình nhóm;
-
ScheduleDaemonSetPods- sử dụng bộ lập lịch kube (thay vì bộ điều khiển DaemonSet); - về số lượng tập tùy thuộc vào loại nút;
- cho tên thư mục được gắn dưới dạng
subPath; - tới API cho thuê chuyên biệt;
- "bảo vệ hoàn thiện" () dành cho bộ cân bằng tải (kiểm tra tài nguyên Dịch vụ tương ứng trước khi xóa tài nguyên LoadBalancer);
- về hiệu suất khi làm việc với nhiều đồng hồ giám sát các nhóm đối tượng giống hệt nhau - đạt được bằng cách tránh việc lặp lại việc tuần tự hóa các đối tượng giống nhau cho mỗi người theo dõi.
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 ):
- 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 ;
- thay đổi tương tự 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 không chỉ trong không gian tên
kube-system(để biết chi tiết, xem tài liệu về ); - tùy chọn mới cho kubelet - — 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 logscờ 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.SelectorRequiresExactMatch; - tất cả các container trong kube-dns với ít đặc quyền hơn;
- đượ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 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
