Logo Zephyrnet

Hướng dẫn Toàn diện về Kubernetes

Ngày:


Giới thiệu

Hôm nay, Trong hướng dẫn này, chúng ta sẽ đi sâu vào tìm hiểu về Kubernetes và sử dụng nó để triển khai và quản lý các vùng chứa trên quy mô lớn.

Kiến trúc vùng chứa và microservice đã sử dụng nhiều hơn để tạo ra các ứng dụng hiện đại. Kubernetes là phần mềm mã nguồn mở cho phép bạn triển khai và quản lý các vùng chứa trên quy mô lớn. Nó chia các vùng chứa thành các phần hợp lý để giúp quản lý, khám phá và mở rộng ứng dụng của bạn dễ dàng hơn.

Mục tiêu chính của hướng dẫn này là cung cấp một cái nhìn tổng quan đầy đủ về hệ sinh thái Kubernetes trong khi vẫn giữ cho nó cơ bản và đơn giản. Nó bao gồm các ý tưởng cốt lõi của Kubernetes trước khi áp dụng chúng vào một kịch bản trong thế giới thực.

Ngay cả khi bạn chưa có kinh nghiệm trước với Kubernetes, bài viết này sẽ là điểm khởi đầu tuyệt vời cho cuộc hành trình của bạn.

Vì vậy, không cần phải lo lắng gì thêm, hãy bắt đầu việc học này.

Tại sao Kubernetes?

Trước khi đi vào các ý tưởng kỹ thuật, chúng ta hãy bắt đầu với lý do tại sao một nhà phát triển nên sử dụng Kubernetes ngay từ đầu. Dưới đây là một vài lý do tại sao các nhà phát triển nên sử dụng Kubernetes trong các dự án của họ.

Tính di động

Khi sử dụng Kubernetes, việc chuyển các ứng dụng chứa trong container từ phát triển sang sản xuất dường như là một quá trình dễ dàng. Kubernetes cho phép các nhà phát triển sắp xếp các vùng chứa trong nhiều môi trường khác nhau, bao gồm cơ sở hạ tầng tại chỗ, các đám mây công cộng và kết hợp.

khả năng mở rộng

Kubernetes đơn giản hóa quá trình xác định các ứng dụng phức tạp trong vùng chứa và triển khai chúng trên toàn cầu trên nhiều cụm máy chủ bằng cách giảm tài nguyên dựa trên trạng thái mong muốn của bạn. Kubernetes tự động kiểm tra và duy trì tình trạng của vùng chứa khi mở rộng các ứng dụng theo chiều ngang.

Khả năng mở rộng

Kubernetes có một bộ sưu tập lớn và ngày càng mở rộng các tiện ích mở rộng và plugin được tạo bởi các nhà phát triển và doanh nghiệp, giúp đơn giản hóa việc thêm các khả năng độc đáo vào các cụm của bạn như bảo mật, giám sát hoặc quản lý.

Các khái niệm

Việc sử dụng Kubernetes đòi hỏi bạn phải hiểu về các yếu tố trừu tượng khác nhau mà nó sử dụng để biểu thị trạng thái của hệ thống. Đó là trọng tâm của phần này. Chúng tôi làm quen với các khái niệm thiết yếu và cung cấp cho bạn bức tranh rõ ràng hơn về kiến ​​trúc tổng thể.

pods

Pod là tập hợp nhiều vùng chứa ứng dụng chia sẻ dung lượng lưu trữ, địa chỉ IP cụm duy nhất và hướng dẫn chạy chúng (ví dụ: cổng, khởi động lại, hình ảnh vùng chứa và chính sách lỗi).

Chúng là nền tảng của nền tảng Kubernetes. Trong khi tạo dịch vụ hoặc triển khai, Kubernetes tạo một Pod với vùng chứa bên trong.

Mỗi nhóm chạy trên nút nơi nó được lên lịch và vẫn ở đó cho đến khi nó bị kết thúc hoặc bị xóa. Nếu nút bị lỗi hoặc dừng, Kubernetes sẽ tự động lập lịch các Nhóm giống hệt nhau trên các Nút có sẵn khác của cụm.

Các khái niệm | Hướng dẫn trên Kubernetes
Hình ảnh-2

Node

Một nút là một máy công nhân trong một cụm Kubernetes có thể là ảo hoặc vật lý tùy thuộc vào loại cụm. Master phụ trách từng nút. Chủ lập lịch không tự nguyện cho các nhóm trên tất cả các nút trong cụm, dựa trên các tài nguyên có sẵn và cấu hình hiện tại của chúng.

Mỗi nút được yêu cầu để chạy ít nhất hai dịch vụ:

  • Kubelet là một quá trình giao tiếp giữa chủ Kubernetes và nút.
  • Thời gian chạy vùng chứa chịu trách nhiệm tải xuống và chạy hình ảnh vùng chứa (Ví dụ: Docker)
Node
Hình ảnh-3

DỊCH VỤ

Dịch vụ là một phần trừu tượng mô tả một tập hợp các Nhóm hợp lý và các chính sách để truy cập chúng. Các dịch vụ cho phép khớp nối lỏng lẻo của các Pod phụ thuộc.

Mặc dù mỗi nhóm có một Địa chỉ IP riêng biệt, những địa chỉ đó sẽ không hiển thị với thế giới bên ngoài. Do đó, một dịch vụ cho phép triển khai của bạn nhận được lưu lượng truy cập từ các nguồn bên ngoài.

Chúng tôi có thể giới thiệu các dịch vụ theo nhiều cách khác nhau:

  • ClusterIP (tiêu chuẩn) - Chỉ để cổng vào bên trong của cụm.
  • NodePort - Sử dụng NAT để hiển thị dịch vụ trên cùng một cổng trên mọi nút trong cụm
  • Loadbalancer - Tạo một bộ cân bằng tải bên ngoài để xuất dịch vụ sang một Địa chỉ IP được chỉ định.
Hướng dẫn trên Kubernetes
Hình ảnh-4

Triển khai

Các triển khai bao gồm mô tả về trạng thái mong muốn của ứng dụng của bạn. Bộ điều khiển triển khai sẽ xử lý để đảm bảo rằng trạng thái hiện tại của ứng dụng khớp với mô tả đó.

Việc triển khai tự động chạy nhiều bản sao của chương trình của bạn và thay thế bất kỳ trường hợp nào bị lỗi hoặc không phản hồi. Việc triển khai giúp biết rằng chương trình của bạn đã sẵn sàng phục vụ các yêu cầu của người dùng theo cách này.

Triển khai
Hình ảnh-5

của DINTEK

Trước khi bắt đầu xây dựng cụm của mình, trước tiên chúng ta phải cài đặt Kubernetes trên máy trạm cục bộ của mình.

Máy tính để bàn Docker

Nếu bạn đang sử dụng màn hình Docker trên Windows hoặc Mac, bạn có thể cài đặt Kubernetes trực tiếp từ ngăn cài đặt của giao diện người dùng.

Khác

Nếu bạn không sử dụng màn hình Docker, tôi khuyên bạn nên làm theo cài đặt chính thức thủ tục cho Kubectl và Minikube.

Khái niệm cơ bản

Bây giờ chúng ta đã đề cập đến những ý tưởng cơ bản. Hãy chuyển sang khía cạnh thực tế của Kubernetes. Chương này sẽ hướng dẫn bạn các nguyên tắc cơ bản cần thiết để triển khai ứng dụng trong một cụm.

Tạo cụm

Khi bạn khởi chạy Minikube, nó ngay lập tức tạo thành một cụm.

khởi động minikube

Sau khi cài đặt, màn hình nền Docker cũng sẽ tự động tạo một cụm. Bạn có thể sử dụng các lệnh sau để xem liệu cụm của bạn có đang hoạt động hay không:

# Nhận thông tin về cluster kubectl cluster-info # Nhận tất cả các nút của cluster kubectl get node

Triển khai một ứng dụng:

Bây giờ chúng tôi đã hoàn thành cài đặt và thiết lập cụm đầu tiên của mình, chúng tôi đã sẵn sàng triển khai một ứng dụng cho Kubernetes.

kubectl create deployment nginx --image=nginx:latest

Chúng tôi sử dụng lệnh tạo triển khai, chuyển đầu vào là tên triển khai và hình ảnh vùng chứa. Ví dụ này triển khai Nginx với một vùng chứa và một bản sao.

Sử dụng lệnh nhận triển khai, bạn có thể xem các triển khai đang hoạt động của mình.

kubectl get deployments

Thông tin về việc triển khai

Dưới đây là một số lệnh bạn có thể sử dụng để tìm hiểu thêm về các triển khai và nhóm Kubernetes của mình.

Lấy tất cả các vỏ

Sử dụng lệnh kubectl get pods, bạn có thể nhận được danh sách tất cả các nhóm đang chạy:

kubectl get pods

Mô tả chi tiết về một nhóm

Sử dụng lệnh mô tả để có thêm thông tin chi tiết về một nhóm.

kubectl describe pods

Nhật ký của một nhóm

Dữ liệu mà ứng dụng của bạn sẽ truyền tới STDOUT trở thành nhật ký vùng chứa. Lệnh sau sẽ cung cấp cho bạn quyền truy cập vào các nhật ký đó.

kubectl logs $POD_NAME

Lưu ý: Bạn có thể tìm ra tên của nhóm của mình bằng cách sử dụng các nhóm nhận hoặc các lệnh mô tả nhóm.

Thực thi lệnh trong Vùng chứa

Lệnh kubectl execute, lấy tên nhóm và thuật ngữ để chạy làm đối số, cho phép chúng tôi thực hiện các lệnh trực tiếp trong vùng chứa của chúng tôi.

kubectl exec $POD_NAME command

Hãy xem một ví dụ nơi chúng ta bắt đầu một thiết bị đầu cuối bash trong vùng chứa để xem ý tôi là gì.

kubectl exec -it $POD_NAME bash

Hiển thị ứng dụng công khai

Một dịch vụ, như đã nói trước đây, thiết lập một chính sách mà việc triển khai có thể truy cập được. Chúng tôi sẽ xem xét cách đạt được điều này trong phần này và các giải pháp thay thế khác mà bạn có khi giới thiệu dịch vụ của mình với công chúng.

Phát triển một dịch vụ:

Chúng ta có thể xây dựng một dịch vụ bằng lệnh create-service, lệnh này lấy cổng mà chúng ta muốn hiển thị và loại cổng làm tham số.

kubectl create service nodeport nginx --tcp=80:80

Nó sẽ tạo dịch vụ cho việc triển khai Nginx của chúng tôi và hiển thị cổng 80 của vùng chứa của chúng tôi thành một cổng trên máy tính chủ của chúng tôi.

Trên hệ thống máy chủ, sử dụng lệnh kubectl get services để lấy cổng:

Bộ dữ liệu
Hình ảnh của Tác giả

Như bạn có thể thấy, cổng 80 của vùng chứa đã được chuyển đến cổng 31041 của máy chủ của tôi. Khi bạn có cổng, bạn có thể kiểm tra việc triển khai của mình bằng cách truy cập vào máy chủ cục bộ của bạn trên cổng đó.

Xóa dịch vụ

Lệnh xóa dịch vụ cũng có thể được sử dụng để xóa các dịch vụ hiện có.

kubectl delete service nginx

Mở rộng quy mô ứng dụng

Mở rộng ứng dụng của bạn lên và xuống thật dễ dàng với Kubernetes. Bằng cách sử dụng lệnh này, bạn có thể thay đổi số lượng bản sao và Kubernetes sẽ tạo và duy trì mọi thứ cho bạn.

kubectl scale deployments/nginx --replicas=5

Lệnh này sẽ sao chép dịch vụ Nginx của chúng tôi lên tối đa năm bản sao.

Cách triển khai ứng dụng này hoạt động tốt cho các ứng dụng một vùng chứa nhỏ nhưng thiếu tổng quan và khả năng tái sử dụng cần thiết cho các ứng dụng lớn hơn. Tệp YAML rất hữu ích trong tình huống này.

Tệp YAML cho phép bạn chỉ định triển khai, dịch vụ và nhóm của mình bằng ngôn ngữ đánh dấu, giúp chúng có thể tái sử dụng và mở rộng hơn. Các chương sau sẽ trình bày chi tiết về các tệp Yaml.

Đối tượng Kubernetes trong YAML

Mọi đối tượng trong Kubernetes đã được biểu thị dưới dạng một đối tượng YAML khai báo chỉ định những gì và cách nó sẽ chạy. Các tệp này đã được sử dụng thường xuyên để thúc đẩy khả năng tái sử dụng của các cấu hình tài nguyên như triển khai, dịch vụ và khối lượng, trong số những tệp khác.

Phần này sẽ hướng dẫn bạn các nguyên tắc cơ bản của YAML và cách lấy danh sách tất cả các tham số và đặc điểm có sẵn cho một đối tượng Kubernetes. Chúng tôi xem qua các tệp triển khai và dịch vụ để hiểu cú pháp và cách nó đã được triển khai.

Các thông số của các đối tượng khác nhau

Có rất nhiều đối tượng Kubernetes, và rất khó để nhớ mọi cài đặt. Đó là nơi xuất hiện lệnh giải thích.

Bạn cũng có thể lấy tài liệu cho một trường cụ thể bằng cách sử dụng cú pháp:

kubectl explain deployment.spec.replicas

Tệp triển khai

Để dễ dàng sử dụng lại và có thể thay đổi, các triển khai phức tạp hơn thường được viết bằng YAML.

Cấu trúc tệp cơ bản như sau:

apiVersion: apps / v1 kind: Siêu dữ liệu triển khai: # Tên và nhãn của tên triển khai của bạn: mongodb-deploy label: app: mongo spec: # Bạn muốn có bao nhiêu bản sao của mỗi nhóm: 3 # Nhóm nào được quản lý bởi cái này bộ chọn triển khai: matchLabels: app: mongo # Cấu hình pod thông thường / Xác định vùng chứa, khối lượng và mẫu biến môi trường: siêu dữ liệu: # gắn nhãn các nhãn nhóm: app: mongo spec: container: - name: mongo image: mongo: 4.2 cổng: - containerPort : 27017

Có một số phần quan trọng trong tệp YAML:

  • apiVersion - Chỉ định phiên bản API.
  • loại - Loại đối tượng Kubernetes được xác định trong tệp (ví dụ: triển khai, dịch vụ, khối lượng liên tục,…)
  • siêu dữ liệu - Mô tả về thành phần YAML của bạn bao gồm tên, nhãn và thông tin khác của thành phần.
  • spec - Chỉ định các thuộc tính triển khai của bạn, chẳng hạn như các bản sao và các ràng buộc tài nguyên.
  • mẫu - Cấu hình nhóm của tệp triển khai.

Bây giờ bạn đã hiểu định dạng cơ bản, bạn có thể sử dụng lệnh áp dụng để triển khai tệp.

Tệp dịch vụ

Tệp dịch vụ được cấu trúc tương tự như triển khai, với các tham số khác nhau một chút.

apiVersion: v1 loại: Siêu dữ liệu dịch vụ: tên: mongo spec: bộ chọn: ứng dụng: mongo các cổng: - cổng: 27017 targetPort: 27017 loại: LoadBalancer

Kho

Khi vùng chứa khởi động lại hoặc xóa nhóm, toàn bộ hệ thống tệp của nó sẽ bị xóa. Đó là một dấu hiệu tốt vì nó giúp ứng dụng không trạng thái của bạn không bị tắc nghẽn với dữ liệu không cần thiết. Trong các trường hợp khác, việc duy trì dữ liệu hệ thống tệp của bạn là rất quan trọng đối với ứng dụng của bạn.

Có một số loại bộ nhớ có sẵn:

  • Hệ thống tệp vùng chứa lưu trữ dữ liệu của một vùng chứa duy nhất cho đến khi tồn tại.
  • Khối lượng cho phép bạn lưu dữ liệu và chia sẻ nó giữa các vùng chứa miễn là nhóm đang hoạt động.
  • Dữ liệu đã được lưu ngay cả khi nhóm bị xóa hoặc khởi động lại bằng các ổ đĩa liên tục. Chúng là bộ nhớ lâu dài của cụm Kubernetes của bạn.

Volumes

Khối lượng cho phép bạn lưu, trao đổi và bảo quản dữ liệu giữa nhiều vùng chứa trong suốt nhóm. Sẽ rất hữu ích nếu bạn có các nhóm với nhiều vùng chứa giao tiếp dữ liệu.

Trong Kubernetes, có hai giai đoạn để sử dụng một tập:

  • Khối lượng đã được xác định bởi nhóm.
  • Vùng chứa sử dụng gắn kết khối lượng để thêm khối lượng vào một đường dẫn hệ thống tệp nhất định.

Bạn có thể thêm một tập vào nhóm của mình bằng cách sử dụng cú pháp:

apiVersion: v1 kind: Pod metadata: name: nginx spec: container: - name: nginx image: nginx volumeMounts: - name: nginx-storage mountPath: / etc / nginx volume: - name: nginx-storage blankDir: {}

Ở đây, thẻ volume được sử dụng để cung cấp một volume được gắn vào một thư mục cụ thể của hệ thống tệp vùng chứa (trong trường hợp này là / etc / nginx).

Số lượng liên tục

Chúng gần giống với các tập thông thường, với dữ liệu khác biệt duy nhất được bảo toàn ngay cả khi nhóm bị xóa. Đó là lý do tại sao chúng được sử dụng cho các nhu cầu lưu trữ dữ liệu dài hạn, chẳng hạn như cơ sở dữ liệu.

Đối tượng Yêu cầu Khối lượng Liên tục (PVC), kết nối với các khối lượng lưu trữ phụ trợ thông qua một loạt các phần trừu tượng, là cách điển hình nhất để xác định một khối lượng liên tục.

Ví dụ về tệp cấu hình YAML.

apiVersion: v1 kind: PersentlyVolumeClaim siêu dữ liệu: tên: nhãn pv-yêu cầu: ứng dụng: sampleAppName spec: accessModes: - Tài nguyên ReadWriteOnce: yêu cầu: lưu trữ: 20Gi

Có nhiều tùy chọn hơn để lưu dữ liệu của bạn trong Kubernetes và bạn có thể tự động hóa càng nhiều quy trình càng tốt. Dưới đây là danh sách một vài chủ đề thú vị cần xem xét.

Tài nguyên tính toán

Khi xem xét điều phối vùng chứa, việc quản lý tính toán tài nguyên cho vùng chứa và ứng dụng của bạn là rất quan trọng.

Khi vùng chứa của bạn có một số lượng tài nguyên nhất định, bộ lập lịch có thể đưa ra quyết định khôn ngoan về nút nào sẽ đặt nhóm. Bạn cũng sẽ gặp ít vấn đề về tranh chấp tài nguyên hơn với các triển khai đa dạng.

Trong hai phần sau, chúng ta sẽ đi sâu vào hai loại định nghĩa tài nguyên.

yêu cầu

Các yêu cầu cho Kubernetes biết nhóm cần gì và chỉ nên đặt nhóm vào các nút đáp ứng những nhu cầu đó. Yêu cầu được xác định trong thẻ tài nguyên của vùng chứa của bạn.

Giới hạn

Giới hạn tài nguyên được sử dụng để giới hạn việc sử dụng bộ nhớ và CPU của một nhóm, đồng thời đặt số lượng tài nguyên tối đa mà nhóm không bao giờ có thể vượt qua.

Bí mật

Bí mật trong Kubernetes cho phép bạn lưu trữ và quản lý an toàn dữ liệu nhạy cảm như mật khẩu, mã thông báo API và khóa SSH.

Để sử dụng một bí mật trong nhóm của bạn, trước tiên bạn phải tham khảo nó. Nó có thể xảy ra theo nhiều cách khác nhau:

  • Sử dụng biến môi trường và dưới dạng tệp trên ổ đĩa được gắn vào vùng chứa.
  • Khi kubelet kéo ảnh từ sổ đăng ký riêng.

Tạo một bí mật

Bí mật đã được tạo bằng cách sử dụng công cụ lệnh kubelet hoặc bằng cách khai báo một đối tượng Kubernetes bí mật trong YAML.

Sử dụng kubelet

Kubelet cho phép bạn tạo bí mật bằng lệnh tạo chỉ yêu cầu dữ liệu và tên bí mật. Dữ liệu được nhập bằng cách sử dụng một tệp hoặc một ký tự.

kubectl create secret generic admin-credentials --from-literal=user=poweruser --from-literal=password='test123'

Sử dụng một tệp, chức năng tương tự sẽ giống như thế này.

echo -n 'poweruser'> ./username.txt echo -n 'test123'> ./password.txt kubectl tạo thông tin đăng nhập quản trị viên chung bí mật - from-file =. / username.txt --from-file =. / password.txt

Sử dụng các tệp định nghĩa

Bí mật, giống như các đối tượng Kubernetes khác, có thể được khai báo trong tệp YAML.

apiVersion: v1 kind: Siêu dữ liệu bí mật: name: secret-apikey data: apikey: YWRtaW4 =

Thông tin nhạy cảm của bạn được lưu trữ trong bí mật dưới dạng một cặp khóa-giá trị, với apiKey là khóa và YWRtaW4 = là giá trị được giải mã cơ sở.

Sử dụng lệnh áp dụng, bây giờ bạn có thể tạo bí mật.

kubectl apply -f secret.yaml

Thay vào đó, hãy sử dụng thuộc tính stringData nếu bạn muốn cung cấp dữ liệu thuần túy và để Kubernetes xử lý mã hóa.

apiVersion: v1 kind: Siêu dữ liệu bí mật: name: plaintext-secret stringData: password: test

Hình ảnhKéoBí mật

Nếu bạn đang lấy một hình ảnh từ sổ đăng ký riêng tư, bạn có thể cần phải xác thực trước. Khi tất cả các nút của bạn cần kéo một hình ảnh cụ thể, tệp ImagePullSecrets sẽ duy trì thông tin xác thực và cung cấp thông tin đó cho họ.

apiVersion: v1 kind: Pod metadata: name: private-image spec: container: - name: privateapp image: gabrieltanner / graphqltesting imagePullSecrets: - name: authentification-secret

Không gian tên

Không gian tên là các cụm ảo được sử dụng để quản lý các dự án lớn và phân bổ tài nguyên cụm cho nhiều người dùng. Chúng cung cấp nhiều tên khác nhau và có thể được lồng vào nhau.

Quản lý và sử dụng không gian tên với kubectl rất đơn giản. Phần này sẽ hướng dẫn bạn các hành động và lệnh trong không gian tên phổ biến nhất.

Nhìn vào Không gian tên hiện có

Bạn có thể sử dụng lệnh kubectl get namespaces để xem tất cả các namespace hiện có thể truy cập trong cụm của bạn.

kubectl get namespace # Output NAME STATUS AGE mặc định Active 32d docker Active 32d kube-public Active 32d kube-system Active 32d

Tạo không gian tên

Không gian tên có thể được tạo bằng kubectl CLI hoặc bằng cách sử dụng YAML để tạo đối tượng Kubernetes.

kubectl create namespace testnamespace # Output namespace / testnamespace đã tạo

Chức năng tương tự có thể đạt được với tệp YAML.

apiVersion: v1 kind: Siêu dữ liệu không gian tên: name: testnamespace

Sau đó, lệnh áp dụng kubectl có thể được sử dụng để áp dụng tệp cấu hình.

kubectl apply -f testNamespace.yaml

Lọc không gian tên

Khi một đối tượng mới được tạo trong Kubernetes mà không có thuộc tính vùng tên tùy chỉnh, nó sẽ thêm vào vùng tên mặc định.

Bạn có thể làm điều này nếu bạn muốn xây dựng mục của mình trong một không gian làm việc khác.

kubectl create deployment --image=nginx nginx --namespace=testnamespace

Bây giờ bạn có thể sử dụng lệnh get để lọc cho việc triển khai của mình.

kubectl get deployment --namespace=testnamespace

Thay đổi không gian tên

Bây giờ bạn đã học cách xây dựng các đối tượng trong một không gian tên khác với mặc định. Tuy nhiên, việc thêm không gian tên vào mỗi lệnh bạn muốn chạy sẽ mất thời gian và trả về lỗi.

Do đó, bạn có thể sử dụng lệnh set-context để thay đổi ngữ cảnh mặc định mà các hướng dẫn đã được áp dụng.

kubectl config set-context $(kubectl config current-context) --namespace=testnamespace

Lệnh get-context có thể được sử dụng để xác thực các sửa đổi.

kubectl config get-context # Đầu ra TÊN HIỆN TẠI CLUSTER AUTHINFO NAMESPACE * Default Default testnamespace mặc định

Kubernetes với Docker Compose

Đối với các cá nhân đến từ cộng đồng Docker, việc viết các tệp Docker Compose thay vì các đối tượng Kubernetes có thể đơn giản. Kompose phát huy tác dụng trong tình huống này. Nó sử dụng một CLI đơn giản để chuyển đổi hoặc triển khai tệp docker-soạn của bạn sang Kubernetes (giao diện dòng lệnh).

Cách cài đặt Kompose

Nó được triển khai dễ dàng và nhanh chóng trên cả ba hệ điều hành trưởng thành.

Để cài đặt Kompose trên Linux hoặc Mac, hãy cuộn các mã nhị phân.

# Linux curl -L https://github.com/kubernetes/kompose/releases/download/v1.21.0/kompose-linux-amd64 -o kompose # macOS curl -L https://github.com/kubernetes/kompose/ bản phát hành / tải xuống / v1.21.0 / kompose-darwin-amd64 -o kompose chmod + x kompose sudo mv ./kompose / usr / local / bin / kompose

Triển khai bằng Kompose

Kompose triển khai các tệp Docker Compose trên Kubernetes bằng cách sử dụng các tệp Docker Compose hiện có. Hãy xem xét tệp soạn thảo sau đây làm ví dụ.

phiên bản: "2" services: redis-master: image: k8s.gcr.io/redis:e2e port: - "6379" redis-slave: image: gcr.io/google_samples/gb-redisslave:v1 port: - "6379 "môi trường: - GET_HOSTS_FROM = dns frontend: image: gcr.io/google-samples/gb-frontend:v4 port: -" 80:80 "environment: - GET_HOSTS_FROM = dns label: kompose.service.type: LoadBalancer

Kompose, giống như Docker Compose, cho phép chúng tôi triển khai thiết lập của mình bằng một lệnh duy nhất.

kompose lên

Bây giờ bạn sẽ có thể xem các tài nguyên đã được tạo ra.

kubectl get deployment,svc,pods,pvc

Chuyển đổi Kompose

Kompose cũng có thể biến tệp Docker Compose hiện có của bạn thành đối tượng Kubernetes mà bạn cần.

kompose convert

Lệnh áp dụng đã được sử dụng để triển khai ứng dụng của bạn.

kubectl apply -f filenames

Triển khai ứng dụng

Bây giờ bạn đã nắm vững lý thuyết và tất cả các ý tưởng cốt lõi của Kubernetes, đã đến lúc áp dụng những gì bạn đã học vào thực tế. Chương này sẽ chỉ cho bạn cách sử dụng Kubernetes để triển khai một ứng dụng phụ trợ.

Ứng dụng cụ thể của hướng dẫn này là bản soạn thảo GraphQL cho khung phụ trợ Nest.js.

Đầu tiên, hãy sao chép kho lưu trữ.

git clone https://github.com/[user name]/nestjs-graphql-boilerplate.git

Hình ảnh cho một Cơ quan đăng ký

Trước tiên, chúng ta phải đẩy các hình ảnh vào một Cơ quan đăng ký hình ảnh có thể truy cập công khai trước khi bắt đầu xây dựng các đối tượng Kubernetes. Nó có thể là một sổ đăng ký công khai như DockerHub hoặc một sổ đăng ký riêng của bạn.

Truy cập bài đăng này để biết thêm thông tin về cách tạo riêng tư của bạn Hình ảnh Docker.

Để đẩy hình ảnh, hãy đưa thẻ hình ảnh vào tệp Soạn cùng với sổ đăng ký bạn muốn di chuyển.

phiên bản: các dịch vụ '3': nodejs: build: context: ./ dockerfile: Dockerfile image: gabrieltanner.dev/nestgraphql restart: always environment: - DATABASE_HOST = mongo - PORT = 3000 cổng: - '3000: 3000' depend_on: [mongo ] mongo: image: mongo port: - '27017: 27017' volume: - mongo_data: / data / db volume: mongo_data: {}

Tôi đã sử dụng sổ đăng ký riêng mà tôi đã thiết lập trước đó, nhưng DockerHub sẽ hoạt động tốt.

Tạo đối tượng Kubernetes

Bây giờ bạn đã xuất bản hình ảnh của mình lên cơ quan đăng ký, chúng tôi sẽ viết các đối tượng Kubernetes của chúng tôi.

Để bắt đầu, hãy tạo một thư mục mới để lưu các triển khai.

triển khai mkdir Các triển khai cd chạm mongo.yaml chạm nestjs.yaml

Đó là cách dịch vụ MongoDB và việc triển khai sẽ trông như thế nào.

apiVersion: v1 kind: Siêu dữ liệu dịch vụ: tên: mongo spec: selector: app: mongo port: - port: 27017 targetPort: 27017 --- apiVersion: apps / v1 kind: Siêu dữ liệu triển khai: name: mongo spec: selector: matchLabels: app : mẫu mongo: siêu dữ liệu: nhãn: ứng dụng: mongo spec: container: - tên: hình ảnh mongo: cổng mongo: - containerPort: 27017

Một đối tượng triển khai với một vùng chứa MongoDB duy nhất được gọi là mongo đã được bao gồm trong tệp. Nó cũng đi kèm với một dịch vụ cho phép mạng Kubernetes sử dụng cổng 27017.

Vì vùng chứa yêu cầu một số cài đặt bổ sung, chẳng hạn như biến môi trường và imagePullSecrets, đối tượng Nest.js Kubernetes phức tạp hơn một chút.

Bộ cân bằng tải giúp dịch vụ cung cấp cổng trên máy chủ.

Triển khai ứng dụng

Bây giờ các tệp đối tượng Kubernetes đã sẵn sàng. Hãy để chúng tôi sử dụng kubectl để triển khai chúng.

kubectl apply -f mongo.yaml kubectl apply -f nestjs.yaml

Trên localhost / graphql, bây giờ bạn sẽ thấy sân chơi GraphQL.

Xin chúc mừng, bạn vừa triển khai ứng dụng Kubernetes đầu tiên của mình.

Triển khai ứng dụng | Hướng dẫn trên Kubernetes
Hình ảnh-6

Bạn đã kiên trì đến cùng! Tôi hy vọng hướng dẫn này đã giúp bạn hiểu rõ hơn về Kubernetes và cách sử dụng nó để cải thiện quy trình dành cho nhà phát triển của bạn, với các giải pháp cấp sản xuất tốt hơn.

Kubernetes được tạo ra bằng cách sử dụng mười năm chuyên môn của Google về việc chạy các ứng dụng được chứa trong vùng trên quy mô lớn. Nó đã được các nhà cung cấp công nghệ và nhà cung cấp đám mây công cộng hàng đầu áp dụng và hiện đang được đa số các công ty và nhà sản xuất phần mềm áp dụng. Nó thậm chí còn dẫn đến sự hình thành của Cloud Native Computing Foundation (CNCF) vào năm 2015, đây là dự án đầu tiên tốt nghiệp theo CNCF và bắt đầu hợp lý hóa hệ sinh thái container cùng với các dự án liên quan đến container khác như CNI, Containers, Envoy, Fluentd, gRPC, Jagger, Linkerd và Prometheus. Thiết kế hoàn hảo của nó, sự hợp tác với các nhà lãnh đạo trong ngành, làm cho nó trở thành mã nguồn mở và luôn cởi mở với các ý tưởng và đóng góp có thể là những lý do chính khiến nó trở nên phổ biến và được chứng thực ở mức độ cao như vậy.

Chia sẻ điều này với các nhà phát triển khác, nếu bạn thấy nó hữu ích.

Để biết thêm về Kubernetes, hãy xem các liên kết bên dưới

Học các nguyên lý cơ bản từ Blog của chúng tôi..

dự án

Image-1 - Ảnh của  Ian Taylor On Unsplash

Hình ảnh-2,3,4,5 - https://kubernetes.io/docs/tutorials/kubernetes-basics/

Image-6 - Ảnh của  Xan Griffin On Unsplash

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định riêng của Tác giả. 

Nguồn: https://www.analyticsvidhya.com/blog/2022/01/a-comprehensive-guide-on-kubernetes/

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?