This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Môi trường Production
Tạo một cụm Kubernetes chất lượng production
Một cụm Kubernetes chất lượng production yêu cầu có sự lên kế hoạch và chuẩn bị.
Nếu cụm Kubernetes của bạn dùng để chạy các workload quan trọng, nó phải được cấu hình để có khả năng phục hồi.
Trang này giải thích các bước bạn có thể thực hiện để thiết lập một cụm sẵn sàng cho production,
hoặc để thúc đẩy một cụm hiện có cho việc sử dụng production.
Nếu bạn đã quen thuộc với thiết lập production và muốn những liên kết, hãy bỏ qua đến
Tiếp theo là gì.
Những cân nhắc production
Thông thường, một môi trường cụm Kubernetes production có nhiều yêu cầu hơn một
môi trường Kubernetes cho học tập, phát triển hoặc thử nghiệm cá nhân. Một môi trường production
có thể yêu cầu truy cập an toàn bởi nhiều người dùng, tính khả dụng nhất quán, và các nguồn lực để
thích ứng với nhu cầu thay đổi.
Khi bạn quyết định nơi bạn muốn triển khai môi trường Kubernetes production
(on-premise hoặc trên cloud) và lượng công việc quản lý bạn muốn đảm nhận hoặc trao cho
người khác, hãy xem xét các yêu cầu của bạn đối với cụm Kubernetes bị ảnh hưởng như thế nào
bởi các vấn đề sau:
-
Tính sẵn sàng: Một môi trường học tập Kubernetes trên một máy
có một điểm lỗi duy nhất. Tạo một cụm có tính sẵn sàng cao có nghĩa là phải cân nhắc:
- Tách control plane khỏi các worker node.
- Nhân bản các thành phần control plane trên nhiều node.
- Cân bằng tải lưu lượng tới API server của cụm.
- Có đủ các worker node sẵn sàng, hoặc có khả năng trở nên khả dụng một cách nhanh chóng khi workload thay đổi.
-
Quy mô: Nếu bạn mong muốn môi trường Kubernetes production của mình đáp ứng được một lượng
yêu cầu ổn định, bạn có thể thiết lập khả năng đáp ứng bạn cần và hoàn thành. Tuy nhiên,
nếu bạn mong muốn đáp ứng nhu cầu tăng theo thời gian hoặc thay đổi đáng kể dựa trên những yếu tố
như mùa hoặc sự kiện đặc biệt, bạn cần lập kế hoạch về việc mở rộng quy mô để giảm bớt áp lực
tăng lên từ nhiều yêu cầu hơn đối với control plane và các worker node hoặc thu hẹp quy mô để tối ưu
tài nguyên không sử dụng.
-
Quản lý bảo mật và truy cập: Bạn có đầy đủ các đặc quyền admin trên cụm
Kubernetes học tập của mình. Nhưng các cụm chia sẻ với nhiều workload quan trọng, và
nhiều hơn một hoặc hai người dùng, yêu cầu một cách tiếp cận tinh tế hơn đối với những ai và
những gì có thể truy cập vào các tài nguyên cụm. Bạn có thể sử dụng kiểm soát truy cập dựa trên vai trò
(RBAC) và các kỹ thuật bảo mật khác
để chắc chắn rằng người dùng và workloads có thể truy cập được tới tài nguyên họ cần
trong khi vẫn đảm bảo bảo mật cho worload và cụm máy chủ.
Bạn có thể đặt giới hạn lên tài nguyên mà người dùng và workload có thể truy cập
bằng cách quản lý các chính sách và
tài nguyên container.
Trước khi dựng một môi trường Kubernetes production, cân nhắc
chuyển giao một phần hoặc toàn bộ công việc này cho các nhà cung cấp giải pháp Cloud
Turnkey Cloud Solutions
hoặc các đối tác Kubernetes Partners.
Các tùy chọn gồm:
- Serverless: Chỉ cần chạy workload trên thiết bị của bên thứ ba mà không cần quản lý
toàn bộ cụm. Bạn sẽ bị tính phí cho những thứ như mức sử dụng CPU, bộ nhớ, và
các yêu cầu ổ đĩa.
- Control plane được quản lý: Hãy để nhà cung cấp quản lý quy mô và tính sẵn sàng
của control plane trong cụm, cũng như xử lý các bản vá và cập nhật.
- Worker node được quản lý: Cấu hình nhóm các node để đáp ứng nhu cầu của bạn,
sau đó nhà cung cấp sẽ đảm bảo rằng những node đó khả dụng và sẵn sàng để thực hiện
các cập nhật khi cần thiết.
- Sự tích hợp: Có những nhà cung cấp tích hợp Kubernetes với các dịch vụ khác
mà bạn có thể cần, ví dụ kho lưu trữ, container registries, các phương thức xác thực,
và những công cụ phát triển.
Liệu bạn tự dựng một cụm Kubernetes production hay làm điều đó với
các đối tác, xem những phần dưới đây để đánh giá nhu cầu liên quan tới
control plane, các worker node, truy cập người dùng, và
các tài nguyên workload cho cụm của bạn.
Thiết lập cụm production
Trong một cụm Kubernetes có chất lượng production, control plane quản lý
cụm từ các dịch vụ có thể được trải đều trên nhiều máy tính
theo những cách khác nhau. Tuy nhiên, mỗi worker node đại diện cho một thực thể duy nhất
được cấu hình để chạy Kubernetes pod.
Control plane trên production
Cụm Kubernetes đơn giản nhất có toàn bộ dịch vụ control plane và worker node
chạy trên cùng một máy. Bạn có thể phát triển môi trường đó bằng cách thêm
các worker node, như được phản ánh trong sơ đồ được minh họa trong
Các thành phần Kubernetes.
Nếu cụm có nghĩa là có sẵn trong một khoảng thời gian ngắn hoặc có thể
bị loại bỏ nếu có sự cố nghiêm trọng, điều này có thể đáp ứng nhu cầu của bạn.
Tuy nhiên, nếu bạn cần một cụm vĩnh viễn, có mức độ sẵn cao hơn, bạn nên
xem xét các cách mở rộng control plane. Theo thiết kế, dịch vụ control plane
chạy trên một máy tính đơn là không có tính sẵn sàng cao.
Nếu việc giữ cụm được dựng lên và chạy
và đảm bảo rằng nó có thể được sửa chữa nếu có sự cố xảy ra là điều quan trọng,
Xem xét các bước sau:
- Chọn các công cụ triển khai: Bạn có thể triển khai một control plane bằng các công cụ
vi dụ như kubeadm, kops, và kubespray. Xem
Cài đặt Kubernetes với những công cụ triển khai
để tìm hiểu các mẹo triển khai chất lượng production bằng cách sử dụng từng phương pháp
triển khai đó. Những Container Runtimes
khác cũng có sẵn để bạn sử dụng cho việc triển khai của mình.
- Quản lý chứng chỉ: Giao tiếp bảo mật giữa các dịch vụ control plane
được thực hiện bằng chứng chỉ. Chứng chỉ được tự động tạo trong quá trình triển khai
hoặc bạn có thể tạo chúng bằng cách sử dụng cơ quan cấp chứng chỉ của riêng bạn.
Xem Chứng chỉ PKI và yêu cầu để biết thêm chi tiết.
- Cấu hình bộ cân bằng tải cho apiserver: Cấu hình bộ cân bằng tải
để phân phối các request API bên ngoài tới các instance của dịch vụ apiserver chạy trên các node khác nhau. Xem
Tạo Bộ Cân bằng tải bên ngoài
để biết thêm chi tiết.
- Phân tách và sao lưu dịch vụ etcd: Các dịch vụ etcd có thể chạy trên
cùng các máy với các dịch vụ control plane khác hoặc chạy trên các máy tách biệt, để
tăng tính bảo mật và khả dụng. Bởi vì etcd lưu dữ liệu cấu hình của cụm,
sao lưu cơ sở dữ liệu etcd nên được thực hiện thường xuyên để đảm bảo rằng bạn có thể
sửa chữa cơ sở dữ liệu đó nếu cần.
Xem thêm etcd FAQ để biết thêm chi tiết về việc cấu hình và sử dụng etcd.
Xem Vận hành các cụm etcd cho Kubernetes
và Thiết lập một cụm etcd có tính Sẵn sàng cao với kubeadm
để biết thêm chi tiết.
- Tạo nhiều hệ thống control plane: Để có tính sẵn sàng cao,
control plane không nên giới hạn trong một máy. Nếu các dịch vụ control plane
được chạy bởi một dịch vụ khởi tạo (ví dụ systemd), các dịch vụ nên chạy trên
ít nhất ba máy. Tuy nhiên, chạy các dịch vụ control plane dạng pods trong
Kubernetes đảm bảo rằng số lượng bản sao dịch vụ mà bạn yêu cầu
sẽ luôn có sẵn.
Scheduler phải có khả năng chịu lỗi,
nhưng không sẵn sàng cao. Một số công cụ triển khai được thiết lập thuật toán đồng thuận
Raft để bầu cử leader cho các dịch vụ Kubernetes. Nếu
nếu leader biến mất, một dịch vụ khác tự bầu cử chính nó và tiếp quản.
- Trải rộng nhiều zone: Nếu việc duy trì cụm khả dụng mọi lúc là quan trọng,
cân nhắc việc tạo một cụm chạy trên nhiều trung tâm dữ liệu,
được gọi là zone trên các môi trường đám mây. Nhóm các zone gọi là region.
Bằng cách trải rộng một cụm trên nhiều zone trong cùng một region,
nó có thể làm tăng cơ hội cho cụm của bạn được tiếp tục hoạt động ngay cả khi
một zone trở nên không khả dụng.
Xem Chạy trong nhiều zone để biết thêm chi tiết.
- Quản lý các tính năng on-going: Nếu bạn có kế hoạch giữ cụm theo thời gian,
có những nhiệm vụ bạn cần làm để duy trì sức khỏe và bảo mật của cụm. Ví dụ,
nếu bạn đã cài đặt với kubeadm, có các hướng dẫn để giúp bạn
Quản lý Chứng chỉ
và Nâng cấp các cụm kubeadm.
Xem Quản lý một cụm
để biết thêm danh sách các tác vụ quản trị của Kubernetes.
Để tìm hiểu về các tùy chọn có sẵn khi bạn chạy các dịch vụ control plane, xem các trang
kube-apiserver,
kube-controller-manager,
và kube-scheduler.
Đối với các ví dụ về control plane có tính sẵn sàng cao, xem
Các tùy chọn cho kiến trúc có tính Sẵn sàng cao,
Tạo các cụm có tính Sẵn sàng cao với kubeadm,
và Vận hành cụm etcd cho Kubernetes.
Xem Sao lưu cụm etcd
để biến cách tạo kế hoạch sao lưu cho etcd.
Worker node trên production
Workload chất lượng production cần phải có tính đàn hồi và bất kỳ thành phần nào mà chúng phụ thuộc vào cũng phải có tính đàn hồi
(ví dụ CoreDNS). Cho dù bạn tự quản lý control plane hay có một nhà cung cấp cloud làm điều đó cho bạn, bạn vẫn cần phải xem xét
cách bạn muốn quản lý các worker node (còn gọi một cách đơn giản là node).
- Cấu hình các node: Các node có thể là máy vật lý hay máy ảo. Nếu bạn muốn tạo
và quản lý node của riêng bạn, bạn có thể cài đặt một hệ điều hành được hỗ trợ,
sau đó thêm và chạy các dịch vụ Node thích hợp. Xem xét:
- Nhu cầu của workload khi bạn thiết lập các node bằng cách có sẵn bộ nhớ, CPU và tốc độ đĩa và dung lượng lưu trữ phù hợp.
- Liệu các hệ thống máy tính chung sẽ làm hay bạn có workload cần bộ xử lý GPU, node Windows hoặc VM cô lập.
- Xác nhận các node: Xem Thiết lập node hợp lệ
để biết thông tin về cách đảm bảo một node đáp ứng các yêu cầu để tham gia cụm Kubernetes.
- Thêm các node vào cụm: Nếu bạn đang quản lý cụm của riêng mình, bạn có thể
thêm các node bằng cách thiết lập các máy của riêng bạn và thêm chúng theo cách thủ công hoặc
để chúng tự đăng ký với apiserver của cụm. Xem phần Nodes
để biết thông tin về cách thiết lập Kubernetes để thêm các nút theo những cách này.
- Quy mô các node: Sau cùng bạn sẽ cần có một kế hoạch để mở rộng khả năng của cụm.
Xem Các cân nhắc cho những cụm lớn để giúp xác định bạn cần bao nhiêu node,
dựa trên số lượng pod và container bạn cần chạy. Nếu bạn đang tự quản lý các node,
điều này có thể có nghĩa là mua và cài đặt thiết bị vật lý của riêng bạn.
- Autoscale các node: Đọc
Node Autoscaling để tìm hiểu về
các công cụ có sẵn để tự động quản lý các node của bạn và khả năng chúng cung cấp.
- Thiết lập kiểm tra sức khỏe node: Đối với những workload quan trọng, bạn muốn đảm bảo rằng
các node và các pod chạy trên các node đó là khỏe mạnh. Sử dụng
Trình phát hiện vấn đề node,
bạn có thể đảm bảo các node của bạn khỏe mạnh.
Quản lý người dùng trên production
Trên production, bạn có thể chuyển từ một mô hình nơi bạn hoặc một nhóm nhỏ
những người đang truy cập cụm đến nơi có khả năng có hàng tá hoặc
hàng trăm người. Trong môi trường học tập hoặc nền tảng nguyên mẫu, bạn có thể có một
tài khoản quản trị cho mọi thứ bạn làm. Trên production, bạn sẽ muốn
nhiều tài khoản với các cấp độ truy cập khác nhau vào các namespace khác nhau.
Đảm nhận một cụm có chất lượng production nghĩa là quyết định việc bạn muốn làm thế nào
để cho phép người dùng khác truy cập một cách chọn lọc. Đặc biệt, bạn cần
chọn chiến lược để xác minh danh tính những người đang cố truy cập vào cụm của bạn
(xác thực) và quyết định liệu họ có quyền làm những gì họ muốn (phân quyền):
- Xác thực: Apiserver có thể xác thực người dùng bằng chứng chỉ khác, bearer tokens,
một proxy xác thực, hoặc HTTP basic auth.
Bạn có thể chọn phương pháp xác thực bạn muốn. Băng việc sử dụng plugin, apiserver có thể
tận dụng phương thức xác thực hiện có của tổ chức của bạn, ví dụ LDAP hoặc Kerberos. Xem
Xác thực
dể biết mô tả về các phương pháp xác thực người dùng Kubernetes khác nhau.
- Phân quyền: Khi bạn bắt đầu ủy quyền cho người dùng thường xuyên của mình, bạn có lẽ
sẽ chọn giữa phân quyền RBAC và ABAC.
Xem Tổng quan phân quyền
để xem những chế độ phân quyền tài khoản người dùng khác nhau (cũng như quyền truy cập của
service account tới cụm của bạn):
- Kiểm soát truy cập dựa trên vai trò (RBAC): Cho phép
bạn chỉ định quyền truy cập vào cụm bằng cách cho phép thiết lập một tập các quyền tới
người dùng đã xác thực.
Quyền có thể được chỉ định trong một namespace cụ thể (Role) hoặc trong cả cụm (ClusterRole). Sau đó sử dụng RoleBindings và ClusterRoleBindings, những quyền này có thể
được gán tới những người dùng cụ thể.
- Kiểm soát truy cập dựa trên thuộc tính (ABAC): Cho phép bạn
tạo các chính sách dựa trên thuộc tính của tài nguyên trong cụm và sẽ cho phép hoặc
hoặc từ chối truy cập dựa trên những thuộc tính đó. Mỗi dòng trong 1 file chính sách
xác định phiên bản của thuộc tính (apiVersion and kind) và một ánh xạ các thuộc tính
đặc trưng để gán tới một chủ thể (người dùng hoặc nhóm), thuộc tính tài nguyên, thuộc tính
phi tài nguyên (/versions hoặc /apis), và chỉ đọc. Xem
Các ví dụ để biết thêm chi tiết
Với tư cách là người thiết lập xác thực và phân quyền trên cụm Kubernetes production,
dưới đây là một số điều cần cân nhắc:
- Đặt chế độ phân quyền: Khi Kubernetes API server
(kube-apiserver)
khởi động, chế độ hỗ trợ phân quyền phải được thiết lập bằng cờ --authorization-config
file hoặc --authorization-mode. Ví dụ, cờ đó trong kube-adminserver.yaml file
(tại /etc/kubernetes/manifests) có thể được đặt là
Node,RBAC
. Điều này sẽ cho phép
phân quyền Node và RBAC tới những yêu cầu đã xác thực.
- Tạo chứng chỉ người dùng và role bindings (RBAC): Nếu bạn sử dụng phân quyền RBAC,
người dùng có thể tạo một CertificateSigningRequest (CSR) và sẽ được ký bởi CA của cụm.
Sau đó bạn có thể gán Roles và ClusterRoles tới từng người dùng.
Xem Certificate Signing Requests để biết thêm chi tiết.
- Tạo các chính sách kết hợp các thuộc tính (ABAC): Nếu bạn sử dụng phân quyền ABAC,
bạn có thể gán sự kết hợp các thuộc tính thành các chính sách để phân quyền tới
người dùng hoặc nhóm được chọn để họ có thể truy cập tới những tài nguyên cụ thể
(ví dụ pod), namespace, hoặc apiGroup. Để biết thêm thông tin, xem
Các ví dụ.
- Cân nhắc Admission Controllers: Các hình thức phân quyền bổ sung cho các yêu cầu
đến thông qua API server bao gồm
Webhook Token Authentication.
Webhooks và những loại phân quyền đặc biệt khác cần được kích hoạt bằng cách thêm
Admission Controllers
vào API server.
Đặt giới hạn tài nguyên cho workload
Những yêu cầu từ production workload có thể gây ra áp lực lên cả trong và ngoài
Kubernetes control plane. Hãy cân nhắc những mục này khi thiết lập cho
nhu cầu của workload trong cụm của bạn:
- Đặt giới hạn namespace: Đặt từng namespace quotas lên những thứ như bộ nhớ và CPU. Xem
Quản lý Bộ nhớ, CPU, và API Resources
để biết thêm chi tiết.
- Chuẩn bị cho yêu cầu DNS: Nếu bạn mong đợi workloads mở rộng một cách ồ ạt,
dịch vụ DNS của bạn phải săn sàng để mở rộng quy mô. Xem
Autoscale dịch vụ DNS trong cụm.
- Tạo thêm các service account: Tài khoản người dùng (user account) xác định những gì
người dùng có thể thực hiện trên một cụm, trong khi đó một tài khoản dịch vụ (service account)
định nghĩa khả năng truy cập của pod trong một namespace cụ thể. Mặc định, một pod sẽ
tiếp nhận service account
default
từ namespace của nó.
Xem Quản lý Service Account
để biết cách tạo một service account. Ví dụ, bạn có thể muốn:
Tiếp theo là gì
1.1.1 - Cài đặt kubeadm
Trang này hướng dẫn cách cài đặt hộp công cụ kubeadm
.
Để biết thông tin về cách tạo một cụm với Kubeadm sau khi bạn đã thực hiện quy trình cài đặt này,
xem trang Tạo một cụm với kubeadm.
Trang installation guide này dành cho Kubernetes v1.33. Nếu bạn muốn sử dụng phiên bản Kubernetes khác, vui lòng tham khảo các trang sau đây thay vì:
Trước khi bạn bắt đầu
- Một máy chủ Linux tương thích. Dự án Kubernetes cung cấp những hướng dẫn chung cho các bản phân phối Linux
dựa trên Debian và Red Hat, và những bản phân phối không có trình quản lý gói.
- 2 GB RAM hoặc nhiều hơn cho mỗi máy (nếu ít hơn sẽ không đủ tài nguyên cho các ứng dụng của bạn).
- 2 CPU hoặc nhiều hơn cho các máy control plane.
- Kết nối toàn mạng giữa tất cả các máy trong cụm (mạng public hoặc private đều được).
- Mọi máy phải có hostname, địa chỉ MAC, và product_uuid duy nhất. Xem tại đây để biết thêm chi tiết.
- Một số cổng được mở trên máy của bạn. Xem tại đây để biết thêm chi tiết.
Lưu ý:
Việc cài đặt
kubeadm
có thể được thực hiện thông qua các tệp nhị phân sử dụng liên kết động và giả sử hệ thống của bạn cung cấp
glibc
.
Giả định này hợp lý trên nhiều bản phân phối Linux (bao gồm Debian, Ubuntu, Fedora, CentOS, v.v...)
nhưng không phải luôn đúng đối với các bản phân phối nhẹ và tùy biến bởi mặc định chúng không có sẵn
glibc
, ví dụ Alpine Linux.
Kỳ vọng là bản phân phối hoặc bao gồm
glibc
hoặc có một
lớp tương thích
cung cấp các đặc trưng mong muốn.
Kiểm tra phiên bản OS
Lưu ý: Phần này liên kết đến các dự án bên thứ ba cung cấp chức năng được yêu cầu bởi Kubernetes. Tác giả dự án Kubernetes không chịu trách nhiệm về những dự án này, được liệt kê theo thứ tự chữ cái. Để thêm một dự án vào danh sách này, đọc
hướng dẫn nội dung trước khi gửi thay đổi.
Thêm thông tin.
Một cụm Kubernetes được tạo bởi kubeadm phụ thuộc vào phần mềm mà chúng sử dụng các chức năng kernel.
Phần mềm này bao gồm, nhưng không giới hạn ở
container runtime,
kubelet, và một plugin Container Network Interface.
Để giúp bạn tránh những lỗi không mong muốn khi sử dụng một phiên bản kernel không được hỗ trợ, kubeadm chạy kiểm tra pre-flight
SystemVerification
. Quá trình kiểm tra này sẽ lỗi nếu phiên bản kernel không được hỗ trợ.
Bạn có thể chọn bỏ qua kiểm tra, nếu bạn biết rằng kernel của bạn
cung cấp các chức năng cần thiết, kể cả kubeadm không hỗ trợ phiên bản đó.
Xác nhận địa chỉ MAC và product_uuid là duy nhất cho từng node
- Bạn có thể biết được địa chỉ MAC của network interfaces bằng câu lệnh
ip link
hoặc ifconfig -a
- product_uuid có thể kiểm tra bằng câu lệnh
sudo cat /sys/class/dmi/id/product_uuid
Rất có thể các thiết bị phần cứng sẽ có các địa chỉ duy nhất, mặc dù một vài máy ảo có thể có
các giá trị giống hệt nhau. Kubernetes sử dụng những giá trị đó để định danh duy nhất cho các node trong cụm.
Nếu các giá trị đó không là duy nhất cho từng node, quá trình cái đặt
có thể thất bại.
Kiểm tra network adapter
Nếu bạn có nhiều hơn một network adapter, và các thành phần Kubernetes của bạn không thể truy cập trên route
mặc định, chúng tôi khuyên bạn nên bổ sung (các) IP route để các địa chỉ cụm Kubernetes đi qua adpater thích hợp.
Kiểm tra các cổng cần thiết
Những cổng cần thiết
cần phải được mở để các thành phần Kubernetes giao tiếp với nhau.
Bạn có thể sử dụng công cụ như netcat để kiểm tra cổng có được mở hay không. Ví dụ:
nc 127.0.0.1 6443 -zv -w 2
Pod network plugin mà bạn sử dụng cũng có thể yêu cầu mở một số cổng nhất định.
Vì điều này khác nhau đối với từng pod network plugin, vui lòng xem
tài liệu của các plugin về (các) cổng cần thiết.
Cấu hình swap
Mặc định kubelet sẽ không thể khởi động nếu bộ nhớ swap được phát hiện trên một node.
Điều này có nghĩa rằng swap nên hoặc là tắt đi hoặc là được chấp nhận bởi kubelet.
- Để chấp nhận swap, thêm
failSwapOn: false
vào cấu hình kubelet hoặc thông qua tham số dòng lệnh.
Lưu ý: thậm chí nếu failSwapOn: false
được thêm, workload mặc định cũng không có quyền truy cập swap.
Điều này có thể được thay đổi bằng cách đặt swapBehavior
, một lần nữa trong file cấu hình kubelet. Để sử dụng swap,
đặt một swapBehavior
khác với giá trị mặc định NoSwap
.
Xem Quản lý bộ nhớ swap để biết thêm chi tiết.
- Để tắt swap,
sudo swapoff -a
có thể được sử dụng để tắt tạm thời.
Để làm cho thay đổi này duy trì mỗi khi tái khởi động, đảm bảo rằng swap được tắt trong
các file cấu hình như /etc/fstab
, systemd.swap
, phụ thuộc vào việc nó được cấu hình như thế nào trên hệ thống của bạn.
Cài đặt một container runtime
Để chạy các container trong các Pod, Kubernetes sử dụng một
container runtime.
Mặc định, Kubernetes sử dụng
Container Runtime Interface (CRI)
để giao tiếp với container runtime mà bạn chọn.
Nếu bạn không chỉ định một runtime, kubeadm tự động phát hiện một container runtime
đã cài đặt bằng cách quét qua một danh sách những endpoint đã biết.
Nếu có nhiều hoặc không có container runtime nào được phát hiện, kubeadm sẽ ném ra một lỗi
và sẽ yêu cầu bạn chỉ định một thứ bạn muốn sử dụng.
Xem container runtimes
để biết thêm thông tin.
Lưu ý:
Docker Engine không triển khai
CRI,
một thứ bắt buộc của container runtime để hoạt động với Kubernetes.
Vì lí do đó, một dịch vụ bổ sung
cri-dockerd
phải được cài đặt. cri-dockerd là một dự án dựa trên sự hỗ trợ legacy built-in của
Docker Engine mà đã bị
loại bỏ khỏi kubelet trong phiên bản 1.24.
Những bản bên dưới bao gồm những endpoint đã biết của những hệ điều hành được hỗ trợ:
Linux container runtimes
Runtime |
Đường dẫn tới Unix domain socket |
containerd |
unix:///var/run/containerd/containerd.sock |
CRI-O |
unix:///var/run/crio/crio.sock |
Docker Engine (using cri-dockerd) |
unix:///var/run/cri-dockerd.sock |
Windows container runtimes
Runtime |
Đường dẫn tới Windows named pipe |
containerd |
npipe:////./pipe/containerd-containerd |
Docker Engine (using cri-dockerd) |
npipe:////./pipe/cri-dockerd |
Cài đặt kubeadm, kubelet và kubectl
Bạn sẽ cài đặt các package này trên toàn bộ máy chủ của bạn:
-
kubeadm
: lệnh khởi tạo cụm.
-
kubelet
: thành phần chạy trên toàn bộ các máy trong cụm của bạn
và làm những việc như khởi chạy pod và container.
-
kubectl
: tiện ích dòng lệnh để giao tiếp với cụm.
kubeadm sẽ không cài đặt hoặc quản lý kubelet
và kubectl
cho bạn, vì vậy bạn sẽ
cần phải đảm bảo rằng phiên bản của chúng giống với Kubernetes control plane bạn muốn
kubeadm cài cho bạn. Nếu bạn không làm vậu, rủi ro về sự chênh lệch phiên bản có thể xảy ra và
dẫn tới những hành vi lỗi, không mong muốn. Tuy nhiên, chênh lệch một phiên bản minor giữa
kubelet và control plane được chấp nhận, nhưng phiên bản kubelet không bao giờ vượt quá phiên bản API
server. Ví dụ, kubelet đang chạy 1.7.0 có thể tương thích hoàn toàn với API server phiên bản 1.8.0,
nhưng không có chiều ngược lại.
Để biết cách cài đặt kubectl
, xem Cài đặt và thiết lập kubectl.
Cảnh báo:
Những hướng dẫn này loại trừ tất cả các package của Kubernetes khỏi mọi sự nâng cấp hệ thống.
Bởi vì kubeadm và Kubernetes yêu cầu
đặc biệt chú ý khi nâng cấp.
Để biết thêm thông tin về chênh lệch phiên bản, xem:
Lưu ý: Các kho lưu trữ gói cũ (
apt.kubernetes.io
và
yum.kubernetes.io
) đã bị
lỗi thời và đóng băng từ ngày 13 tháng 9, 2023.
Sử dụng các kho lưu trữ mới được đặt tại pkgs.k8s.io
được khuyến nghị mạnh mẽ và yêu cầu để cài đặt các phiên bản Kubernetes phát hành sau ngày 13 tháng 9, 2023.
Các kho cũ đã lỗi thời, và nội dung của chúng, có thể bị xóa bất kỳ lúc nào trong tương lai và mà không có
thêm thông báo. Các kho lưu trữ mới cung cấp tải về cho các phiên bản Kubernetes bắt đầu từ v1.24.0.
Lưu ý:
Có một kho lưu trữ package chuyên dụng cho từng phiên bản minor của Kubernetes. Nếu bạn muốn cài đặt
một phiên bản minor khác v1.33, vui lòng xem hướng dẫn cài đặt cho
phiên bản minior bạn mong muốn.
Hướng dẫn này dành cho Kubernetes v1.33.
-
Cập nhật apt
package index và cài đặt các package cần thiết để sử dụng kho lưu trữ apt
của Kubernetes:
sudo apt-get update
# apt-transport-https có thể là một package giả; nếu vậy, bạn có thể bỏ qua package này
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
-
Tải xuống khóa ký công khai cho các kho lưu trữ package của Kubernetes.
Toàn bộ các kho lưu trữ sử dụng chung khóa ký do vậy bạn có thể không cần quan tâm tới phiên bản trong URL:
# Nếu thư mục `/etc/apt/keyrings` không tồn tại, nó nên được tạo trước lệnh curl, đọc chú thích bên dưới.
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Lưu ý:
Trong những bản phát hành cũ hơn Debian 12 và Ubuntu 22.04, thư mục /etc/apt/keyrings
mặc định không
tồn tại, và nó nên được tạo trước lệnh curl.
-
Thêm kho lưu trữ apt
Kubernetes thích hợp. Vui lòng chú ý rằng kho lưu trữ này chỉ chứa những package
cho Kubernetes 1.33; đối với các phiên bản Kubernetes minor khác, bạn cần phải
thay đổi phiên bản Kubernetes minor trong URL để trùng với phiên bản minor bạn mong muốn
(bạn cũng nên kiểm tra lại rằng bạn đang đọc tài liệu cho phiên bản Kubernetes
mà bạn dự định cài đặt).
# Điều này sẽ ghi đè bất kỳ những cấu hình nào đang có trong /etc/apt/sources.list.d/kubernetes.list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
Cập nhật apt
package index, cài đặt kubelet, kubeadm và kubectl, và ghim lại phiên bản của chúng:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
-
(Tùy chọn) Bật dịch vụ kubelet trước khi chạy kubeadm:
sudo systemctl enable --now kubelet
-
Đặt SELinux thành chế độ permissive
:
Những hướng dẫn này dành cho Kubernetes 1.33.
# Đặt SELinux trong chế độ permissive (vô hiệu hóa nó một cách hiệu quả)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Chú ý:
- Đặt SELinux trong chế độ permissive bằng cách chạy
setenforce 0
và sed ...
vô hiệu hóa nó một cách hiệu quả. Điều này là bắt buộc để cho phép các container truy cập vào hệ thống file
của máy chủ; ví dụ, một vài network plugin của cụm yêu cầu điều này. Bạn phải
làm điều này cho đến khi sự hỗ trợ SELinux được cải thiện trong kubelet.
- Bạn có thể để SELinux bật nếu bạn biết cách cấu hình nó nhưng điều đó có thể yêu cầu
các thiết lập không được hỗ trợ bởi kubeadm.
-
Thêm kho lưu trữ yum
của Kubernetes. Tham số exclude
trong
định nghĩa kho lưu trữ đảm bảo rằng các package liên quan tới Kubernetes
không được nâng cấp bởi việc chạy yum update
vì có một quy trình đặc biệt cần
tuân theo để nâng cấp Kubernetes. Vui lòng chú ý rằng kho lưu trữ này
chỉ có các package cho Kubernetes 1.33; đối với
những phiên bản Kubernetes minor khác, bạn cần phải
thay đổi phiên bản Kubernetes minor trong URL để trùng với phiên bản minor bạn mong muốn
(bạn cũng nên kiểm tra lại rằng bạn đang đọc tài liệu cho phiên bản Kubernetes
mà bạn dự định cài đặt).
# Điều này sẽ ghi đè bất kỳ những cấu hình nào đang có trong /etc/yum.repos.d/kubernetes.repo
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
-
Cài đặt kubelet, kubeadm và kubectl:
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
-
(Tùy chọn) Bật dịch vụ kubelet trước khi chạy kubeadm:
sudo systemctl enable --now kubelet
Cài đặt CNI plugin (yêu cầu đối với hầu hết pod network):
CNI_PLUGINS_VERSION="v1.3.0"
ARCH="amd64"
DEST="/opt/cni/bin"
sudo mkdir -p "$DEST"
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${ARCH}-${CNI_PLUGINS_VERSION}.tgz" | sudo tar -C "$DEST" -xz
Tạo thư mục để tải xuống file lệnh:
Lưu ý:
Biến DOWNLOAD_DIR
phải được đặt tới một thư mục có thể ghi.
Nếu bạn đang chạy Flatcar Container Linux, đặt DOWNLOAD_DIR="/opt/bin"
.
DOWNLOAD_DIR="/usr/local/bin"
sudo mkdir -p "$DOWNLOAD_DIR"
Tùy chọn cài đặt crictl (yêu cầu khi tương tác với Container Runtime Interface (CRI), không bắt buộc cho kubeadm):
CRICTL_VERSION="v1.31.0"
ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
Cài đặt kubeadm
, kubelet
và thêm systemd service cho kubelet
:
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
ARCH="amd64"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet}
sudo chmod +x {kubeadm,kubelet}
RELEASE_VERSION="v0.16.2"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubelet/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service
sudo mkdir -p /usr/lib/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Lưu ý:
Vui lòng tham khảo ghi chú trong phần
Trước khi bạn bắt đầu cho các bản phân phối Linux
mà mặc định không có
glibc
.
Cài đặt kubectl
bằng cách làm theo các hướng dẫn trên trang Cài đặt các công cụ.
Một cách tùy chọn, bật dịch vụ kubelet trước khi chạy kubeadm:
sudo systemctl enable --now kubelet
Lưu ý:
Bản phân phối Linux Flatcar Container gắn thư mục
/usr
thành một hệ thống file chỉ đọc.
Xem
hướng dẫn Khắc phục sự cố Kubeadm
để biết cách thiết lập một thư mục có thể ghi.
Bây giờ kubelet khởi động sau mỗi vài giây, vì nó đợi trong vòng lặp crashloop chờ
kubeadm bảo nó phải làm gì.
Cấu hình cgroup driver
Cả container runtime và kubelet có một thuộc tính gọi là
"cgroup driver", cái mà quan trọng
cho việc quản lý các cgroup trên các máy Linux.
Cảnh báo:
Hợp nhất các cgroup driver của container runtime và kubelet là bắt buộc hoặc nếu không thì tiến trình kubelet sẽ lỗi.
Xem Cấu hình cgroup driver để biết thêm chi tiết.
Khắc phục sự cố
Nếu bạn đang gặp các khó khăn với kubeadm, vui lòng tham khảo
tài liệu khắc phục sự cố của chúng tôi.
Tiếp theo là gì
1.1.2 - Thiết lập một cụm etcd có tính Sẵn sàng cao (High Availability) với kubeadm
Mặc định, kubeadm chạy một instance etcd cục bộ trên từng node control plane.
Bạn cũng có thể thiết lập cụm etcd bên ngoài và cung cấp các etcd instance trên
các máy chủ riêng biệt. Những sự khác biệt giữa hai cách tiếp cận này được trình bày
trong trang
Các tùy chọn cho kiến trúc có tính Sẵn sàng cao.
Tác vụ này hướng dẫn quy trình tạo một cụm etcd bên ngoài có tính sẵn sàng cao gồm
ba member mà kubeadm có thể sử dụng trong quá trình tạo cụm.
Trước khi bạn bắt đầu
- Ba máy chủ có thể giao tiếp với nhau qua cổng TCP 2379 và 2380.
Tài liệu này giả định các cổng mặc định này. Tuy nhiên, chúng có thể được cấu hình
thông qua tệp cấu hình kubeadm.
- Mỗi máy chủ phải có systemd và đã cài đặt một shell tương thích với bash.
- Mỗi máy chủ phải
đã cài đặt một container runtime, kubelet, và kubeadm.
- Mỗi máy chủ phải có quyền truy cập vào Kubernetes container image registry (
registry.k8s.io
)
hoặc list/pull image etcd cần thiết bằng lệnh kubeadm config images list/pull
. Hướng dẫn này
sẽ cài đặt các etcd instance dạng
static pods được quản lý bởi kubelet.
- Một số công cụ để sao chép các file giữa các máy chủ. Ví dụ
ssh
và scp
có thể đáp ứng yêu cầu này.
Thiết lập cụm
Cách tiếp cận thông thường là tạo ra toàn bộ chứng chỉ trên một node và chỉ phân bổ
những file quan trọng tới các node khác.
Lưu ý:
kubeadm chứa tất cả các công cụ mã hóa cần thiết để tạo ra
các chứng chỉ được đề cập bên dưới; không cần các công cụ mã hóa nào khác cho ví dụ này.
Lưu ý:
Ví dụ bên dưới sử dụng dịa chỉ IPv4 nhưng bạn cũng có thể cấu hình kubeadm, kubelet và etcd
sử dụng địa chỉ IPv6. Dual-stack được hỗ trợ bởi một vài tùy chọn của Kubernetes, nhưng
không được etcd hỗ trợ. Xem thêm chi tiết về Kubernetes hỗ trợ dual-stack tại
Hỗ trợ Dual-stack với kubeadm.
-
Cấu hình kubelet để trở thành trình quản lý dịch vụ cho etcd.
Lưu ý:
Bạn phải thực hiện điều này trên toàn bộ các máy chủ chạy etcd.
Vì etcd sẽ được tạo ra trước tiên, bạn phải ghi đè độ ưu tiên dịch vụ bằng cách tạo ra một
unit file mới có độ ưu tiên cao hơn kubelet unit file mà kubeadm cung cấp.
cat << EOF > /etc/systemd/system/kubelet.service.d/kubelet.conf
# Thay thế "systemd" bằng giá trị cgroup driver của container runtime của bạn. Giá trị mặc định trong kubelet là "cgroupfs".
# Thay thế giá trị của "containerRuntimeEndpoint" bằng một container runtime khác nếu cần.
#
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:
anonymous:
enabled: false
webhook:
enabled: false
authorization:
mode: AlwaysAllow
cgroupDriver: systemd
address: 127.0.0.1
containerRuntimeEndpoint: unix:///var/run/containerd/containerd.sock
staticPodPath: /etc/kubernetes/manifests
EOF
cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --config=/etc/systemd/system/kubelet.service.d/kubelet.conf
Restart=always
EOF
systemctl daemon-reload
systemctl restart kubelet
Kiểm tra trạng thái kubelet để chắc chắn rằng nó đang chạy.
-
Tạo các file cấu hình cho kubeadm.
Tạo một file cấu hình kubeadm cho từng máy chủ mà có etcd member chạy trên đó
sử dụng tập lệnh dưới đây.
# Thay đổi HOST0, HOST1 và HOST2 với các IP của các máy của bạn
export HOST0=10.0.0.6
export HOST1=10.0.0.7
export HOST2=10.0.0.8
# Thay đổi NAME0, NAME1 và NAME2 bằng hostnames của các máy của bạn
export NAME0="infra0"
export NAME1="infra1"
export NAME2="infra2"
# Tạo các thư mục tạm thời để lưu các file sẽ xuất hỉện trên các máy khác
mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/
HOSTS=(${HOST0} ${HOST1} ${HOST2})
NAMES=(${NAME0} ${NAME1} ${NAME2})
for i in "${!HOSTS[@]}"; do
HOST=${HOSTS[$i]}
NAME=${NAMES[$i]}
cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: InitConfiguration
nodeRegistration:
name: ${NAME}
localAPIEndpoint:
advertiseAddress: ${HOST}
---
apiVersion: "kubeadm.k8s.io/v1beta4"
kind: ClusterConfiguration
etcd:
local:
serverCertSANs:
- "${HOST}"
peerCertSANs:
- "${HOST}"
extraArgs:
- name: initial-cluster
value: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380
- name: initial-cluster-state
value: new
- name: name
value: ${NAME}
- name: listen-peer-urls
value: https://${HOST}:2380
- name: listen-client-urls
value: https://${HOST}:2379
- name: advertise-client-urls
value: https://${HOST}:2379
- name: initial-advertise-peer-urls
value: https://${HOST}:2380
EOF
done
-
Tạo cơ quan cấp chứng chỉ (CA).
Nếu bạn đã có một CA, việc tiếp theo chỉ cần sao chép các file crt
và
key
của CA tới /etc/kubernetes/pki/etcd/ca.crt
và
/etc/kubernetes/pki/etcd/ca.key
. Sau khi các file đó được sao chép,
tiến hành các bước tiếp theo, "Tạo các chứng chỉ cho từng member member".
Nếu bạn chưa có CA nào, hãy chạy câu lệnh này trên $HOST0
(nơi bạn
tạo các file cấu hình cho kubeadm).
kubeadm init phase certs etcd-ca
Nó sẽ tạo ra hai file:
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
-
Tạo các chứng chỉ cho từng member member.
kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST2}/
# Dọn dẹp các chứng chỉ không sử dụng
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
cp -R /etc/kubernetes/pki /tmp/${HOST1}/
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
# Không cần phải di chuyển các chứng chỉ vì chúng dành cho HOST0
# Dọn dẹp các chứng chỉ không nên sao chép khỏi máy chủ này
find /tmp/${HOST2} -name ca.key -type f -delete
find /tmp/${HOST1} -name ca.key -type f -delete
-
Sao chép các chứng chỉ và các cấu hình kubeadm.
Các chứng chỉ này đã được tạo ra và bây giờ chúng cần được đưa tới từng máy chủ
tương ứng.
USER=ubuntu
HOST=${HOST1}
scp -r /tmp/${HOST}/* ${USER}@${HOST}:
ssh ${USER}@${HOST}
USER@HOST $ sudo -Es
root@HOST $ chown -R root:root pki
root@HOST $ mv pki /etc/kubernetes/
-
Đảm bảo đã có đủ toàn bộ các file cần thiết.
Danh sách đầy đủ các file cần thiết trên $HOST0
gồm:
/tmp/${HOST0}
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.keyt
└── etcd
├── ca.crt
├── ca.key
├── healthcheck-client.crt
├── healthcheck-client.key
├── peer.crt
├── peer.key
├── server.crt
└── server.key
Trên $HOST1
:
$HOME
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
├── ca.crt
├── healthcheck-client.crt
├── healthcheck-client.key
├── peer.crt
├── peer.key
├── server.crt
└── server.key
Trên $HOST2
:
$HOME
└── kubeadmcfg.yaml
---
/etc/kubernetes/pki
├── apiserver-etcd-client.crt
├── apiserver-etcd-client.key
└── etcd
├── ca.crt
├── healthcheck-client.crt
├── healthcheck-client.key
├── peer.crt
├── peer.key
├── server.crt
└── server.key
-
Tạo các manifest cho static pod.
Bây giờ các chứng chỉ và cấu hình đã có, đã đến lúc tạo các manifest.
Trên mỗi máy chủ, hãy chạy lệnh kubeadm
để tạo static manifest
cho etcd.
root@HOST0 $ kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml
root@HOST1 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
root@HOST2 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
-
Tùy chọn: Kiểm tra sức khỏe cụm.
Nếu etcdctl
không có sẵn, bạn có thể chạy công cụ này trong một container image.
Bạn sẽ thực hiện điều đó trực tiếp với container runtime của mình bằng cách sử dụng
một công cụ như crictl run
và không thông qua Kubernetes.
ETCDCTL_API=3 etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://${HOST0}:2379 endpoint health
...
https://[HOST0 IP]:2379 is healthy: successfully committed proposal: took = 16.283339ms
https://[HOST1 IP]:2379 is healthy: successfully committed proposal: took = 19.44402ms
https://[HOST2 IP]:2379 is healthy: successfully committed proposal: took = 35.926451ms
- Đặt
${HOST0}
bằng địa chỉ IP của máy chủ bạn đang kiểm tra.
Tiếp theo là gì
Một khi bạn đã có một cụm etcd với 3 member đang chạy, bạn có thể tiếp tục thiết lập
một control plane có tính sẵn sàng cao bằng
phương pháp etcd bên ngoài với kubeadm.