- vừa được xem lúc

K8S-Course 02: Cài đặt Lab kubernetes - phần 2

0 0 35

Người đăng: Trịnh Quốc Việt

Theo Viblo Asia

Giới thiệu

Hôm nay mình sẽ tiếp tục hướng dẫn các bạn cài đặt hoàn thiện cụm kubernetes cluster dùng kubespray nhé!

Mình giới thiệu lại mô hình k8s mà mình sẽ hướng dẫn các bạn cài đặt:

Thông số các VM dùng cho việc cài đặt như sau:

Máy ảo Role IP RAM CPU HDD Note
master1 master 192.168.10.11 (NAT) 3GB 2 core 30GB Sẽ cài thêm haproxy
worker1 worker 192.168.10.12 (NAT) 4GB 2 core 30GB Sẽ cài thêm rancher
worker2 worker 192.168.10.13 (NAT) 4GB 2 core 30GB + 30GB Sẽ cài thêm nfs-server
kubespray installation server 192.168.10.8 (NAT) 2GB 2 core 30GB

Review lại các công việc đã thực hiện

Trong phần 1 mình đã hướng dẫn các bạn thực hiện cài VMware Workstation và đã tạo được 4 VM theo planning bên trên rồi.

Trong bài này mình tiếp tục hướng dẫn các công việc còn lại để hoàn thiện cài đặt gồm:

  • Cài đặt cấu hình máy ảo kubespray để chuẩn bị cài đặt k8s
  • Cấu hình tham số cho việc cài đặt + cài đặt k8s bằng kubespray
  • Cài đặt & cấu hình kubectl (để giao tiếp và quản lý cụm k8s)
  • Cài đặt rancher (lên VM worker1)

Giờ thì bắt tay vào thôi!

Hướng dẫn chi tiết

Cài đặt cấu hình cho VM kubespray

Cài đặt docker

Thực hiện cài đặt docker bằng lệnh sau:

[sysadmin@kubespray ~]$ sudo yum update -y
<output truncated>
[sysadmin@kubespray ~]$ curl -fsSL https://get.docker.com/ | sh
<output truncated>
[sysadmin@kubespray ~]$ sudo systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[sysadmin@kubespray ~]$ sudo systemctl start docker

Rồi cấu hình để user của bạn (non-root) có thể chạy lệnh docker không cần sudo, sau đó restart lại session kết nối vào server để user được cập nhật:

[sysadmin@kubespray ~]$ sudo usermod -aG docker sysadmin

Bạn có thể logout/login lại session để cập nhật quyền trên trước khi tiếp tục thao tác.

Kết quả là cài đặt docker và chạy lệnh docker không cần quyền sudo:

[sysadmin@kubespray ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Cấu hình file host

Thêm các dòng sau vào file /etc/hosts:

192.168.10.11 master1
192.168.10.12 worker1
192.168.10.13 worker2

Tạo thư mục cài đặt kubespray

Tao thư mục chứa các file cài đặt:

 cd ~ mkdir kubernetes_installation/

Cài đặt kubernetes bằng kubespray

Tải bộ cài kubespray

Vào thư mục cài đặt vào download Kubespray về, lưu ý cần down đúng phiên bản bạn cần. Ở đây mình muốn cài kubernetes version v1.20.7 thì sẽ cần down kuberpay phiên bản release-2.16:

cd /home/sysadmin/kubernetes_installation
git clone https://github.com/kubernetes-sigs/kubespray.git --branch release-2.16

Lúc này kubespray sẽ được tải về máy tại thư mục /home/sysadmin/kubernetes_installation/kubespray.

Update file cấu hình của kubespray

Bạn cần tạo một inventory mới có tên là viettq-cluster của riêng bạn từ bộ mẫu của kubespray:

cd /home/sysadmin/kubernetes_installation/kubespray
cp -rf inventory/sample inventory/viettq-cluster

Tiếp theo là bước quan trọng nhất - cấu hình file hosts.yaml trong thư mục inventory của bạn. File này chính là file định nghĩa bạn sẽ cài k8s cluster gồm bao nhiêu node, tên và IP các node là gì...

cd /home/sysadmin/kubernetes_installation/kubespray/
cd inventory/viettq-cluster
vi hosts.yaml

Bạn cần chỉnh sửa nội dung file này theo đúng hostname/IP của các node bạn sẽ cài Kubernetes. Theo planning bên trên thì mình có 1 master và 2 worker, theo đó ta cần file cấu hình như sau:

[all]
master1 ansible_host=192.168.10.11 ip=192.168.10.11
worker1 ansible_host=192.168.10.12 ip=192.168.10.12
worker2 ansible_host=192.168.10.13 ip=192.168.10.13 [kube-master]
master1 [kube-node]
worker1
worker2 [etcd]
master1 [k8s-cluster:children]
kube-node
kube-master [calico-rr] [vault]
master1
worker1
worker2

Tiếp đến nếu bạn muốn đổi CNI (network plugin của K8S) thì sửa file config sau:

inventory/viettq-cluster/group_vars/k8s_cluster/k8s-cluster.yml

Sửa tham số:

Từ
kube_network_plugin: calico
Thành
kube_network_plugin: flannel

Hoặc có thể dùng lệnh để update cấu hình network plugin như sau (thay vì sửa bằng tay như bên trên):

#Change network CNI plugin to flannel
cd /home/sysadmin/kubernetes_installation/kubespray/
sed -i "/kube_network_plugin:/c\kube_network_plugin: flannel" inventory/viettq-cluster/group_vars/k8s_cluster/k8s-cluster.yml

Như vậy là các bước chuẩn bị đã sẵn sàng, ta tiến hành cài đặt thôi!

Cài đặt kubernetes cluster

Ta sẽ thực hiện việc cài đặt từ bên trong một docker container của kubespray bằng lệnh sau:

docker run --rm -it --mount type=bind,source=/home/sysadmin/kubernetes_installation/kubespray/inventory/viettq-cluster,dst=/inventory quay.io/kubespray/kubespray:v2.16.0 bash

Các bạn lưu ý dấu nhắc bây giờ sẽ là "root@..." vì chúng ta đang ở bên trong container.

Cuối cùng là lệnh để cài đặt:

ansible-playbook -i /inventory/hosts.yaml cluster.yml --user=sysadmin --ask-pass --become --ask-become-pass

Bạn sẽ nhập thông tin password của user sysadmin 2 lần và chờ đợi để ansible chạy các task cài đặt lên các node cho bạn.

Kết quả hoàn thành sẽ như sau:

PLAY RECAP ********************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
master1 : ok=485 changed=110 unreachable=0 failed=0 skipped=1017 rescued=0 ignored=1
worker1 : ok=345 changed=76 unreachable=0 failed=0 skipped=649 rescued=0 ignored=0
worker2 : ok=323 changed=73 unreachable=0 failed=0 skipped=570 rescued=0 ignored=0 Thursday 15 September 2022 07:02:24 +0000 (0:00:00.055) 0:10:34.636 ****
===============================================================================
container-engine/docker : ensure docker packages are installed -------------------------------------------------------------------------------------------- 82.04s
download_file | Download item ----------------------------------------------------------------------------------------------------------------------------- 46.30s
kubernetes/kubeadm : Join to cluster ---------------------------------------------------------------------------------------------------------------------- 35.97s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 29.12s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 27.70s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 26.88s
kubernetes/preinstall : Install packages requirements ----------------------------------------------------------------------------------------------------- 23.07s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 20.87s
download_file | Download item ----------------------------------------------------------------------------------------------------------------------------- 18.60s
kubernetes/control-plane : kubeadm | Initialize first master ---------------------------------------------------------------------------------------------- 18.06s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 15.45s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 15.39s
bootstrap-os : Install libselinux python package ---------------------------------------------------------------------------------------------------------- 14.15s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 13.26s
download_file | Download item ----------------------------------------------------------------------------------------------------------------------------- 12.05s
download_container | Download image if required ----------------------------------------------------------------------------------------------------------- 10.18s
wait for etcd up ------------------------------------------------------------------------------------------------------------------------------------------- 8.47s
download_file | Download item ------------------------------------------------------------------------------------------------------------------------------ 7.14s
download_file | Download item ------------------------------------------------------------------------------------------------------------------------------ 7.14s
download_container | Download image if required ------------------------------------------------------------------------------------------------------------ 5.91s
root@5bc3ca5cca25:/kubespray#

Cài đặt và cấu hình kubectl

Cấu hình kubectl trên master1

Khi cài đặt xong cụm k8s thì trên master node đã mặc định có cài kubectl rồi nên ta chỉ việc cấu hình cho nó mà ko phải cài lại.

Cấu hình kubectl trên master node như sau:

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Sau đó kiểm tra thông tin các node của cluster:

[sysadmin@master1 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 3m14s v1.20.7
worker1 Ready <none> 2m25s v1.20.7
worker2 Ready <none> 2m25s v1.20.7

Như vậy là quá trình cài đặt đã hoàn thành rồi.

Cài đặt và cấu hình kubectl trên kubespray

Do phiên bản Kubernetes đang cài trong series LAB này là v1.20.7 nên mình cũng sẽ cài kubectl cùng phiên bản:

curl -LO https://dl.k8s.io/release/v1.20.7/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

Cấu hình kubectl để kết nối tới cụm K8S của mình:

mkdir -p $HOME/.kube
scp master1:~/.kube/config $HOME/.kube/
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Sửa file config, tham số "server: https://127.0.0.1:6443" thành "server: https://192.168.10.11:6443" và lưu lại. Lưu ý "192.168.10.11" là IP của node master1, 6443 là port mặc định của kube-api-server.

Giờ kiểm tra kết nối bằng lệnh "kubect get nodes" xem đã kết nối ok hay chưa:

[sysadmin@kubespray ~]$ kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master1 Ready control-plane,master 6m24s v1.20.7 192.168.10.11 <none> CentOS Linux 7 (Core) 3.10.0-1160.76.1.el7.x86_64 docker://19.3.15
worker1 Ready <none> 5m35s v1.20.7 192.168.10.12 <none> CentOS Linux 7 (Core) 3.10.0-1160.76.1.el7.x86_64 docker://19.3.15
worker2 Ready <none> 5m35s v1.20.7 192.168.10.13 <none> CentOS Linux 7 (Core) 3.10.0-1160.76.1.el7.x86_64 docker://19.3.15

Như vậy là chúng ta đã cài đặt và cấu hình kubectl trên node kubespray thành công.

Cài đặt rancher

Theo planning chúng ta sẽ cài rancher trên node worker1. Kết nối SSH vào woker1 và cài rancher thôi.

Đầu tiên ta cần cấu hình user sysadmin có quyền chạy lệnh docker không cần sudo:

[sysadmin@worker1 ~]$ sudo usermod -aG docker sysadmin
[sysadmin@worker1 ~]$ sudo su - sysadmin

Tiếp theo ta cài rancher bằng lệnh sau:

docker run --name rancher-server -d --restart=unless-stopped -p 6860:80 -p 6868:443 --privileged rancher/rancher:v2.5.7 

Giờ thì rancher container đã chạy xong, ta vào web của nó ở địa chỉ https://[ip]:[https-port] cụ thể là https://192.168.10.12:6868.

Lúc này bạn chọn đổi password mới để nhập password mới và ấn OK để ra giao diện chính của Rancher như sau.

Tiếp theo chọn vào Add Cluster --> Other Cluster --> Nhập Cluster Name --> Chọn Create.

Tiếp theo copy dòng lệnh dưới cùng để chạy trên K8S Master Node để cài đặt rancher-agent lên K8S.

Chờ vài phút để agent được cài đặt xong thì trên rancher bạn ấn vào tên cluster mới tạo sẽ hiển thị như sau:

Bổ sung thêm: Khi trên giao diện Rancher báo Controller Manager unhealthy thì các bạn thực hiện thêm các bước sau trên các node Master nhé!

sudo sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-scheduler.yaml
sudo sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-controller-manager.yaml
sudo systemctl restart kubelet

Như vậy tới đây các bạn đã hoàn thành cài đặt hệ thống lab kubernetes cluster rồi.

Trong các bài sau chúng ta sẽ vừa tìm hiểu vừa thực hành về các khái niệm, tài nguyên của k8s như nodes, pods.. trên hệ thống lab này nhé. Rất mong nhận được sự ủng hộ của mọi người bằng cách upvote và bookmark bài viết này. Cảm ơn các bạn!!

Tags: cai dat kubernetes, viettq, kubespray, kubernetes cluster

Bình luận

Bài viết tương tự

- vừa được xem lúc

[K8S] Phần 1 - Kubernetes là gì?

Lời tựa. Trong bài viết này mình sẽ giới thiệu ngắn gọn, không mang tính chất hàn lâm mà sẽ chủ yếu dựa vào các kiến thức và kinh nghiệm thực tế để bạn đọc tiết kiệm được thời gian và đi thẳng vào các

0 0 45

- vừa được xem lúc

[K8S] Phần 2 - Cài đặt Kubernetes Cluster và Rancher

Lời tựa. Chào các bạn, tiếp tục series K8S ở phần này mình sẽ hướng dẫn các bạn cài đặt một hệ thống Kubernetes Cluster với đầy đủ các thành phần giống như một hệ thống Product thường làm.

0 0 32

- vừa được xem lúc

[K8S] Phần 4 - Cài đặt Storage cho K8S dùng longhorn

Lời tựa. Chào các bạn, trong phần trước mình đã có chia sẻ cách cài đặt và sử dụng nfs storage class trên K8S Cluster.

0 0 40

- vừa được xem lúc

K8S-Course 02: Cài đặt Lab kubernetes - phần 1

Giới thiệu. Trong bài này mình giới thiệu cách sử dụng phần mềm VMware Workstation Pro trên window để tạo các máy ảo (VM).

0 0 20

- vừa được xem lúc

[K8S basic] Làm việc với Node trên k8s

Giới thiệu. Xin chào các bạn.

0 0 21

- vừa được xem lúc

[K8S basic] Kubernetes Namespaces

Giới thiệu. Xin chào các bạn, chúng ta lại tiếp tục với series k8s basic. Các nội dung đã có trong series:. .

0 0 26