k8s安裝總結

本次安裝環境是Ubuntu16.04,其餘環境下,shell命令會有一些不一樣,但步驟應該大體相同,默認docker已經安裝完成html

下載

下載安裝下列軟件node

  • kubelet Node上運行的節點代理
  • kubeadm 用來master初始化集羣,及node加入集羣
  • kubectl 客戶端,用來向master發送請求,進行應用的部署

因爲的緣由,獲取這些軟件包有些麻煩。通過上網查閱了一些資料,目前主要有兩種下載安裝這些軟件包。linux

其中一種是去k8s的github倉庫上下載源碼,解壓安裝。我最開始就是用的這種方式,可是以失敗了結,詳情見後面的問題總結。git

第二種是添加k8s國內軟件鏡像源,使用apt進行下載安裝。主要在/etc/apt/source.list文件附加下面的源github

# 我使用的是阿里的鏡像,若是你使用的其餘國內鏡像,請找對應的k8s鏡像源
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

而後執行下列命令,安裝軟件。docker

# 我使用的是1.13.0-00版本,若是不清楚具體的版本號,
 # 可使用 apt-cache show 命令進行查詢
export K8S_VERSION=1.13.0-00
apt-get update # 更新軟件源
apt-get install kubelet=${K8S_VERSION}
apt-get install kubeadm=${K8S_VERSION}
apt-get install kubectl=${K8S_VERSION}

經過這種方式下載的軟件,已經被自動安裝好了,全部的環境已經被設置好了,能夠直接運行命令便可。
若是不熟悉kubelet和kubeadm的一些啓動參數,不建議下載可執行包,本身手動安裝。
經過apt進行安裝,能夠省下不少事情。我最終經過這種方式成功安裝好了三個軟件。shell

運行

首先須要作一些配置,以及下載必要的鏡像。原本能夠直接執行kubeadm init命令初始化master節點的,可是因爲國內有牆,因此在執行kubeadm init命令前,須要作一些額外的工做,主要是下載鏡像。ubuntu

關閉虛擬內存

通常狀況下須要執行下列命令關閉虛擬內存[1],不然報以下錯誤
圖片描述api

# 關閉swap。
# 可是系統重啓後,swap又會被啓動。
# 所以每次重啓節點,都要手動執行該命令關閉swap,不然kubelet會啓動失敗
# 能夠執行 sysctl -w vm.swappiness=0 完全關掉swap
swapoff -a

下載鏡像

因爲的緣由,在下載"pause"等docker鏡像時,會出現問題
圖片描述
解決辦法是從阿里docker鏡像網站上下載鏡像,而後修改鏡像的tag[3]
執行以下命令網絡

# $imageName指要下載鏡像的名稱,能夠經過 kubeadm config images list 命令獲取,但要去掉前面的k8s.gcr.io/
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName

執行kube init

執行kubeadm init命令,結果以下:
圖片描述
接下來配置kubectl(若是kubeadm init執行成功的,會顯示如何配置kubectl),主要執行下列命令

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 將文件權限設爲當前用戶

而後就能夠用kubectl執行一些命令測試是否成功運行(如 kubectl get nodes)。
因爲我是隻有一臺機器,因此只有一個master節點
圖片描述

node加入集羣

執行kubeadm token create --print-join-command獲取加入命令,而後在節點上執行,便可加入集羣
圖片描述

安裝插件

爲k8s安裝插件,至關於在集羣中建立一些資源,主要使用kubectl apply -f config_file

網絡插件

爲了使Pod之間可以跨節點通訊,所以須要按照額外的虛擬二層網絡組件。因爲我目前只有一臺節點,沒法測試,因此暫未安裝

問題總結

記一次手動安裝kubeadm,kubelet和kubectl失敗的經歷

首先須要去github上k8s的倉庫下,找到release頁面,並在該頁面下尋找須要下載的版本,好比咱們目前的項目須要1.13版,那麼我就找到了https://github.com/kubernetes...這個頁面,而後不要去下載這個頁面裏的壓縮包,找到CHANGELOG-1.13,點擊進入真正的下載頁面。以下圖紅圈所示:
圖片描述
進入該頁面,找到Server區域,下載k8s服務端的軟件包(壓縮包裏包括了安裝k8s必須的軟件),這裏我下載的是kubernetes-server-linux-amd64.tar.gz軟件包。
下載完成後,切換到指望安裝的目錄,而後解壓軟件包。這裏我但願安裝到/usr/local目錄下,因此執行下列命令

cd /usr/local
tar zxf kubernetes-server-linux-amd64.tar.gz

而後設置PATH,修改/etc/profile

export K8S_HOME=/usr/local/kubernetes
export PATH=$PATH:$K8S_HOME/server/bin

而後重啓,或者執行source /etc/profile,以更新環境變量。
經過這種方式下載軟件包後,還須要作不少工做去安裝配置kubeadm和kubelet,很麻煩。
通過我無數次的嘗試,我最終以失敗了結,沒有用這種方式安裝配置成功。
主要的問題在於kubeadm和kubelet的啓動參數有點複雜,本身配置的話,須要對k8s有很深刻的認識,不然會按下葫蘆浮起瓢。
我本身在那設置的半天,systemd都用的很熟練了,依然沒有安裝成功

系統重啓後,k8s沒有啓動

當我把個人ubuntu虛擬機重啓後,發現k8s的組件沒有自動運行,而後我一個個的去啓動相應的容器,可是沒有用。
最後我發現是由於kubelet沒有啓動成功,而沒有啓動的成功的緣由是由於swap沒有關閉。
而且我還發現當在master節點上成功啓動kubelet後,其餘的組件,如apiserver也會隨之啓動。

參考資料

[1] 只要用 kubeadm 小朋友都能部署 Kubernetes
[2] kubernetes基本安裝-k8s-3
[3] 基於阿里雲鏡像站安裝Kubernetes
[4] 用kubeadm在Ubuntu上快速構建Kubernetes測試集羣

相關文章
相關標籤/搜索