Phần 2: Cài đặt Kubernetes Xây Dựng Cluster Và Build App Bằng File ...

  • Contact
  • About
  • Rules & Privacy
ITBLOGNOTE | Knowledge Is Power

Header Ads Widget

ITBLOGNOTE | Knowledge Is Power

Ticker

6/recent/ticker-posts HomeLinuxPhần 2: Cài đặt Kubernetes xây dựng Cluster và build App bằng file yaml cơ bản trên Ubuntu Phần 2: Cài đặt Kubernetes xây dựng Cluster và build App bằng file yaml cơ bản trên Ubuntu Keywords: How to install kubernetes cluster and build app by file yaml bassic on ubuntuNhư hướng dẫn trước của mình, thì mình đã hướng dẫn xong cho các bạn cách cài đặt kubernetes với rancher rồi đúng không, với ai không thích sử dụng rancher mà lại muốn một kubernetes gốc thì có thể sử dụng cách làm tay trong phần 2 nàyCác bạn có thể xem lại
  • Phần 1: Hướng dẫn cài và quản lý Kubernetes Cluster với Rancher version 2.3.8 trên Ubuntu
Khác với phần 1 một chút là chúng ta chỉ cần có tổng cộng 3 máy server cho Lab này, mình sẻ nói lướt qua chổ này, các bạn có thể coi kỷ hơn bằng cách xem lại phần 1 nhé và 3 máy server cần cho Lab này sẻ là Node Master, Node Worker1 và Node Worker2 cũng lần lượt là
  • Server 1: Docker và làm Node Master (Ram >= 3GB + CPU 4 + Disk 20GB)
  • Server 2: Docker và làm Node Worker (Ram 1GB + CPU 1 + Disk 20GB)
  • Server 3: Docker và làm Node Worker (Ram 1GB + CPU 1 + Disk 20GB)
Bước 1: Cài đặt Docker trên tất cả 3 server sudo apt-get update sudo apt-get install docker.io docker --version sudo systemctl enable docker sudo systemctl start docker sudo systemctl status dockerĐến đây mọi thứ vẫn giống như phần 1 là hiện tại 3 server của chúng ta sẻ được miêu tả gần giống như sauBước 2: Chuẩn bị một số phần cơ bản trước khi cài đặt KubernetesSẻ có rất nhiều vấn đề cần chuẩn bị vì thế mình sẻ nói ra từng vấn đề một cho các bạn giải quyết trước nha
  • Đặt tên lại cho các máy server để chúng ta dễ dàng phân biệt và nó sẻ sử dụng tên đó để xây dựng cho vùng Cluster, với mình thì mình đã đặt tên lần lượt cho tất cả các máy là như sau: k8s-master, k8s-node1, k8s-node2
  • Thực hiện update và cài đặt một số gói hổ trợ
apt-get update -y && apt-get upgrade -y apt-get -y install -y vim curl wget
  • Tắt tính năng swap trên OS cho 3 máy server bởi vì Kubernetes không sử dụng phân vùng swap, nếu có nó sẻ không cài đặt và báo lỗi nên vì vậy ta lần lượt thực hiện trên tất cả các máy bằng cách chạy lệnh sau
swapoff -aSau đó mở file fstab để comment dòng swap lại nhé vi /etc/fstabCác bạn cũng làm như thế với 2 máy còn lại là node1 và node2 rồi sau đó kiểm tra bằng cách gõ lệnh free -mNếu ngay chổ phân vùng Swap mà để 0 hết thì đã ok rồi đấy
  • Bây giờ các bạn phải chắc cú 1 điều là 3 máy server hiện tại có Class IP trùng với nhau và có thể ping thấy nhau, để chắc cú hơn các bạn có thể add IP vào /etc/hosts để máy dễ dàng nhìn thấy nhau hơn qua IP và name bằng cách
vi /etc/hostsLàm giống vậy cho Node1 và Node2 luôn nhéNhư bạn thấy trên hình thì 3 máy server của mình cùng class mạng 1 và mình đã khai báo cho toàn bộ y như vậy trong file hosts để nó dễ nhận diện lấy nhau dễ hơn chứ thật ra không có cũng ko mất gì mấy hihiBước 3: Thực hiện cài đặt một số thành phần cần thiết cho K8S (Mình sẻ gọi tắt như thế cho Kubernetes các bạn nhé)Cài đặt kubelet, kubeadm và kubectl cho tất cả các node server luôn nhé curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" sudo apt-get install kubeadm kubelet kubectl sudo apt-mark hold kubeadm kubelet kubectlTrong đó:
  1. kubeadm: Được sử dụng để có thể thiết lập cụm cluster cho k8s
  2. kubelet: Thành phần chạy trên các host, có nhiệm vụ kích hoạt pods và container cho cụm cluster
  3. kubectl: Công cụ cung cấp cli (Giao diện dòng lệnh) để thực thi lệnh k8s
Bước 4: Xây dựng Node Master để tạo Cluster cho K8STại đây mình chỉ thực hiện duy nhất trên Node Master thôi nhé, bắt đầu chạy câu lệnh sau để tạo cụm cluster sudo kubeadm init --pod-network-cidr=10.244.0.0/16 hoặc kubeadm init --apiserver-advertise-address 10.0.1.160 --pod-network-cidr=10.244.0.0/16 Trong đó:
  1. --apiserver-advertise-address: Chính là nơi để yêu cầu địa chỉ IP của máy k8s-master của mình kiểu dạng như trên thì nó tự tìm đến địa chỉ IP của máy master luôn nhưng nếu như máy bạn nhiều card mạng quá thì các bạn có thể thêm lệnh này để khai báo địa chỉ IP mà bạn muốn thằng k8s-master sử dụng
  2. --pod-network-cidr: Đây là đỉa chỉ mạng phụ thuộc mà công nghệ network kết hợp với k8s, trong hướng dẫn lần này của chúng ta đang sử dụng flannet để connect với tất cả các node mà thằng flannet này sử dụng dãi IP: 10.244.0.0/16
Mình bắt đầu chạy nhưng do mình quên nâng CPU cho con Master lên thành ra nó lỗi như hình dưới đấy hoặc các bạn đã chỉnh CPU lên rồi nhưng lỗi dưới vẫn còn thì các bạn cứ truy cập vào đường dẫn sau của docker và thêm 1 file daemon.json với nội dung sau root@master1:~# cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" }Nếu như các bạn thấy được giống hình sau nghĩa là các bạn đã thành công rồi đấyNhư hình trên các bạn cần chú ý những cái nó yêu cầu sau, thực hiện chạy những lệnh sau ở Node Master mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf echo "source <(kubectl completion bash)" >> ~/.bashrcMình đã thêm 2 câu lệnh vào để nó hoàn hiện hơn đó là lệnh tự hoàn thiện command khi nhấn tab và lệnh export config, cũng cần chú ý 1 câu lệnh nữa nhưng câu lệnh này sẻ không chạy trên Node Master đâu nhé, mà sẻ chạy trên các Node Worker để thực hiện Join vào ClusterNhưng hiện tại các bạn chưa đụng chạm gì tới lệnh này cả, cứ chú ý nó và save nó vào trong file note nào đó đi để lát chúng ta sẻ lấy ra sử dụngBước 5: Cài đặt Pod NetworkTại node-master chúng ta thực hiện lệnh sau để có thể xây dựng deploy pod network cho cluster sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlBạn có thể kiểm tra mọi thứ bằng lệnh sau kubectl get pods --all-namespacesBước 6: Thực hiện tham gia cluster cho k8s-node1 và k8s-node2Bạn còn nhớ cái câu lệnh mà mình yêu cầu bạn save lại khi nảy không, bây giờ là lúc bạn lấy nó ra sử dụng rồi đấy, chạy câu lệnh đó vào node1 và node2, đừng copy theo y chang của mình vì mõi k8s cluster nó sẻ tạo ra 1 cái token riêng biệt, nên vì vậy câu lệnh của các bạn có thể hơi giống mình nhưng lại khác phần token đấy kubeadm join 10.0.1.160:6443 --token 0sd1ae.f82txdwr6hjo2cxx --discovery-token-ca-cert-hash sha256:fada0831efaaa86566370c0c689c60866b75bd9546b5d6a0d8b05350251fbdb4Thực hiện xong con node1 rồi mới nhảy qua con node 2 nhé, nếu nó hiện thông báo vậy nghĩa là ok rồi đấyTrên máy master chúng ta thực hiện chạy lệnh sau để xem nó đã kết nối ok chưa nhé kubectl get nodesNhư các bạn đã thấy mọi thứ đã Ready cả rồi đấy, nói thật bây giờ đa phần thì các bạn chỉ sử dụng con master thôi còn con worker sau khi tham gia vào master thì nó đã không còn giá trị lợi dụng so với chúng ta nữa vì con master sẻ ra lệnh cho bọn nó làm hết mọi vấn đề, nếu trong quá trình làm mà bạn thấy một node nào đó đang bị lỗi hoặc pending chỗ nào đó các bạn có thể sử dụng lệnh sau để check và kiểm tra nó nhé kubectl describe pod kube-scheduler-k8s-master --namespace=kube-systemGiả sử ở trên mình check thử node master, nhưng hiện tại node master của mình vẫn ổn heheOk như vậy là mình đã hướng dẫn xong cho các bạn cách cài đặt thằng kubernetes hoàn chỉnh bằng tay rồi đấy, mình sẻ hướng dẫn các bạn tiếp tục xây dựng một số ứng dụng cơ bản để các bạn có thể thực thi k8s với kubectl bằng dòng lệnh, nhưng có 2 cách chạy thử ứng dụng đó là các bạn chạy từng dòng lệnh 1 và cách 2 sẻ là sử dụng file yaml để build 1 ứng dụng chỉ bằng 1 command, ok không dài dòng nữa chúng ta sẻ thực hiện cách 1 trước

Cách 1: Cài đặt web nginx trên k8s cơ bản bằng lệnh

Như ở trên mình chạy thử các dòng lệnh cho các bạn thấy thì hiện tại pods, services, deployments vẫn chưa có 1 bất kì gì khác lạ cả, chỉ có mõi dãi IP Cluster hồi nảy mình tạo trong phần services thôi, thực hiện chạy 2 câu lệnh sau để deploy nginx và phân chia nginx cho 2 node làm việc, bây giờ chỉ làm việc trên máy master thôi nên các bạn cứ mở máy master lên mà chạy lệnh thôi, 2 thằng kia hết giá trị lợi dụng rồi kaka kubectl create deployment k8s-nginx --image=nginxSau khi chạy lệnh trên, mình sẻ kiểm tra lại tất cả cho các bạn thấy 1 lần nữa nhéNhư các bạn thấy pods của mình đã tạo ra 1 pods nginx, giá trị deployments cũng ready 1/1 nghĩa là mọi thứ đã ổn, nhưng nếu mình muốn tạo thêm 1 pods nginx nữa để khi con pods này chết thì vẫn còn con khác hoặc tự restore trở lại hoặc giải quyết vấn đề loadbalancer thì sao ? ok chạy tiếp lệnh sau nhé kubectl scale deployment k8s-nginx --replicas=2Thực hiện kiểm tra lại lần nữa coi mọi thứ thế nào nhéBây giờ Pods của chúng ta đã tăng lênh 2, deployments do lúc đầu nó chưa running xong mà mình bấm nên nó vẫn để 1/2 nhưng khi mình chạy lại lệnh 1 lần nữa thì đã 2/2 rồi đồng nghĩa pods cũng đã lên luôn rồi, ok vẫn ổn, mình sẻ thử delete 1 pods và get lại pods đó cho các bạn xem nhéNhư bạn đã thấy ở trên khi mình delete 1 pod bất kì thì nó sẻ tự động tạo ra 1 pod khác hoàn toàn vì vậy việc chết server là khá khó, trừ khi bạn delete deployments và service thì may ra nó mới chịu dừng lại, ok quá trình test về pod này kia đã xong web nginx thì ok rồi nhưng nó vẫn chưa xong vì mình chưa tạo services cho nó chạy mà thực hiện tạo bằng lệnh sau kubectl expose deploy k8s-nginx --port 80 --target-port 80 --type NodePortSau khi các bạn chạy lệnh trên thì giờ đây bạn có thể truy cập vào trang web nginx rồi đấy, lúc này 1 services trong k8s đã được tạo ra Ok, thực hiện truy cập trên máy ngoài hoàn toàn luôn nghĩa là các máy khác với những máy node trong dãy mạng lan với máy master muốn truy cập được thì phải thông qua 1 port khác port 80 do đó mình đã thêm --type là NodePort có nghĩa là một port ngẫu nhiên nào đó, nó sẻ tự tạo ra giúp mình, như hình trên bạn đã thấy nó đã tạo ra port 30623 để ta có thể truy cập từ ngoài vàoOk bây giờ bạn có thể truy cập nginx từ 3 máy node với port 30623 rồi đấy, chúng ta chuyển đến phần build bằng file yaml cơ bản nhé, bây giờ bạn thực hiện xóa đi service và phần deploy của k8s nảy mình đã tạo đi bằng các câu lệnh sau kubectl delete service k8s-nginx kubectl delete deployments k8s-nginx

Cách 2: Xây dựng app cơ bản trên k8s bằng file yaml

Sau khi xóa chúng đi ta cũng không thể nào truy cập được nginx nữa, bây giờ ta phải xây dựng lại nginx app bằng file yaml chứ không làm bằng lệnh tay như trên nữaCoi như là đã kết thúc phần quản lý ứng dụng cơ bản với k8s cluster rồi đấy bây giờ tạo file yaml nào vi nginx-app.yamlVới nội dung sau: apiVersion: v1 kind: Service metadata: name: k8s-nginx labels: app: nginx spec: type: NodePort ports: - port: 80 selector: app: nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: k8s-nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80Hoặc các bạn có thể sử dụng lệnh sau để lấy file về máy, sau đó sửa lại như ở trên giống mình các bạn nhé wget https://k8s.io/examples/application/nginx-app.yamlSau đó thực hiện lệnh sau để deploy chúng lên kubectl create -f nginx-app.yamlOk như vậy đã thành công rồi đấy, sau khi tạo xong thì giờ đây Port hiện tại của chúng ta sẻ là 30033 các bạn thử truy cập vào nhéNgon lành cành sung liền, như vậy mình đã hướng dẫn các bạn xong các bước cơ bản với k8s rồi, cũng khá thú vị đúng không, việc tìm hiểu cấu trúc file khi bạn đã hiểu được phần chạy tay cơ bản thì mình tin chắc rằng file yaml các bạn nhìn vào là hiểu liền, chúc các bạn thành công, nếu bài viết của mình có ích thì giúp mình DONATE ở phía dưới trang web nhé để mình có thêm động lực viết những bài viết tốt hơn nhé. Cảm ơn các bạn rất nhiều !Nguồn: itblognote.com Tags: Container Linux
  • Newer
  • Older
Yuki Thành Phát (thanhphatit)

Posted by: Yuki Thành Phát (thanhphatit)

Hiện tại mình là IT làm việc tại TP. HCM, mình rất thích giao lưu chia sẻ kiến thức cùng tất cả mọi người, thích khám phá tiềm tòi những điều khó khăn trong công việc biến những cái người ta không thể làm được thành những điều có thể, bởi lẻ với mình trong IT không có gì là không thể cả, mình cũng rất đam mê lập trình nhất là về ngôn ngữ hệ thống Linux.

You may like these posts

Post a Comment

0 Comments

Vài lời muốn nói:* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.

Translate

Social Plugin

About Blog

Xin chào các bạn, mình là Phát hiện tại mình là một DevOps Engineer và mình xây dựng Blog này với tiêu chí đúng với cái tên "ITBLOGNOTE.COM" của nó, là nơi mà mình sẻ lưu trữ lại những kiến thức mà bản thân đã tích lũy được trong đó 80% bài viết về IT | System Admin | DevOps | Security | System Programming và 20% bài viết về những điều hay trong cuộc sống lẫn các kiến thức khác để chia sẻ cùng các bạn, đây cũng như là kho lưu trữ Note Public tổng hợp của cá nhân mình, với phương châm: "Nâng cao kiến thức bản thân bằng cách chia sẻ, nhận đóng góp từ mọi người!"

Fanpage

Labels

  • Container 7
  • DevOps 31
  • KaliLinux 6
  • Linux 102
  • TricksHacking 22
  • TricksLinux 48
  • TricksOther 55
  • TricksWindows 49

My Music

Info

  • INFO
  • TOOLS

Random Posts

3/random/post-list

Recent in Linux

3/Linux/post-list

Popular Posts

Hướng dẫn sử dụng Nmap để Scan Port trên Kali Linux

Hướng dẫn sử dụng Nmap để Scan Port trên Kali Linux

Báo cáo đồ án nghiên cứu các giải thuật tìm kiếm Heuristic

Báo cáo đồ án nghiên cứu các giải thuật tìm kiếm Heuristic

Phần mềm NSSM tạo services cho Windows

Phần mềm NSSM tạo services cho Windows

DMCA.com Protection Status

Menu Footer Widget

  • Home
  • Contact
  • About
  • Rules & Privacy
Copyright © ITBLOGNOTE | Knowledge Is Power

Từ khóa » Cài đặt K8s