Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách cài đặt Kubernetes bằng Kubeadm

Kubernetes đã được giới thiệu trong một bài báo trước đó, “Bắt đầu với Kubernetes trên Amazon Web Services (AWS).” Kubernetes cũng đã được thảo luận trong một bài báo khác, “Sử dụng Kubernetes (K8s) trên IBM Bluemix.” Kubernetes có thể được cài đặt trên kim loại trần trên hầu hết mọi hệ điều hành bao gồm Fedora, CentOS, Ubuntu và CoreOS cho mục đích phát triển.

Vấn đề

Cài đặt Kubernetes trên kim loại trần bao gồm việc chạy một số lệnh để thiết lập nút chính, nút công nhân, mạng nhóm và v.v.

Giải pháp

Kubernetes 1.4 giới thiệu một công cụ mới có tên là kubeadm để khởi động cụm Kubernetes. kubeadm khởi động một cụm Kubernetes bằng hai lệnh. Sau khi cài đặt Docker, kubectl và kubelet, nút chính có thể được khởi động bằng kubeadm init và các nút công nhân được thêm bằng tham gia kubeadm .

Trong bài viết này, chúng tôi sẽ sử dụng quy trình sau để cài đặt và khởi động cụm Kubernetes và sau đó kiểm tra cụm:

  1. Bắt đầu ba phiên bản Ubuntu mới trên Amazon EC2.
  2. Trên tất cả các phiên bản Ubuntu, hãy cài đặt Docker, kubeadm, kubectl và kubelet.
  3. Từ một trong các phiên bản Ubuntu, khởi chạy Kubernetes cluster Master bằng lệnh sau:
    kubeadm init
  4. Áp dụng chính sách mạng Calico Pod kubeadm / calico.yaml .
  5. Tham gia hai phiên bản Ubuntu (nút) khác bằng chính với kubeadm join --token = .
  6. Ở chế độ chính, ba nút được liệt kê với "kubectl get node".
  7. Chạy ứng dụng trên trang cái:
    kubectl -s http://localhost:8080 run nginx
       --image=nginx
       --replicas=3 --port=80
    
  8. Liệt kê các nhóm:
    kubectl get pods -o wide
  9. Gỡ cài đặt cụm Kubernetes.
    kubeadm reset

Bài viết này có các phần sau:

  • Thiết lập Môi trường
  • Cài đặt Docker, kubeadm, kubectl và kubelet trên mỗi Máy chủ lưu trữ
  • Khởi tạo Master
  • Cài đặt Mạng Calico Pod
  • Tham gia các nút vào cụm
  • Cài đặt Ứng dụng Mẫu
  • Gỡ cài đặt Cụm
  • Hạn chế
  • Phát triển thêm trong kubeadm
  • Kết luận

Thiết lập Môi trường

kubeadm công cụ này yêu cầu các máy sau chạy một trong Ubuntu 16.04+, HypriotOS v1.0.1 + hoặc CentOS 7 đang chạy trên chúng.

  • Một máy cho nút chính
  • Một hoặc nhiều máy cho các nút công nhân

Yêu cầu ít nhất 1GB RAM trên mỗi máy. Chúng tôi đã sử dụng ba máy Ubuntu chạy trên Amazon EC2 để khởi động một cụm với một nút chính duy nhất và hai nút công nhân. Ba máy Ubuntu được hiển thị trong Hình 1.


Hình 1: Máy Ubuntu

Cài đặt Docker, kubeadm, kubectl và kubelet trên mỗi Máy chủ lưu trữ

Trong phần này, chúng tôi sẽ cài đặt Docker, kubelet, kubectl và kubeadm trên mỗi máy trong số ba máy. Các thành phần được cài đặt được thảo luận trong Bảng 1.

Thành phần Mô tả
Docker Thời gian chạy vùng chứa. Phiên bản 1.11.2 được khuyến nghị và v1.10.3 và v1.12.1 cũng tốt. Bắt buộc trên tất cả các máy trong cụm.
kubelet Thành phần cốt lõi của Kubernetes chạy trên tất cả các máy trong cụm. Khởi động vùng chứa và Nhóm. Bắt buộc trên tất cả các máy trong cụm.
kubectl Công cụ dòng lệnh để quản lý một cụm. Chỉ bắt buộc trên nút chính, nhưng hữu ích nếu được cài đặt trên tất cả các nút.
kubeadm Công cụ để khởi động một cụm. Bắt buộc trên tất cả các máy trong cụm.

Bảng 1: Các thành phần cần cài đặt

Lấy Địa chỉ IP Công cộng cho từng máy trong số ba máy và đăng nhập SSH vào từng máy:

ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]
ssh -i "docker.pem" [email protected]

Các lệnh để cài đặt mã nhị phân bắt buộc phải chạy dưới dạng root ; do đó, hãy đặt người dùng thành root.

sudo su -

Chạy các lệnh sau trên mỗi máy:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg
   | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

Lệnh đầu tiên tải xuống các gói cần thiết cho Kubernetes, như được hiển thị trong đầu ra trong Hình 2.


Hình 2: Tải xuống các gói cho Kubernetes

Lệnh 2 tải xuống danh sách gói từ kho lưu trữ và cập nhật chúng với phiên bản mới nhất của gói.

apt-get update

Đầu ra được hiển thị trong Hình 3.


Hình 3: Cập nhật các gói kho lưu trữ

Tiếp theo, cài đặt Docker:

# Install docker if you don't have it already.
apt-get install -y docker.io

Docker được cài đặt, như được hiển thị trong đầu ra lệnh trong Hình 4.


Hình 4: Cài đặt Docker

Và sau đó cài đặt kubelet (thành phần cốt lõi của Kubernetes), kubeadm (công cụ khởi động), kubectl (công cụ quản lý cụm) và kubernetes-cni (plugin mạng):

apt-get install -y kubelet kubeadm kubectl kubernetes-cni

Kết quả từ các lệnh trước được hiển thị trong Hình 5.


Hình 5: Cài đặt kubelet, kubeadm, kubectln và kubernetes-cni

Khởi tạo Master

Tiếp theo, khởi tạo cái mà cơ sở dữ liệu etcd và máy chủ API chạy trên đó. Kubelet khởi động Pod để chạy các thành phần này. Chạy lệnh sau để tự động phát hiện địa chỉ IP:

kubeadm init

Như được hiển thị trong đầu ra lệnh, đầu tiên, một số kiểm tra trước chuyến bay được chạy để xác thực trạng thái hệ thống. Sau đó, mã thông báo chủ / mã thông báo được tạo ra sẽ được sử dụng làm khóa xác thực lẫn nhau cho các nút công nhân muốn tham gia cụm. Tiếp theo, khóa và chứng chỉ của Tổ chức phát hành chứng chỉ tự ký được tạo để cung cấp danh tính cho từng nút trong cụm để giao tiếp với máy khách. Khóa máy chủ API và chứng chỉ được tạo cho máy chủ API để giao tiếp với các máy khách. Một use / kubeconfig tệp được tạo để kubelet kết nối với máy chủ API và một use / kubeconfig khác tệp được tạo cho quản trị. Sau đó, cấu hình máy khách API được tạo. Kết quả từ kubeadm init lệnh được hiển thị trong Hình 6.


Hình 6: Chạy kubeadm init

Tất cả các thành phần máy bay điều khiển trở nên sẵn sàng. Nút đầu tiên đã sẵn sàng và việc triển khai thử nghiệm được thực hiện. Các thành phần bổ trợ cần thiết kube-Discovery, kube-proxy và kube-dns cũng được tạo, như thể hiện trong đầu ra lệnh trong Hình 7. Kubernetes master được khởi tạo thành công. Một lệnh với cú pháp sau được tạo ra; nó phải được chạy trên các máy (nút) tham gia vào cụm.

kubeadm join -token=<token> <IP Address of the master node>

Lệnh trước phải được sao chép và giữ lại để sử dụng tiếp theo trên các nút công nhân.


Hình 7: Khởi tạo chính Kubernetes

Theo mặc định, các nút chính không thể lập lịch và được thực hiện bằng cách sử dụng taint “chuyên dụng”. Nút chính có thể được lập lịch bằng lệnh sau:

kubectl taint nodes --all dedicated-

kubeadm lệnh hỗ trợ một số tùy chọn khác (xem Bảng 2) mà chúng tôi không phải sử dụng nhưng có thể được sử dụng để ghi đè lệnh mặc định.

Thông số lệnh Mô tả Mặc định
--skip-preflight-checks Bỏ qua kiểm tra trước chuyến bay Kiểm tra trước khi xuất phát được thực hiện
--use-kubernetes-version Đặt phiên bản Kubernetes để sử dụng v1.5.1
--api-ads-address Lệnh kubeadm init tự động phát hiện và sử dụng Địa chỉ IP của giao diện mạng mặc định và sử dụng nó để tạo chứng chỉ cho máy chủ API. Tham số cấu hình này có thể được sử dụng để ghi đè mặc định bằng một hoặc nhiều Địa chỉ IP mà máy chủ API sẽ được xác thực. Tự động phát hiện
--api-external-dns-names Tham số cấu hình này có thể được sử dụng để ghi đè giao diện mạng mặc định với một hoặc nhiều tên máy chủ mà máy chủ API sẽ được xác thực. Chỉ một trong các / địa chỉ IP hoặc / tên DNS bên ngoài phải được sử dụng.
--cloud-provider Chỉ định nhà cung cấp Đám mây.

Trình quản lý đám mây hỗ trợ “aws”, “azure”, “cloudstack”, “gce”, “mesos”, “openstack”, “ovirt”, “rackspace” và “vsphere”. Cấu hình nhà cung cấp đám mây có thể được cung cấp trong tệp / etc / kubernetes / cloud-config. Sử dụng nhà cung cấp Đám mây cũng có lợi thế là sử dụng khối lượng ổn định và cân bằng tải.

Không tự động phát hiện nhà cung cấp Đám mây
--pod-network-cidr Phân bổ phạm vi mạng (CIDR) cho mỗi nút và hữu ích cho một số giải pháp mạng nhất định, bao gồm cả các nhà cung cấp Flannel và Cloud.
--service-cidr Ghi đè mạng con mà Kubernetes sử dụng để gán Địa chỉ IP cho Nhóm. /etc/systemd/system/kubelet.service.d/10-kubeadm.conf cũng phải được sửa đổi. 10,96.0.0/12
--service-dns-domain Ghi đè hậu tố tên DNS để gán các dịch vụ có tên DNS; nó có định dạng . .svc.cluster.local . /etc/systemd/system/kubelet.service.d/10-kubeadm.conf cũng phải được sửa đổi. cluster.local
--token Chỉ định mã thông báo được sử dụng để xác thực lẫn nhau giữa nút chính và các nút tham gia cụm. Được tạo tự động

Bảng 2: Tùy chọn lệnh Kubeadm

Cài đặt Mạng Calico Pod

Để các Pod có thể giao tiếp với nhau, một tiện ích bổ sung mạng Pod phải được cài đặt. Calico cung cấp cấu hình cài đặt được lưu trữ trên máy chủ kubeadm ở dạng Bản đồ cấu hình tại http://docs.projectcalico.org/master/getting-started/kubernetes/installation/hosted/kubeadm/calico.yaml mà chúng tôi sẽ sử dụng trong phần này để cài đặt mạng Pod. Chạy lệnh sau trên nút chính để cài đặt mạng Pod:

kubectl apply -f
   http://docs.projectcalico.org/master/getting-started/
   kubernetes/installation/hosted/kubeadm/calico.yaml

Ngoài ra, hãy tải xuống calico.yaml và sao chép vào nút chính:

scp -i "docker.pem" calico.yaml [email protected]:~

Sau đó, chạy lệnh sau:

kubectl apply -f calico.yaml

Calico và một cụm etcd nút đơn được cài đặt, như thể hiện trong Hình 8.


Hình 8: Cài đặt Chính sách Calico

Sau đó, liệt kê tất cả các Nhóm trong tất cả các không gian tên Kubernetes.

kubectl get pods --all-namespaces

kube-dns Pod phải đang chạy, như được liệt kê trong Hình 9.


Hình 9: Các nhóm danh sách trong tất cả các không gian tên

Tham gia các nút vào cụm

Trong phần này, chúng tôi sẽ nối các nút công nhân vào cụm bằng cách sử dụng tham gia kubeadm , có cú pháp sau:

kubeadm join --token=<token> <master-ip>

Theo tùy chọn, tham gia kubeadm có thể chạy lệnh bằng --skip-preflight-checks tùy chọn để bỏ qua xác thực sơ bộ.

tham gia kubeadm lệnh sử dụng mã thông báo được cung cấp để giao tiếp với máy chủ API và lấy chứng chỉ CA gốc, đồng thời tạo một cặp khóa cục bộ. Sau đó, một yêu cầu ký chứng chỉ (CSR) được gửi đến máy chủ API để ký và kubelet cục bộ được định cấu hình để kết nối với máy chủ API.

Chạy tham gia kubeadm lệnh được sao chép từ đầu ra của kubeadm init lệnh trên từng máy Ubuntu tham gia vào cụm.

Đầu tiên, đăng nhập SSH vào / s phiên bản Ubuntu:

ssh -i "docker.pem" [email protected]

ssh -i "docker.pem" [email protected]

Sau đó, chạy tham gia kubeadm yêu cầu. Đầu tiên, một số kiểm tra trước chuyến bay được thực hiện. Mã thông báo được cung cấp đã được xác thực. Tiếp theo, khám phá nút được sử dụng. Ứng dụng khách khám phá thông tin cụm được tạo và thông tin được yêu cầu từ máy chủ API. Đối tượng thông tin cụm được nhận và chữ ký được xác minh bằng cách sử dụng mã thông báo đã cho. Nội dung và chữ ký thông tin cụm được cho là hợp lệ và quá trình khám phá nút đã hoàn tất. Sau đó, quá trình khởi động nút được thực hiện, trong đó các điểm cuối API https://10.0.0.129:6443 được sử dụng để thiết lập kết nối. Sau đó, một yêu cầu ký chứng chỉ (csr) được thực hiện bằng cách sử dụng ứng dụng khách API để nhận chứng chỉ duy nhất cho nút. Sau khi nhận được chứng chỉ đã ký từ máy chủ API, tệp cấu hình kubelet sẽ được tạo. Thông báo “Hoàn thành kết nối nút” được liệt kê trong Hình 10 cho biết rằng nút đã tham gia cụm.


Hình 10: Tham gia một nút vào cụm

Tương tự, chạy lệnh tương tự trên máy Ubuntu khác. Nút khác cũng tham gia cụm, như được chỉ ra bởi đầu ra trong Hình 11.


Hình 11: Tham gia nút thứ hai vào cụm

Trên nút chính, hãy chạy lệnh sau để liệt kê các nút:

kubectl get nodes

Nút chính và hai nút công nhân sẽ được liệt kê, như thể hiện trong Hình 12.


Hình 12: Liệt kê các nút cụm Kubernetes

Cài đặt ứng dụng mẫu

Tiếp theo, chúng tôi sẽ kiểm tra cụm. Chạy lệnh sau để chạy nginx -based Pod cluster bao gồm ba bản sao:

kubectl -s http://localhost:8080 run nginx --image=nginx
   --replicas=3 --port=80

Liệt kê các triển khai:

kubectl get deployments

Liệt kê các Nhóm trên toàn bộ cụm:

kubectl get pods -o wide

Cho thấy việc triển khai dưới dạng một dịch vụ thuộc loại LoadBalancer :

kubectl expose deployment nginx --port=80 --type=LoadBalancer

Liệt kê các dịch vụ:

kubectl get services

Đầu ra từ các lệnh trước cho biết nginx triển khai đã được tạo và ba Nhóm chạy trên hai nút công nhân trong cụm. Một dịch vụ có tên “nginx” cũng được tạo, như trong Hình 13.


Hình 13: Chạy một cụm Pod nginx

Sao chép IP cụm của dịch vụ. Chạy lệnh curl để gọi dịch vụ:

curl 10.0.0.99

Đánh dấu HTML từ dịch vụ được xuất ra, như trong Hình 14.


Hình 14: Gọi dịch vụ nginx

Gỡ cài đặt cụm

Để gỡ cài đặt cụm được cài đặt bởi kubeadm, hãy chạy lệnh sau:

kubeadm reset

Cụm được gỡ cài đặt, như trong Hình 15.


Hình 15: Gỡ cài đặt / Đặt lại cụm Kubernetes

Hạn chế

kubeadm có một số hạn chế và chỉ được khuyến nghị sử dụng cho mục đích phát triển. Các hạn chế của kubeadm như sau;

  • Chỉ một số hệ điều hành được hỗ trợ:Ubuntu 16.04+, CentOS 7, HypriotOS v1.0.1 +.
  • Không thích hợp để sử dụng trong sản xuất.
  • Tích hợp các nhà cung cấp dịch vụ đám mây là thử nghiệm.
  • Một cụm chỉ có một cái chính với một cơ sở dữ liệu etcd duy nhất trên nó được tạo. Tính sẵn sàng cao không được hỗ trợ, ngụ ý rằng bản chính là một điểm lỗi duy nhất (SPOF).
  • Chức năng HostPort và HostIP không được hỗ trợ.
  • Một số sự cố đã biết khác khi sử dụng kubeadm với RHEL / CentOS 7 và VirtualBox.

Phát triển thêm trong kubeadm

kubeadm ở dạng alpha trong Kubernetes v 1.5 và đang ở dạng beta kể từ Kubernetes 1.6. Tôi tiếp tục thực hiện các bản sửa lỗi và cải tiến nhỏ đối với kubeadm với mỗi phiên bản Kubernetes mới:

  • Với Kubernetes 1.7, các sửa đổi đối với tài nguyên nội bộ cụm được cài đặt bằng kubeadm sẽ bị ghi đè khi nâng cấp từ phiên bản 1.6 lên phiên bản 1.7.
  • Trong Kubernetes 1.8, mã thông báo Bootstrap mặc định được tạo bằng kubeadm init trở nên không hợp lệ và sẽ bị xóa sau 24 giờ kể từ khi được tạo để hạn chế việc hiển thị thông tin xác thực có giá trị. tham gia kubeadm lệnh ủy quyền khởi động TLS cho iteslf kubelet thay vì thực hiện lại quy trình. Bootstrap KubeConfig tệp được ghi vào / etc / kubernetes / bootstrap-kubelet-conf với kubeadm tham gia .

Kết luận

Trong bài viết này, chúng tôi đã sử dụng tính năng công cụ kubeadm có sẵn kể từ Kubernetes v1.4 để khởi động cụm Kubernetes. Đầu tiên, các tệp nhị phân bắt buộc cho Docker, kubectl, kubelet và kubeadm được cài đặt. Sau đó, kubeadm init được sử dụng để khởi tạo nút chính trong cụm. Cuối cùng, tham gia kubeadm lệnh được sử dụng để nối các nút công nhân với cụm. Một mẫu nginx ứng dụng được chạy để kiểm tra cụm.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xu hướng cơ sở dữ liệu năm 2019 - SQL so với NoSQL, Cơ sở dữ liệu hàng đầu, Sử dụng một cơ sở dữ liệu so với Nhiều cơ sở dữ liệu

  2. Kết nối cơ sở dữ liệu hoặc lỗi xác thực với loại có thể di chuyển

  3. Hội nghị thượng đỉnh MVP năm 2013:Đánh giá nhanh và xem trước

  4. 5 lỗi thiết kế truy vấn SQL rất phổ biến cần tránh bằng mọi giá

  5. Cách thực thi SQL thô trong SQLAlchemy