Kubernetes là một hệ thống điều phối container miễn phí và mã nguồn mở có thể được sử dụng để triển khai và quản lý container. Hệ thống này được Google phát triển và được thiết kế đặc biệt để tự động mở rộng quy mô và triển khai tự động. Kubernetes có thể chạy trên bất kỳ cơ sở hạ tầng đám mây và máy chủ cục bộ nào. Kubernetes cho phép bạn phân phối nhiều ứng dụng trên một cụm nút. Kubernetes đi kèm với một bộ tính năng phong phú bao gồm Tự phục hồi, Tự động mở rộng quy mô, Cân bằng tải, Thực thi hàng loạt, Mở rộng theo chiều ngang, Khám phá dịch vụ, Điều phối lưu trữ và nhiều tính năng khác.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thiết lập cân bằng tải Nginx với Kubernetes trên Ubuntu 18.04.
Sau khi cả hai máy chủ được cập nhật, hãy khởi động lại chúng để áp dụng tất cả các thay đổi.
Theo mặc định, Kuberenetes không hỗ trợ bộ nhớ hoán đổi vàsẽ không hoạt động nếu hoán đổi đang hoạt động. Vì vậy, bạn sẽ cần vô hiệu hóa bộ nhớ hoán đổi trên cả hai máy chủ.
Để vô hiệu hóa bộ nhớ hoán đổi tạm thời, hãy chạy lệnh sau:
Để vô hiệu hóa bộ nhớ hoán đổi vĩnh viễn, hãy mở tệp /etc/fstab:
Bình luận dòng cuối cùng:
Lưu và đóng tệp. Sau đó, chạy lệnh sau để áp dụng các thay đổi cấu hình:
Tiếp theo, bạn sẽ cần thiết lập giải quyết tên máy chủ trên cả hai máy chủ. Vì vậy, mỗi máy chủ có thể giao tiếp với nhau bằng cách sử dụng tên máy chủ.
Để thực hiện, hãy mở tệp /etc/hosts bằng trình soạn thảo bạn thích:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, tiến hành bước tiếp theo.
Trước tiên, hãy cài đặt các gói cần thiết và thêm khóa GPG bằng lệnh sau:
Tiếp theo, thêm kho lưu trữ Docker CE trên cả hai máy chủ bằng cách chạy lệnh sau:
Tiếp theo, cập nhật kho lưu trữ và cài đặt Docker CE bằng lệnh sau:
Sau khi cài đặt hoàn tất, hãy kiểm tra trạng thái của Docker CE bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Các gói Kubernetes không khả dụng trong kho lưu trữ mặc định của Ubuntu 18.04. Vì vậy, bạn sẽ cần thêm kho lưu trữ Kubernetes trên cả hai máy chủ.
Bạn có thể thêm kho lưu trữ này bằng các lệnh sau:
Tiếp theo, hãy cập nhật kho lưu trữ và cài đặt các gói Kubernetes bằng lệnh sau:
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành cấu hình máy chủ Master.
Bạn có thể thực hiện bằng lệnh kubeadm:
Sau khi Cụm được khởi tạo thành công, bạn sẽ thấy thông báo sau đầu ra:
Tiếp theo, bạn sẽ cần cấu hình công cụ kubectl trên máy chủ Master của mình. Bạn có thể thực hiện bằng lệnh sau:
Tiếp theo, bạn sẽ cần triển khai Giao diện mạng chứa (CNI) trên máy chủ của mình. Bởi vì cụm không có CNI.
Bạn có thể triển khai CNI vào cụm của mình bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Bây giờ bạn có thể kiểm tra không gian tên của mình bằng cách chạy lệnh sau:
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy kết quả đầu ra sau:
Tiếp theo, hãy xác minh xem nút chính hiện có đang chạy đúng cách hay không bằng lệnh sau:
Bạn sẽ thấy kết quả đầu ra sau:
Tiếp theo, hãy đến máy chủ chính và kiểm tra xem máy chủ phụ đã được thêm vào cụm Kubernetes của bạn chưa bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.
Bây giờ bạn có thể liệt kê triển khai Nginx bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Sau khi Nginx đã được triển khai, ứng dụng có thể được hiển thị bằng lệnh sau:
Bây giờ bạn có thể thấy một địa chỉ Service và ClusterIP mới được gán bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Xin chúc mừng! bạn đã triển khai Nginx thành công trên cụm Kubernetes. Bạn cũng có thể dễ dàng thêm một nút khác vào cụm Kubernetes. Để biết thêm thông tin, hãy tham khảo tài liệu chính thức của Kubernetes tại Kubernetes Doc. Hãy thoải mái hỏi tôi nếu bạn có bất kỳ câu hỏi nào.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thiết lập cân bằng tải Nginx với Kubernetes trên Ubuntu 18.04.
Yêu cầu
- Hai máy chủ đã cài đặt Ubuntu 18.04.
- Tối thiểu 2 GB RAM được cài đặt trên mỗi máy chủ.
- Mật khẩu gốc được cấu hình trên cả hai máy chủ.
Bắt đầu
Đầu tiên, bạn sẽ cần cập nhật cả hai máy chủ lên phiên bản ổn định mới nhất. Bạn có thể cập nhật chúng bằng cách chạy lệnh sau:
Mã:
apt-get update -y
apt-get upgrade -y
Theo mặc định, Kuberenetes không hỗ trợ bộ nhớ hoán đổi vàsẽ không hoạt động nếu hoán đổi đang hoạt động. Vì vậy, bạn sẽ cần vô hiệu hóa bộ nhớ hoán đổi trên cả hai máy chủ.
Để vô hiệu hóa bộ nhớ hoán đổi tạm thời, hãy chạy lệnh sau:
Mã:
swapoff -a
Mã:
nano /etc/fstab
Mã:
# /etc/fstab: thông tin hệ thống tệp tĩnh.
#
# sử dụng 'blkid' để in mã định danh duy nhất chung cho một
# thiết bị; điều này có thể được sử dụng với uuid= như một cách mạnh mẽ hơn để đặt tên cho các thiết bị
# hoạt động ngay cả khi các đĩa được thêm vào và xóa đi. xem fstab(5).
#
# <hệ thống tệp> <điểm gắn kết> <kiểu> <tùy chọn> <dump> <pass>
# / đã ở trên /dev/sda1 trong quá trình cài đặt
# swap đã ở trên /dev/sda4 trong quá trình cài đặt#UUID=65se21r-1d3t-3263-2198-e564c275e156 none swap sw 0 0
Mã:
mount -a
Để thực hiện, hãy mở tệp /etc/hosts bằng trình soạn thảo bạn thích:
Mã:
nano /etc/hosts
Mã:
192.168.0.103 master192.168.0.100 slave
Cài đặt Docker và Kubernetes
Tiếp theo, bạn sẽ cần cài đặt công cụ Docker và Kubernetes là kubelet, kubeadm và kubectl trên cả hai máy chủ.Trước tiên, hãy cài đặt các gói cần thiết và thêm khóa GPG bằng lệnh sau:
Mã:
apt-get install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Mã:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Mã:
apt-get update -y
apt-get install docker-ce -y
Mã:
systemctl status docker
Mã:
? docker.service - Docker Application Container Engine Đã tải: đã tải (/lib/systemd/system/docker.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ sáu 2019-07-19 07:05:50 UTC; 1 giờ 24 phút trước Tài liệu: https://docs.docker.com PID chính: 3619 (dockerd) Nhiệm vụ: 8 CGroup: /system.slice/docker.service ??3619 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock19 tháng 7 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.574491681Z" level=warning msg="Hạt nhân của bạn không hỗ trợ giới hạn bộ nhớ hoán đổi"19 tháng 7 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575196691Z" level=warning msg="Hạt nhân của bạn không hỗ trợ cgroup rt period"19/07 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.575733336Z" level=warning msg="Hạt nhân của bạn không hỗ trợ thời gian chạy cgroup rt"19/07 07:05:48 master dockerd[3619]: time="2019-07-19T07:05:48.582517104Z" level=info msg="Đang tải container: bắt đầu."19/07 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.391255541Z" level=info msg="Default bridge (docker0) is assigned with an IP add19/07 07:05:49 master dockerd[3619]: time="2019-07-19T07:05:49.681478822Z" level=info msg="Đang tải container: xong."19/07 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.003776717Z" level=info msg="Docker daemon" commit=0dd43dd graphdriver(s)=overla19/07 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.009892901Z" level=info msg="Daemon đã hoàn tất quá trình khởi tạo"19 tháng 7 07:05:50 master systemd[1]: Đã khởi động Docker Application Container Engine.19 tháng 7 07:05:50 master dockerd[3619]: time="2019-07-19T07:05:50.279284258Z" level=info msg="API listen on /var/run/docker.sock"
Bạn có thể thêm kho lưu trữ này bằng các lệnh sau:
Mã:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.list
Mã:
apt-get install kubelet kubeadm kubectl -y
Cấu hình máy chủ Kubernetes Master
Trước tiên, bạn sẽ cần khởi tạo cụm của mình bằng địa chỉ IP riêng trên máy chủ Master:Bạn có thể thực hiện bằng lệnh kubeadm:
Mã:
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.103
Mã:
Mặt phẳng điều khiển Kubernetes của bạn đã khởi tạo thành công!Để bắt đầu sử dụng cụm của bạn, bạn cần chạy lệnh sau với tư cách là người dùng thông thường: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configBây giờ bạn nên triển khai mạng pod vào cụm.Chạy "kubectl apply -f [podnetwork].yaml" với một trong các tùy chọn được liệt kê tại: https://kubernetes.io/docs/concepts/cluster-administration/addons/Sau đó, bạn có thể tham gia bất kỳ số lượng nút công nhân nào bằng cách chạy lệnh sau trên mỗi nút với tư cách là root:kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u \ --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c
Mã:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Bạn có thể triển khai CNI vào cụm của mình bằng lệnh sau:
Mã:
kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
Mã:
configmap/calico-config createddaemonset.extensions/calico-etcd createdservice/calico-etcd createddaemonset.extensions/calico-node createddeployment.extensions/calico-kube-controllers createddeployment.extensions/calico-policy-controller createdclusterrolebinding.rbac.authorization.k8s.io/calico-cni-plugin đã tạoclusterrole.rbac.authorization.k8s.io/calico-cni-plugin đã tạoserviceaccount/calico-cni-plugin đã tạoclusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers đã tạoclusterrole.rbac.authorization.k8s.io/calico-kube-controllers đã tạoserviceaccount/calico-kube-controllers đã tạo
Mã:
kubectl get namespaces
Mã:
NAME STATUS AGEdefault Active 4hkube-public Active 4hkube-system Active 4h
Mã:
kubectl get nodes
Mã:
name status roles age versionmaster Ready master 12m v1.15.3
Thêm Slave vào Cụm Kubernetes
Tiếp theo, hãy đăng nhập vào máy chủ slave của bạn và chạy lệnh sau để thêm slave vào cụm Kubernetes:
Mã:
kubeadm join 192.168.0.103:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c
Mã:
kubectl get nodes
Mã:
name status roles age versionmaster ready master 25m v1.15.3slave ready 2m v1.15.3
Triển khai NGINX trên cụm Kubernetes Đã đến lúc triển khai Nginx trên cụm Kubernetes.
Truy cập máy chủ Master và tạo triển khai Nginx bằng lệnh sau:
Mã:
kubectl create implementation nginx --image=nginx
Mã:
kubectl get deployments
Mã:
NAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 99s
Mã:
kubectl create service nodeport nginx --tcp=80:80
Mã:
kubectl get svc
Mã:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.152.183.1 443/TCP 15 phútnginx ClusterIP 10.152.183.199 80:32456/TCP 60 giây