kubernetes系列03—kubeadm安裝部署K8S集群

来源:https://www.cnblogs.com/along21/archive/2019/01/22/10303495.html
-Advertisement-
Play Games

本文收錄在容器技術學習系列文章總目錄 1、kubernetes安裝介紹 1.1 K8S架構圖 1.2 K8S搭建安裝示意圖 1.3 安裝kubernetes方法 優點:你只要安裝kubeadm即可;kubeadm會幫你自動部署安裝K8S集群;如:初始化K8S集群、配置各個插件的證書認證、部署集群網路 ...


本文收錄在容器技術學習系列文章總目錄

1、kubernetes安裝介紹

1.1 K8S架構圖

 

1.2 K8S搭建安裝示意圖

 

1.3 安裝kubernetes方法

1.3.1 方法1:使用kubeadm 安裝kubernetes(本文演示的就是此方法)
  •  優點:你只要安裝kubeadm即可;kubeadm會幫你自動部署安裝K8S集群;如:初始化K8S集群、配置各個插件的證書認證、部署集群網路等。安裝簡易。
  •  缺點:不是自己一步一步安裝,可能對K8S的理解不會那麼深;並且有那一部分有問題,自己不好修正。

 

1.3.2 方法2:二進位安裝部署kubernetes(詳見下篇kubernetes系列04—二進位安裝部署kubernetes集群
  •  優點:K8S集群所有東西,都由自己一手安裝搭建;清晰明瞭,更加深刻細節的掌握K8S;哪裡出錯便於快速查找驗證。
  •  缺點:安裝較為繁瑣麻煩,且易於出錯。

 

2、安裝kubernetes先決條件

2.1 組件版本

  •  docker 17.03.2
  •  kubeadm 1.11.1
  •  kubelet 1.11.1
  •  kubectl 1.11.1

 

2.2 集群機器

  •  kube-master192.168.10.103
  •  kube-node1192.168.10.104
  •  kube-node2192.168.10.105

 

2.3 主機名

1、設置永久主機名稱,然後重新登錄

$ sudo hostnamectl set-hostname master
$ sudo hostnamectl set-hostname node1 
$ sudo hostnamectl set-hostname node2 

  

2、修改 /etc/hostname  文件,添加主機名和 IP 的對應關係:

$ vim /etc/hosts
192.168.10.103 master
192.168.10.104 node1
192.168.10.105 node2

  

2.4 同步系統時間

$ yum -y install ntpdate
$ sudo ntpdate cn.pool.ntp.org

  

2.5 關閉防火牆

在每台機器上關閉防火牆:

關閉服務,並設為開機不自啟

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

清空防火牆規則

$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT

  

2.6 關閉 swap 分區

1、如果開啟了 swap 分區,kubelet 會啟動失敗(可以通過將參數 --fail-swap-on 設置為false 來忽略 swap on),故需要在每台機器上關閉 swap 分區:

$ sudo swapoff -a

  

2、為了防止開機自動掛載 swap 分區,可以註釋  /etc/fstab  中相應的條目:

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

  

2.7 關閉 SELinux

1、關閉 SELinux,否則後續 K8S 掛載目錄時可能報錯  Permission denied  

$ sudo setenforce 0

  

2、修改配置文件,永久生效;

$ vim /etc/selinux/config
SELINUX=disabled

  

3、使用kubeadm安裝K8S集群

3.1 認識kubeadm

以下操作在3個伺服器上,都要執行!

 

3.2 配置安裝源

3.2.1 配置docker-ce 源信息

1)添加docker-ce 源信息

[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

  

2)修改docker-ce 

[root@master ~]# sed -i '[email protected]@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

  

3.2.2 配置kubernetes倉庫

[root@node2 ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# vim kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1

  

3.2.3 更新yum倉庫

[root@master yum.repos.d]# yum clean all
[root@master yum.repos.d]# yum repolist 
repo id                            		repo name                                                 		status
base                             		base                                                       			9,363
docker-ce-stable/x86_64     	Docker CE Stable - x86_64                                     20
epel/x86_64                        	Extra Packages for Enterprise Linux 7 - x86_64    	12,663
kubernetes                         	Kubernetes Repo                                              	246
repolist: 22,292

  

3.3 安裝dockerkubeletkubeadmkubectl

  •  kubelet負責管理pods和它們上面的容器,維護容器的生命周期
  •  kubeadm:安裝K8S工具
  •  kubectlK8S命令行工具

1)安裝

[root@master ~]# yum -y install docker-ce-17.03.2.ce   下載穩定版本17.03.2
[root@master ~]# yum -y install kubeadm-1.11.1 kubelet-1.11.1 kubectl-1.11.1

  

2)安裝docker報錯(虛擬機中可能會遇到,如果沒有報錯請忽略)

Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)

           Requires: container-selinux >= 2.9

報錯原因: docker-ce-selinux 版本過低

解決辦法:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/網站下載對應版本的docker-ce-selinux,安裝即可

[root@master ~]# yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

再次安裝docker 成功:

[root@master ~]# yum -y install docker-ce-17.03.2.ce

  

3.4 啟動服務

3.4.1 配置啟動docker服務

1)添加加速器到配置文件

[root@master ~]# mkdir -p /etc/docker
[root@master ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

  

2)啟動服務

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker.service

  

3)打開iptables內生的橋接相關功能,已經預設開啟了,沒開啟的自行開啟

[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1

  

3.4.2 配置啟動kubelet服務

1)修改配置文件

[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY=MODE=ipvs

  

2)先設為開機自啟

[root@master ~]# systemctl enable kubelet.service

因為K8S集群還未初始化,所以kubelet 服務啟動不成功,下麵初始化完成,再啟動即可。

 

4、初始化kubernetes master節點

master伺服器上執行,完成以下所有操作

4.1 使用kubeadm init初始化

1)使用kubeadm init 進行初始化(需要進行很多操作,所以要等待一段時間)

[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

釋:

  •  --kubernetes-version指定kubeadm版本;我這裡下載的時候kubeadm最高時1.11.1版本
  •  --pod-network-cidr指定pod所屬網路
  •  --service-cidr指定service網段
  •  --ignore-preflight-errors=Swap/all忽略 swap/所有 報錯

註:

  因為kubeadm需要拉取必要的鏡像,這些鏡像需要科學上網;所以可以先在docker hub或其他鏡像倉庫拉取kube-proxykube-schedulerkube-apiserverkube-controller-manageretcdpause鏡像;並加上 --ignore-preflight-errors=all 忽略所有報錯即可

 

2)下載鏡像

我已經將我下載的鏡像導出,放入我的網盤,有需要的打賞一杯咖啡錢,私聊博主;博主會很快恢復的;

[root@master ~]# docker image load -i kube-apiserver-amd64.tar.gz
[root@master ~]# docker image load -i kube-proxy-amd64.tar.gz
[root@master ~]# docker image load -i kube-controller-manager-amd64.tar.gz
[root@master ~]# docker image load -i kube-scheduler-amd64.tar.gz
[root@master ~]# docker image load -i etcd-amd64.tar.gz
[root@master ~]# docker image load -i pause.tar.gz

  

3)初始化命令成功後,創建.kube目錄

[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

  

4.2 驗證

1)拉取了必須的鏡像

[root@master ~]# docker image ls
REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy-amd64                         v1.11.1             d5c25579d0ff        6 months ago        97.8 MB
k8s.gcr.io/kube-scheduler-amd64                     v1.11.1             272b3a60cd68        6 months ago        56.8 MB
k8s.gcr.io/kube-apiserver-amd64                     v1.11.1             816332bd9d11        6 months ago        187 MB
k8s.gcr.io/kube-controller-manager-amd64            v1.11.1             52096ee87d0e        6 months ago        155 MB
k8s.gcr.io/etcd-amd64                               3.2.18              b8df3b177be2        9 months ago        219 MB
k8s.gcr.io/pause                                    3.1                 da86e6ba6ca1        13 months ago       742 kB

  

2)開啟了kube-apiserver 6443

[root@master ~]# ss -nutlp
tcp   LISTEN     0      128                   :::6443                              :::*                   users:(("kube-apiserver",pid=1609,fd=3))

  

3)使用kubectl命令查詢集群信息

查詢組件狀態信息

[root@master ~]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

查詢集群節點信息(因為還沒有部署好flannel,所以節點顯示為NotReady

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    NotReady  master    13m       v1.11.1

查詢名稱空間,預設

[root@master ~]# kubectl get ns
NAME            STATUS    AGE
default         Active    13m
kube-public     Active    13m
kube-system     Active    13m

  

4.3 部署網路插件flannel

1)直接使用kubectl 執行gitlab上的flannel 部署文件

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

  

2)會看到下載好的flannel 的鏡像

[root@master ~]# docker image ls |grep flannel
quay.io/coreos/flannel                              v0.10.0-amd64       f0fad859c909        12 months ago       44.6 MB
quay.io/coreos/flannel                              v0.9.1              2b736d06ca4c        14 months ago       51.3 MB

  

3)驗證

① master 節點已經Ready

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    14m       v1.11.1

查詢kube-system名稱空間下

[root@master ~]# kubectl get pods -n kube-system(指定名稱空間) |grep flannel
NAME                             READY     STATUS    RESTARTS   AGE
kube-flannel-ds-amd64-4wck2      1/1       Running   0          1m

  

5、初始化kubernetes node節點

2node 伺服器上執行,完成以下所有操作

5.1 使用kubeadm join 初始化

1)初始化node節點;下邊的命令是master初始化完成後,下邊有提示的操作命令

[root@node1 ~]# kubeadm join 192.168.10.103:6443 --token t56pjr.cm898tj09xm9pkqz --discovery-token-ca-cert-hash sha256:3ffe1c840e8a4b334fc2cc3d976b0e3635410e52e3653bb39585b8b557f81bc4 --ignore-preflight-errors=Swap

  

2)從節點如果不能科學上網,只需從本地上傳2個鏡像即可;還是我網盤中的鏡像

[root@node1 ~]# docker image load -i kube-proxy-amd64.tar.gz
[root@node1 ~]# docker image load -i pause.tar.gz

  

5.2 驗證集群是否初始化成功

1)查詢2個節點的鏡像

[root@node1 ~]# docker image ls   
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy-amd64   v1.11.1             d5c25579d0ff        6 weeks ago         97.8 MB
quay.io/coreos/flannel        v0.10.0-amd64       f0fad859c909        7 months ago        44.6 MB
k8s.gcr.io/pause              3.1                 da86e6ba6ca1        8 months ago        742 kB

  

2)等2個從節點上下載好鏡像,初始化完成,再在主上查詢驗證

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    28m       v1.11.1
node1     Ready     <none>    7m        v1.11.1
node2     Ready     <none>    2m        v1.11.1

  

3)在主節點查詢kube-system名稱空間下關於node節點pod的信息

[root@master ~]# kubectl get pods -n kube-system -o wide |grep node
kube-flannel-ds-amd64-fcm9x             1/1       Running   15         91d       192.168.130.105   node2
kube-flannel-ds-amd64-hzkp7             1/1       Running   17         91d       192.168.130.104   node1
kube-proxy-f2kkn                        1/1       Running   34         139d      192.168.130.104   node1
kube-proxy-kkqln                        1/1       Running   35         139d      192.168.130.105   node2

  

  至此,kubernetes集群已經搭建安裝完成;kubeadm幫助我們在後臺完成了所有操作;想要自己全部手動搭建kubernetes集群;詳解下篇二進位安裝部署kubernetes集群---超詳細教程

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.進入終端 Ctrl + Alt +T 出現終端視窗 2.輸入命令: sudo apt-get install vim-gtk 3.驗證是否成功 安裝完vim後查看命令 vi tab鍵,就會關聯出所有vi開頭的命令,看是否有vim,有則成功. 4.美化vim 輸入命令:sudo vim /etc/ ...
  • 優點 缺點 HAProxy安裝方式可以是yum安裝或源碼安裝。yum安裝的版本都是當前合適系統的穩定版本,個人喜歡使用yum安裝。 haproxy配置文件可分為全局配置(globalsettings)和 代理配置(proxies),而代理段配置包含defaults、frontend、backend、 ...
  • 從centos7開始使用linux,之前版本的沒有深入瞭解過,今天要開放個埠,需要有防火牆的相關操作,從網上查資料都是編輯/etc/sysconfig目錄下麵的iptables文件,可我進入這個文件之後,並沒有發現這iptables文件,倒是有ip6tables-config和iptables-c ...
  • CentOS 6 + VMWare: 資源:https://pan.baidu.com/s/1AA4gaMpaoVaMor-tRU-n7A 提取碼:6e8r ( 內附 VMWare 14 激活密鑰 ) Linux安裝教程地址:https://www.cnblogs.com/ysocean/p/768 ...
  • 1、使用bash 使用雙括弧可以像C語言一樣直接使用運算符進行計算。 2、使用let命令 使用let命令後,可以直接跟表達式,不用加雙括弧。 3、使用expr命令 類似於let命令,expr命令除了計算表達式,還將提供的表達式的值列印到標準輸出。以及使用expr進行比較,增加變數值和查找字元串長度。 ...
  • 掛載方法 smbclient鏈接 如果沒有smbclient命令:yum安裝smbclient命令 ...
  • 問題 說下我linux配置情況,不一樣的可以選擇借鑒我的辦法。 在虛擬機中以最小化方式安裝centos7,ifconfig命令無效,而且在sbin目錄中沒有ifconfig文件。 原因 這是因為centos7已經不適用ifconfig命令了,已經用ip命令代替;同時網卡名稱也由eth0改為eno16 ...
  • VirtualBox安裝centos7配置靜態ip地址可以本機訪問,可以聯網。 在開始之前先說一下,不知道為什麼,我在網上百度的大多數是不能用的,或者只能主機訪問,或者只能聯網。 我的配置文件為ifcfg-enp0s3 話不多說:上圖 1.安裝完centos7之後進入 2.選擇設置 >網路 如下圖可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...