kubeadm 搭建 k8s 集群 [離線版] v1.18.6


Kubernetes 概述

kubernetes 是什么

  • kubernetes 是 Google 在 2014年開源的一個容器集群管理平台,kubernetes簡稱 k8s
  • k8s用於容器化應用程序的部署,擴展和管理。
  • k8s提供了容器的編排,資源調度,彈性伸縮,部署管理,服務發現等一系列功能
  • kubernetes目標是讓部署容器化應用簡單高效

Kubernetes 特性

  • 自我修復

    • 在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期的副本數量;殺死健康檢查失敗的容器,並且在未准備好之前不會處理客戶端請求,確保線上服務不中斷。
  • 伸縮性

    • 使用命令、UI或者基於CPU使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峰並發時的高可用性;業務低峰時回收資源,以最小成本運行服務。
  • 自動部署和回滾

    • K8S采用滾動更新策略更新應用,一次更新一個Pod,而不是同時刪除所有Pod,如果更新過程中出現問題,將回滾更改,確保升級不受影響業務。
  • 服務發現和負載均衡

    • K8S為多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題。
  • 機密和配置管理

    • 管理機密數據和應用程序配置,而不需要把敏感數據暴露在鏡像里,提高敏感數據安全性。並可以將一些常用的配置存儲在K8S中,方便應用程序使用。
  • 存儲編排

    • 掛載外部存儲系統,無論是來自本地存儲,公有雲(如AWS),還是網絡存儲(如NFS、GlusterFS、Ceph)都作為集群資源的一部分使用,極大提高存儲使用靈活性。
  • 批處理

    • 提供一次性任務,定時任務;滿足批量數據處理和分析的場景。

Kubeadm 概述

kubeadmKubernetes項目自帶的及集群構建工具,負責執行構建一個最小化的可用集群以及將其啟動等的必要基本步驟,kubeadmKubernetes集群全生命周期的管理工具,可用於實現集群的部署、升級、降級及拆除。kubeadm部署Kubernetes集群是將大部分資源以pod的方式運行,例如(kube-proxykube-controller-managerkube-schedulerkube-apiserverflannel)都是以pod方式運行。

Kubeadm僅關心如何初始化並啟動集群,余下的其他操作,例如安裝Kubernetes Dashboard、監控系統、日志系統等必要的附加組件則不在其考慮范圍之內,需要管理員自行部署。

Kubeadm集成了Kubeadm initkubeadm join等工具程序,其中kubeadm init用於集群的快速初始化,其核心功能是部署Master節點的各個組件,而kubeadm join則用於將節點快速加入到指定集群中,它們是創建Kubernetes集群最佳實踐的“快速路徑”。另外,kubeadm token可於集群構建后管理用於加入集群時使用的認證令牌(token),而kubeadm reset命令的功能則是刪除集群構建過程中生成的文件以重置回初始狀態。

Kuberadm 離線部署 k8s 集群

架構圖

環境規划

操作系統 IP CPU/MEM 主機名 角色
CentOS 7.7-x86_64 192.168.1.14 2/4G k8s-master Master
CentOS 7.7-x86_64 192.168.1.15 2/4G k8s-node1 Work node
CentOS 7.7-x86_64 192.168.1.16 2/4G k8s-node2 Work node

【軟件包版本號】

name version
Docker 3:19.03.13
kubeadm v1.18.6
kubernetes v1.18.6

安裝前提條件

  • Centos 7.x 最小化安裝
  • 時鍾同步

下載離線程序包

更新修復,請下載 k8s-kubeadmin.zip 壓縮包!!!

鏈接:https://pan.baidu.com/s/1Q3jbJcgq0rH8jK-LTpa6Vg
提取碼:hhhh

部署Master節點

  1. 執行自動安裝腳本

將下載到的程序包拷貝到 k8s-master 節點解壓,我這里的master節點是 192.168.1.14

[root@localhost ~]# ip a | egrep global
    inet 192.168.1.14/24 brd 192.168.1.255 scope global noprefixroute eth0
[root@localhost ~]# ls
anaconda-ks.cfg  k8s-kubeadm.tar.gz
[root@localhost ~]# tar xf k8s-kubeadm.tar.gz
[root@localhost ~]# cd k8s-kubeadm
[root@localhost k8s-kubeadm]# ls
docker-ce-19.03.12.tar.gz  flannel-v0.12.0-linux-amd64.tar.gz  install.sh  k8s-imagesV1.18.6.tar.gz  k8s-V1.18.6.tar.gz  kube-flannel.yml packages.tar.gz
# 執行腳本 ./install.sh [主機名]
[root@localhost k8s-kubeadm]# ./install.sh k8s-master

等待腳本執行自動安裝。。。

執行完畢后,會出現以下提示:

因為內核進行了升級,請重啟服務器。

重啟以后,內核版本更新為 5.8.13

  1. 使用 kubeadm 初始化集群
kubeadm init --kubernetes-version=v1.18.6 --apiserver-advertise-address=192.168.1.14 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

等待集群初始化完成。。。

kubeadm join 192.168.1.14:6443 --token utml0h.gj2nafii8xm1512e \
    --discovery-token-ca-cert-hash sha256:e91fb35667cf51c76b9afa288e4416a1314a1244158123ffbcee55b7ac4a70d4

上面命令記錄下來,這是將 node 節點加入到 集群的執行操作命令。

出現如上提示,集群初始化成功,執行提示命令:

[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

使用 kubectl 查看 nodes

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   74s   v1.18.6
  1. 初始化網絡插件 flannel
# 進入壓縮后的目錄里
[root@k8s-master ~]# cd k8s-kubeadm/
# 開始進行 flannel 初始化安裝
[root@k8s-master k8s-kubeadm]# kubectl apply -f kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

flannel 初始化完成后,查看 nodes 狀態:

[root@k8s-master k8s-kubeadm]# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   3m58s   v1.18.6

到此,通過 kubeadm 初始化安裝 master 節點完畢。接下來是 node 節點就很簡單。

部署node節點

  1. 將下載的壓縮包拷貝到 node 節點執行
[root@k8s-master ~]# scp k8s-kubeadm.tar.gz 192.168.1.15:/root/

------以下node節點執行------
[root@localhost ~]# ls
anaconda-ks.cfg  k8s-kubeadm.tar.gz
[root@localhost ~]# tar xf k8s-kubeadm.tar.gz
[root@localhost ~]# cd k8s-kubeadm/
# ./install.sh 主機名
[root@localhost k8s-kubeadm]# ./install.sh k8s-node1

這里和上面 master 初始化一樣,完成后重啟主機。

  1. 重啟完成后,執行 join 命令加入集群
# 就是上面記錄的命令
kubeadm join 192.168.1.14:6443 --token utml0h.gj2nafii8xm1512e \
    --discovery-token-ca-cert-hash sha256:e91fb35667cf51c76b9afa288e4416a1314a1244158123ffbcee55b7ac4a70d4

  1. 切換到 k8s-master 查看 k8s-node1 是否加入集群

k8s-node1 成功加入集群,剩下的 node 節點都是一樣的操作。

到此,通過 kubeadm 搭建 k8s 環境已經完成。

k8s 集群簡單測試

注意:本節測試需要網絡拉取鏡像,可以通過網絡將 鏡像拷貝到主機里 所需鏡像: nginx:alpine / busybox

這里做一個簡單的小測試來證明集群是健康正常運行的。

  1. 創建一個 nginx pod
[root@k8s-master ~]# kubectl run nginx-deploy --image=nginx:alpine
pod/nginx-deploy created
[root@k8s-master ~]# kubectl get pods
NAME           READY   STATUS    RESTARTS   AGE
nginx-deploy   1/1     Running   0          11s
[root@k8s-master ~]# kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
nginx-deploy   1/1     Running   0          18s   10.244.1.2   k8s-node1   <none>           <none>

  1. 為 nginx pod 創建一個服務
[root@k8s-master ~]# kubectl expose pod nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
service/nginx exposed
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   21m
nginx        ClusterIP   10.106.14.253   <none>        80/TCP    9s
[root@k8s-master ~]# curl 10.106.14.253
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  1. 創建一個 busybox pod 來通過 nginx 服務名訪問
[root@k8s-master ~]# kubectl run client --image=busybox -it
If you don't see a command prompt, try pressing enter.

------ 通過服務名來訪問 nginx 服務 ------ 
/ # wget -O - -q nginx
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

測試通過,網絡及dns服務正常。集群處於正常健康狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM