Tóm Tắt
Kubernetes là gì? Khái niệm!
Kubernetes (còn gọi là k8s) là một hệ thống để chạy, quản lý, điều phối các ứng dụng được
container hóa trên một cụm máy (1 hay nhiều) gọi là cluster
.
Với Kubernetes bạn có thể cấu hình để chạy các ứng dụng, dịch vụ sao cho phù hợp nhất khi chúng tương tác với
nhau cũng như với bên ngoài. Bạn có thể điều chỉnh tăng giảm tài nguyên, bản chạy phục vụ cho dịch vụ (scale), bạn
có thể cập nhật (update), thu hồi update khi có vấn đề … Kubernetes là một công cụ mạnh mẽ, mềm dẻo, dễ mở rộng
khi so sánh nó với công cụ tương tự là Docker Swarm!
Kubernetes nó tương tác với những mạng lưới hệ thống được cho phép chạy ứng dụng được container hóa và có những API phù hợp giao tiếp xúc với Kubernetes ( như Docker containerd cri-o rktlet ), trong khoanh vùng phạm vi những bài viết này sẽ chọn trường hợp phổ cập là dùng Kubernetes với những máy thiết lập Docker. Bạn cần học Docker trước khi học Kubernetes – Xem Sử dụng Docker
Kubernetes được thiết kế bởi Google, về ngữ nghĩa thì tên này là tiếng Hy Lạp có nghĩa là tài công.
Bạn đang đọc: Giới thiệu và cài đặt Kubernetes Cluster
Sơ lược kiến trúc – các thành phần của Kubernetes
Hệ thống Kubernetes thật sự phức tạp, những thành phần của sẽ được tìm hiểu và khám phá dần qua từng bài viết, nhưng ở đây có một sơ đồ và một vài khái quát bắt đầu về kiến trúc / thành phần của nó
Master Server là máy chính của
cluster
, tại đây điều khiển cả cụm máy.etct là thành phần cơ bản cần thiết cho Kubernetes, nó lưu trữ các cấu hình chung cho cả cụm máy,
etct chạy tại máy master.
etct là một dự án nguồn mở (xem tại etcd) nó cung cấp dịch vụ
lưu dữ liệu theo cặp key/valuekube-apiserver chạy tại máy master, cung cấp các API Restful để các client (như kubectl) tương
tác với Kuberneteskube-scheduler chạy tại master, thành phần này giúp lựa chọn Node nào để chạy các ứng dụng căn
cứ vào tài nguyên và các thành phần khác sao cho hệ thống ổn định.kube-controller chạy tại master, nó điều khiển trạng thái cluster, tương tác để thực hiện các tác
vụ tạo, xóa, cập nhật … các tài nguyênKubelet dịch vụ vụ chạy trên tất cả các máy (Node), nó đảm đương giám sát chạy, dừng, duy trì các ứng
dụng chạy trên node của nó.Kube-proxy:
cung cấp mạng proxy để các ứng dụng nhận được traffic từ ngoài mạng vào cluster.Tạo Cluster Kubernetes
Để có một Kubernetes cần có những sever ( tối thiểu một máy ), trên những máy thiết lập Docker và Kubernetes. Một máy khởi tạo là master và những máy khác là worker liên kết vào. Có nhiều cách để có Cluster Kubernetes, như setup minikube để có kubernetes một nút ( node ) để thực hành thực tế ( môi trường tự nhiên chạy thử ), hay dùng ngay Kubernetes trong Docker Desktop, hay thiết lập một mạng lưới hệ thống không thiếu ( Cài Docker, Cài và khởi tạo Cluster Kubernetes ), hay mua từ những nhà sản xuất dịch vụ như Google Cloud Platform, AWS, Azuze …
Ở đây, ra mắt hai cách một là nếu muốn đơn thuần – cluster một nút thì dùng ngay từ Docker Destop để thử nghiệm. Hai là thiết lập vừa đủ một mạng lưới hệ thống – cách mà tiến hành product sẽ vận dụng .Tạo Cluster Kubernetes từ Docker Desktop
Đây là cách đơn thuần, nhanh gọn để có Cluster Kubernetes, vì Docker Destop những phiên bản mới đã tích hợp sẵn, việc của bạn chỉ đơn thuần là kích hoạt nó, chỉ có một hạn chế đó là Kubernetes chỉ có một Node, loại này thích hợp để bạn chạy thủ những tính năng mà ngại thông số kỹ thuật phức tạp
Để kích hoạt thì mở giao diện của Docker Destop nên (giống nhau cho cả bản Windows và macOS), rồi tại mục
Kubernetes chọnEnable Kubernetes
rồi nhấnApply
vậy là máy của bạn đã có Cluster
KubernetesKích hoạt Kubernetes trên macOS
Kích hoạt Kubernetes trên Windows
Sau khi kích hoạt bạn hoàn toàn có thể triển khai những lệnh sau để kiểu tra# Lấy thông tin Cluster kubectl cluster-info # Các Node có trong Cluster kubectl get nodeskubectl là trình client, nó được sử dụng để kết nối và tương tác với Cluster Kubernetes. Đây là công cụ chính để làm việc với Kubernetes, các phần sau sẽ nói kỹ về nó!
Tạm thời đến đây bạn chỉ cần biết là kiểm tra để khẳng định chắc chắn đang có một Cluster trên máy của bạn !
Tạo Cluster Kubernetes hoàn chỉnh
Phần này sẽ tạo ra một Cluster Kubernetes hoàn hảo từ 3 máy ( 3 VPS – hay 3 Server ) chạy CentOS, bạn hoàn toàn có thể dùng cách này khi tiến hành môi trường tự nhiên product. Hệ thống này gồm :
Tên máy/Hostname Thông tin hệ thống Vai trò master.xtl HĐH CentOS7, Docker CE, Kubernetes.
Địa chỉ IP172.16.10.100
Khởi tạo là master worker1.xtl HĐH CentOS7, Docker CE, Kubernetes.
Địa chỉ IP172.16.10.101
Khởi tạo là worker worker2.xtl HĐH CentOS7, Docker CE, Kubernetes.
Địa chỉ IP172.16.10.102
Khởi tạo là worker Để có mạng lưới hệ thống 3 máy trên khi chưa có điều kiện kèm theo mua những VPS thực thụ thì sẽ dùng máy ảo VirtualBox. Bạn hoàn toàn có thể tải về hệ quản lý CentOS 7, setup từng bước rồi triển khai thông số kỹ thuật. Tuy nhiên ở đây, nhằm mục đích nhanh gọn sẽ sử dụng Vagrant giúp tự động hóa quy trình tạo 3 máy ảo trên VirtualBox ( nếu bạn chưa biết Vagrant thì xem : Sử dụng Vagrant trước ). Đây là quy trình thiết lập phức tạp, cố gắng nỗ lực triển khai tuần tự từng bước !
Hãy tạo ra một thư mục đặt tên
kubernetes-centos7
để chứa các file cấu hình Vagrant.Tạo máy Master Kubernetes
Tạo thự mục con
master
, tạo trong nó file vagrantfile như sau:kubernetes-centos7 / master / Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : # Tạo máy ảo từ box centos/7, gán địa chỉ IP, đặt hostname, gán 2GB bộ nhớ, 2 cpus Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "172.16.10.100" config.vm.hostname = "master.xtl" config.vm.provider "virtualbox" do |vb| vb.name = "master.xtl" vb.cpus = 2 vb.memory = "2048" end # Chạy file install-docker-kube.sh sau khi nạp Box config.vm.provision "shell", path: "./../install-docker-kube.sh" # Chạy các lệnh shell config.vm.provision "shell", inline: <<-SHELL # Đặt pass 123 có tài khoản root và cho phép SSH echo "123" | passwd --stdin root sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl reload sshd # Ghi nội dung sau ra file /etc/hosts để truy cập được các máy theo HOSTNAME cat >>/etc/hosts<kubernetes-centos7 / install-docker-kube.sh #!/bin/bash # Cập nhật 12/2019 # Cai dat Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum update -y && yum install docker-ce-18.06.2.ce -y usermod -aG docker $(whoami) ## Create /etc/docker directory. mkdir /etc/docker # Setup daemon. cat > /etc/docker/daemon.json </dev/null 2>&1 systemctl stop firewalld # sysctl cat >>/etc/sysctl.d/kubernetes.conf< /dev/null 2>&1 # Tat swap sed -i '/swap/d' /etc/fstab swapoff -a # Add yum repo file for Kubernetes cat >>/etc/yum.repos.d/kubernetes.repo< >/etc/NetworkManager/conf.d/calico.conf< Thiết lập file chạy được chmode +x install-docker-kube.shTại thư mục
kubernetes-centos7/master/
gõ lệnh vagrant để tạo máymaster.xtl
vagrant upSau lệnh này, quá trình cài đặt diễn ra, kết thúc thì có máy ảo VirtualBox với tên master.xtl trong đó đã có
Docker, kubelet đang chạy ở địa chỉ IP172.16.10.100
, hãy ssh vào máy này bằng lệnh ssh với tài khoản
root có cấu hình pass là 123 ở trên.Khởi tạo Cluster
Trong lệnh khởi tạo cluster có tham số
--pod-network-cidr
để chọn cấu hình mạng của POD,
do dự định dùng Addoncalico
nên chọn--pod-network-cidr=192.168.0.0/16
Gõ lệnh sau để khở tạo là nút master của Cluster
kubeadm init --apiserver-advertise-address=172.16.10.100 --pod-network-cidr=192.168.0.0/16Sau khi lệnh chạy xong, chạy tiếp cụm lệnh nó nhu yếu chạy sau khi khởi tạo - để chép file thông số kỹ thuật bảo vệ trình kubectl trên máy này liên kết Cluster
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configTiếp đó, nó nhu yếu setup một Plugin mạng trong những Plugin tại addon, ở đây đã chọn calico, nên chạy lệnh sau để cài nó
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yamlGõ vài lệnh sau để kiểm tra
# Thông tin cluster kubectl cluster-info # Các node trong cluster kubectl get nodes # Các pod đang chạy trong tất cả các namespace kubectl get pods -A
Vậy là đã có Cluster với 1 node !Cấu hình kubectl máy trạm truy cập đến các Cluster
Chương trình client
kubectl
là công cụ dòng lệnh kết nối và tương tác với các Cluster Kubernetes,
thường khi cài đặt Kubernetes mọi người cũng cài luônkubectl
như phần trên trên, ngay cả máy
cài Docker Desktop cũng đã cókubectl
.
Tất nhiên, bạn có cài đặtkubectl
trên một máy không Docker, không Kubernetes với mục đích
chỉ dùng nó kết nối đến hệ thống Cluster từ xa. Nếu muốn cài ở máy độc lập như vậy
xem tại Intall kubectlFile cấu hình lệnh kubectl
Khi thi hành
kubectl
, thì nó đọc file cấu hình ở đường dẫn
$HOME/.kube/config
để biết các thông số để kết nối đến Cluster.
($HOME là thư mục gốc dành cho user đang chạy,
để biết chính xác gõ lệnhecho $HOME
) - tài khoản root thì đó là/root/.kube/config
Trở lại máy Host, để xem nội dung cấu hình
kubectl
gõ lệnhkubectl config viewTại máy master ở trên, có file cấu hình cho tại
/root/.kube/config
, ta copy file cấu hình này
ra lưu thành fileconfig-mycluster
(không ghi đè vào config hiện tại của máy HOST)scp [email protected]:/etc/kubernetes/admin.conf ~/.kube/config-mycluster( Nhớ thay đường dẫn theo user của bạn )
Vậy trên máy của tôi đang có 2 file thông số kỹ thuật
/User/xuanthulab/.kube/config-mycluster
cấu hình kết nối đến Cluster mới tạo ở trên/User/xuanthulab/.kube/config
cấu hình kết nối đến Cluster cục bộ của bản Kubernetes có sẵn
của DockerNếu muốn yêu cầu
kubectl
sử dụng ngay file cấu hình nào đó, thì gán biến môi trường
KUBECONFIG
bằng đường dẫn file cấu hình, ví dụ sử dụng file cấu hìnhconfig-mycluster
export KUBECONFIG=/Users/xuanthulab/.kube/config-myclusterSau lệnh đó thì kubectl sẽ dùng config-mycluster để có thông tin liên kết đến, nhưng trường hợp này chỉ có hiệu lực hiện hành trong một phiên thao tác, ví dụ nếu bạn đóng terminal và mở lại thì lại phải thiết lập lại biến môi trường tự nhiên như trên .
Sử dụng các context trong cấu hình kubectl
(hãy tắt terminal và mở lại để KUBECONFIG không còn tác dụng)
Khi bạn xem nội dung config với lệnh
kubectl config view
, bạn thấy rằng nó khai báo có các mục
cluster
là thông tin của cluster với tên,user
thông tin user được đăng nhập,
context
là ngữ cảnh sử dụng, mỗi ngữ cảnh có tên trong đó có thông tin user và cluster.Ở file trên bạn thấy mục
current-context
là context với têndocker-desktop
,
có nghĩa là kết nối đến cluster có tên docker-desktop với user là docker-desktopGiờ bạn sẽ thực thi tích hợp 2 file : config và config-mycluster thành 1 và lưu trở lại config .
export KUBECONFIG=~/.kube/config:~/.kube/config-mycluster kubectl config view --flatten > ~/.kube/config_temp mv ~/.kube/config_temp ~/.kube/configNhư vậy trong file thông số kỹ thuật đã có những ngữ cảnh khác nhau để sử dụng, đóng terminal và mở lại rồi gõ lệnh, có những ngữ cảnh nào
Ký hiệu
*
là cho biết context hiện tại, nếu muốn chuyển làm việc sang context có tên
kubernetes-admin@kubernetes
(nối với cluster mới tạo ở trên) thì gõ lệnhkubectl config use-context kubernetes-admin@kubernetesNhư vậy sử dụng context, giúp bạn lưu và quy đổi thuận tiện những loại liên kết đến những cluster của bạn
Cài đặt các node worker - kubernetes
Tạo thư mục
kubernetes-centos7/worker1
vàkubernetes-centos7/worker2
để cấu hình,
tạo các file Vagrantfile trong thư mục tương ứng với nội dungkubernetes-centos7 / worker1 / Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "172.16.10.101" config.vm.hostname = "worker1.xtl" config.vm.provider "virtualbox" do |vb| vb.name = "worker1.xtl" vb.cpus = 1 vb.memory = "1024" end config.vm.provision "shell", path: "./../install-docker-kube.sh" config.vm.provision "shell", inline: <<-SHELL echo "root password" echo "123" | passwd --stdin root sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl reload sshd cat >>/etc/hosts<kubernetes-centos7 / worker2 / Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "172.16.10.102" config.vm.hostname = "worker2.xtl" config.vm.provider "virtualbox" do |vb| vb.name = "worker2.xtl" vb.cpus = 1 vb.memory = "1024" end config.vm.provision "shell", path: "./../install-docker-kube.sh" config.vm.provision "shell", inline: <<-SHELL echo "root password" echo "123" | passwd --stdin root sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl reload sshd cat >>/etc/hosts<Sau đó vào từng thư mục, thực hiện lệnh
vagrant up
để tạo hai máy ảo có cài đặt docker và kubernetes, máy ảo có tên và ip tương ứng worker1.xtl (172.16.10.101), worker2.xtl (172.16.10.102)Kết nối Node vào Cluster
Hãy vào máy node master (bằng SSH
ssh [email protected]
). Thực hiện lệnh sau với Cluster để lấy lệnh kết nốikubeadm token create --print-join-commandNó cho nội dung lệnh
kubeadm join ...
thực hiện lệnh này trên các node worker thì node
worker sẽ nối vào ClusterSSH vào máy worker1, work2 và triển khai liên kết
Giờ kiểm tra những node có trong Clusterkubectl get nodesTổng kết lại
Đến đây bạn đã biết khởi tạo một Cluster từ Docker Destop hay một Cluster phức tạp 3 node thực thụ, tuy nhiên
quá trình cài đặt vẫn chưa hoàn thành, các công cụ cần để dễ dàng làm việc với Kubernetes sẽ tiếp tục ở bài sau,
nhưng hiện giờ bạn đã biết các lệnh:# khởi tạo một Cluster kubeadm init --apiserver-advertise-address=172.16.10.100 --pod-network-cidr=192.168.0.0/16 # Cài đặt giao diện mạng calico sử dụng bởi các Pod kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml # Thông tin cluster kubectl cluster-info # Các node (máy) trong cluster kubectl get nodes # Các pod (chứa container) đang chạy trong tất cả các namespace kubectl get pods -A # Xem nội dung cấu hình hiện tại của kubectl kubectl config view # Thiết lập file cấu hình kubectl sử dụng cho 1 phiên làm việc hiện tại của termianl export KUBECONFIG=/Users/xuanthulab/.kube/config-mycluster # Gộp file cấu hình kubectl export KUBECONFIG=~/.kube/config:~/.kube/config-mycluster kubectl config view --flatten > ~/.kube/config_temp mv ~/.kube/config_temp ~/.kube/config # Các ngữ cảnh hiện có trong config kubectl config get-contexts # Đổi ngữ cảnh làm việc (kết nối đến cluster nào) kubectl config use-context kubernetes-admin@kubernetes # Lấy mã kết nối vào Cluster kubeadm token create --print-join-command # node worker kết nối vào Cluster kubeadm join 172.16.10.100:6443 --token 5ajhhs.atikwelbpr0 ...ĐĂNG KÝ KÊNH, XEM CÁC VIDEO TRÊN XUANTHULAB
Đăng ký nhận bài viết mới
Source: https://final-blade.com
Category : Kiến thức Internet