Thứ Sáu, 11 tháng 11, 2022

Kubernetes – Phần 3 – Cài đặt Kubernetes

Trước khi đi sâu vào các phần tiếp theo thì có một số khuyến nghị cho các bạn dễ nắm bắt và tiếp thu thông tin hơn:

  1. Cần có kiến thức cơ bản về Linux tương đương LPI, RHCSA
  2. Cần có kiến thức cơ bản về network tương đương CCNA, JNCIA
  3. Cần có kiến thức cơ bản về Container
  4. Cần có kiến thức cơ bản về YAML file

Qua các phần trước, các bạn đã biết được lịch sử ra đời cũng như kiến trúc các thành phần trong Kubernetes. Ở phần này, chúng ta sẽ xem cách thức để cài đặt lên một cụm hạ tầng Kubernetes.

Theo các bạn thì có bao nhiêu cách để tạo ra được một cụm hạ tầng Kubernetes? 5 cách? 10 cách? 20 cách? Sai hết. Thực ra thì mình cũng không biết chính xác câu trả lời đâu. Nhưng theo thông tin tham khảo từ Github này: https://github.com/ramitsurana/awesome-kubernetes/blob/master/docs/installers/installers.md thì đang có tổng cộng 36 cách để tạo ra được một cụm hạ tầng Kubernetes. Trong số này, mình thấy còn thiếu vài cái tên đình đám như OpenShift, Pivotal, Tanzu mà chưa hiểu tại sao. Nên mình nghĩ không dưới 40 cách giúp bạn có được môi trường Kubernetes.

Nhiều thật. Riêng mình vọc vạch để tùy biến được tới 5 cách thôi đã vã mồ hôi rồi.

Bây giờ chúng ta sẽ chọn ra một cách cài đặt để tạo ra một cụm Kubernetes dùng xuyên suốt chuỗi bài này. Cách nào dễ nhất nhỉ. Minikube chăng? Nó triển khai cả control plane và data plane trên một máy chủ, giúp tiết kiệm tài nguyên cho bạn. Hay dùng Rancher/RKE? Tại cũng thấy nhiều bài viết hướng dẫn cách cài này và lại có giao diện web GUI khá đẹp. Vòng vo chút thôi, chứ mình sẽ sử dụng kubeadm. Vì sao? Vì mình ôn thi cả 03 chứng chỉ của Kubernetes, họ đều dùng kubeadm. Còn lý do gì khác không? Có, đó là vì kubeadm cũng đơn giản, dễ cài đặt, có khả năng tùy biến cao.

Mô hình cài đặt của mình ở mức tối thiểu, bao gồm 03 máy chủ với thông tin như sau:

  • CPU: 02 vCPU
  • RAM: 02 GB
  • HDD: 30 GB
  • OS: Ubuntu Server 18.04 LTS
  • NIC: 01 Interface, Có kết nối Internet

Vì là LAB nên mình để cấu hình vừa đủ chạy các container đơn giản, cũng giúp các bạn dễ chuẩn bị hơn. Trong đó sẽ có 01 Master node và 02 Worker node. Mình chọn distro Ubuntu 18.04 cũng vì muốn giúp các bạn có ý định thi chứng chỉ Kubernetes sẽ học cách làm quen luôn.

Mô hình kết nối:

Hình 1: Mô hình kết nối

Việc cài đặt bằng Kubeadm theo đánh giá chủ quan của mình thì khá đơn giản. Nếu bạn là người chưa có nhiều kinh nghiệm làm việc với Linux cũng có thể triển khai được.

Để chuẩn bị máy chủ LAB thì các bạn có thể tìm hiểu các cách sử dụng VMware workstation, Virtual Box trên máy tính cá nhân, xịn hơn thì xài VPS, đỉnh hơn nữa thì lên GCP, Azure, AWS tạo máy ảo. Sau đó cài đặt hệ điều hành Ubuntu Server 18.04 LTS. Phần này nằm ngoài phạm vi nên mình không hướng dẫn chi tiết, các bạn google hoặc tìm các bài viết khác trong website hocchudong.com nhé.

Đầu tiên, cần phải thiết lập hostname. Vì hostname sẽ được Kubernetes sử dụng để định danh các node trong cụm luôn.

Trên Master node chạy lệnh sau:

hostnamectl set-hostname master

sed -i 's/127.0.0.1 localhost/127.0.0.1 localhost master/' /etc/hosts

Trên Worker node 1 thì chạy:

hostnamectl set-hostname worker1

sed -i 's/127.0.0.1 localhost/127.0.0.1 localhost worker1/' /etc/hosts

Trên Worker node 2 thì chạy:

hostnamectl set-hostname worker2

sed -i 's/127.0.0.1 localhost/127.0.0.1 localhost worker2/' /etc/hosts

Đoạn này mình sử dụng để sửa lại cái phân giải tên miền trong trường hợp không sử dụng netplan mà gỡ đi dùng ifupdown. Nếu bạn đang dùng netplan thì bỏ qua bước sửa DNS này.

echo "nameserver 8.8.8.8" >> /etc/resolv.conf

apt install resolvconf -y

echo "nameserver 1.1.1.1" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 1.1.1.1" >> /etc/resolvconf/resolv.conf.d/head
echo "nameserver 8.8.8.8" >> /etc/resolvconf/resolv.conf.d/head

sudo service resolvconf restart

Các lệnh hướng dẫn sau đây sẽ thực hiện trên tất cả các máy chủ Master node và Worker node cho tới khi chạy lệnh khởi tạo Cluster. Đầu tiên sẽ thực hiện cập nhật hệ thống:

apt update -y && apt upgrade -y && apt autoremove -y

Do kubernetes yêu cầu bạn phải tắt swap mới cài đặt được. Tắt mềm như sau:

swapoff -a

Bạn cần chỉnh sửa cấu hình trong tập tin /etc/fstab để đảm bảo tắt swap ngay cả khi khởi động lại máy chủ. Tắt cứng như sau:

sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab

Với hướng dẫn các bạn tìm trên Google thì thường chỉ thực hiện cài đặt phiên bản mới nhất lấy được từ repository. Nhưng ở đây, mình sẽ chỉ cho các bạn cách cài đặt một phiên bản cố định của mỗi gói. Điều này giúp các bạn học cách kiểm soát các gói khi sử dụng nguồn mở. Nếu bạn nào chưa biết thì mình có thể chia sẻ, chu kỳ phát hành một phiên bản mã nguồn mở khoảng 3-6 tháng. Vì lý do nào đó, bạn dựng hệ thống xong, 6 tháng sau quay lại mở rộng hạ tầng, bạn ung dung vỗ đùi rồi copy paste lệnh của 6 tháng trước vào cài đặt. 10 phút sau các lệnh cài đặt chạy xong, và một loạt ứng dụng treo, lỗi, cảnh báo bắn liên tọi. =)). Vì lý do phiên bản mới không tương thích với ứng dụng đang triển khai.

Các bạn tìm các phiên bản (version) cho gói cài đặt docker.io hiện có trên repository bằng lệnh:

apt search docker.io
apt-cache show docker.io |grep Version

Thực hiện tương tự cách tìm phiên bản với các gói sẽ cài đặt bên dưới. Mình sẽ sử dụng luôn chứ không chạy lại lệnh tìm kiếm nữa.

Chạy lệnh cài đặt với đúng phiên bản mong muốn, ở đây mình chỉ định phiên bản docker 19.03.6, containerd phiên bản 1.2.6:

apt -y install docker.io=19.03.6-0ubuntu1~18.04.2 containerd=1.2.6-0ubuntu1~18.04.2

Khi cài xong gói, việc đầu tiên cần phải làm là khóa gói vừa cài đặt để không cho hệ thống tự động nâng cấp phiên bản của các gói này khi chạy lệnh “apt upgrade”.

apt-mark hold docker.io containerd

Nếu muốn nâng cấp gói bị khóa thì thực hiện mở khóa bằng

apt-mark unhold docker.io containerd

Cho phép docker khởi động cùng hệ điều hành bằng lệnh:

systemctl enable docker.service --now

Tới đây thì chúng ta sẽ khởi động lại toàn bộ 03 máy chủ trước khi bắt tay vào cài đặt Kubernetes:

init 6

Khởi động xong, bạn đăng nhập qua SSH vào toàn bộ các máy chủ để bắt đầu cài đặt Kubernetes cluster.

Trên cả Master node và Worker node, thực hiện cấu hình repository để trỏ tới nơi sẽ tải các gói cài đặt kubeadm, kubelet, kubectl:

apt install -y apt-transport-https

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

Chạy lệnh sau để máy chủ cập nhật thông tin metadata về các gói ở repository vừa thêm vào:

apt update -y

Cài đặt các gói kubeadm, kubelet, kubeclt ở phiên bản 1.20.8-00 bằng lệnh:

apt install -y kubelet=1.20.8-00 kubeadm=1.20.8-00 kubectl=1.20.8-00

Đừng quên khóa không cho hệ điều hành cập nhật gói nhé:

Cho phép kubelet khởi động cùng hệ điều hành:

systemctl enable kubelet --now

Đứng trên Master node, thực hiện các lệnh sau để khởi tạo một Kubernetes Cluster:

IPADDR=$(hostname -I |awk '{ print $1 }')

kubeadm init --apiserver-advertise-address $IPADDR --pod-network-cidr=10.224.0.0/16

Kết quả cài đặt xong:

Sẽ phải thiết lập cấu hình để sử dụng được tập lệnh kubectl tương tác với API server. Chạy các lệnh sau:

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

Chúng ta sẽ sử dụng một 3rd plugin network là calico, lý do tại sao thì bài sau mình sẽ giải thích chi tiết. Dải địa chỉ IP có CIDR là 10.224.0.0/16 sẽ được sử dụng để cấp phát địa chỉ IP cho các Pod. Pod là gì thì có thể hiểu nó là một thành phần bao bọc các container khi chạy container trong Kubernetes.

Tải tập tin YAML có chứa các thông tin giúp cài đặt được calico trong Kubernetes:

curl https://docs.projectcalico.org/manifests/calico.yaml -O

Cần sửa một chút tập tin này vì chúng ta có chỉ định dải địa chỉ CIDR cho Pod:

vim calico.yaml +3683

Loại bỏ comment của 02 dòng này và thay đúng CIDR từ lệnh khởi tạo vào:

Cho bạn nào không rành về Linux hoặc sử dụng chương trình vim thì bạn dùng mũi tên đưa con trỏ tới dấu #, sau đó nhấn chữ i để chuyển sang chế độ INSERT, rồi nhấn delete 2 lần. Đưa con trỏ xuống dòng dưới để xóa tiếp các thông tin thừa và điền CIDR vào. Xong thì nhấn phím ESC để thoát khỏi chế độ INSERT, rồi gõ : x (dấu hai chấm và chữ x liền nhau), Enter là xong.

Chạy lệnh sau để cài đặt Calico:

kubectl apply -f calico.yaml

Bạn có nhìn thấy lệnh kubeadm join…. ở giao diện phần khởi tạo cụm không? Sử dụng lệnh đó để chạy trên các Worker node. Nhớ là trên mọi Worker node sẽ không chạy lệnh kubeadm init, chỉ cần chạy lệnh kubeadm join kia là đủ.

Vì token sử dụng để join các Worker node có thời gian sử dụng là 24h, nếu bạn muốn sinh ra token để mở rộng thêm các Worker node thì chạy lệnh sau sẽ có:

kubeadm token create --print-join-command

Sau khi cài xong, trên Master node chạy lệnh kiểm tra Kubernetes Cluster vừa cài xong:

kubectl get nodes -o wide

Trạng thái của các node đều Ready là được. Tới đây chúng ta đã có một cụm Kubernetes để thực hành cho các bài tiếp theo.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
 Cài đặt Kubernetes, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master