Docker從入門到掉坑(四) 國內搭建k8s避坑指南

在之前的幾篇文章中,主要還是講解了關於簡單的docker容器該如何進行管理和操作,在接下來的這篇文章開始,我們將開始進入對於k8s模塊的學習
在進行對k8s的學習之前,我們首先來進行幾個知識點的回顧:

什麼是容器?
通俗易懂地來講,容器是一系列相互隔離的進程。它們自身具備有輕量操作系統層面的虛擬化技術,每個容器都有着自己的PID,User,UTS,和傳統的虛擬機相比,容器技術更加地輕便,帶來的損耗也更加小。

docker自身具有哪些特點?
docker有着一次構建,到處運行的特點。其本身是通過cgroup來進行信息內存監控的,並且通過namespace來實現進程的隔離。簡單地來說namespace就是一種Linux內部提供的用於隔離環境的技術,cgroup最早是由google內部的工程師發起的,該技術可以更好的將一些共享的系統資源分配給指定的進程使用。所以說實際上docker只是個除了使用了go語言以外,其他都比較舊的東西。

隨着技術的不斷髮展,原先簡單的容器技術也開始面對着不一樣的全新挑戰。例如說:跨機器的部署, 資源的調度,各個不同的容器進行負載均衡等問題都開始逐漸引發了工程師們的思考。

常見的編排工具
我們前一篇文章中有提到一種叫做docker compose的技術,這種技術確實解決了多個容器之間相互依賴,手動啓動容器的繁瑣問題。市面上比較成熟的容器編排平臺有Kubernetes和Docker Swarm兩類平臺,前者是由google公司進行研發的,後者則是由Docker公司自身進行開發的。本文我們主要還是圍繞k8s來進行講解。

相信對於k8s感興趣的朋友,應該有去網上搜過一些安裝k8s的文章,但是其中大多數都被所謂的 “梯子” 給卡死了。筆者也是在網上搜颳了大量的資料,踩扁了許多坑,纔將下邊的內容幫大家進行了彙總,希望下邊的內容對你有幫助。

由於k8s集羣搭建的機器成本過高,官方提供了一個叫做 Minikube 的東西,供初學者入門學習。筆者之前試過通過美國的服務器來搭建minikube,但是這樣的教程對於國內大多數的開發者來說實用性並不高。後來將源地址切換爲了阿里雲的源地址,發現難度會降低很多,不得不說阿里雲還是很良心的。

環境準備:
一臺centos7的虛擬機 或者 雲主機,建議cpu至少爲2核,內存大於2gb,並且網絡通暢。

安裝docker環境
對於docker環境的安裝我在這裏還是列出來比較好,minikube對於docker依賴的版本其實是有匹配的,過高的docker的版本環境中反而會導致minikube的安裝失敗。這裏我採用了 docker-ce 17.12.0 版本
相關的安裝指令如下:

#移除原先的docker安裝包
yum remove docker  docker-common docker-selinux docker-engine

#安裝必備的插件
yum install -y yum-utils device-mapper-persistent-data lvm2

#設置docker的安裝源頭


#查看所有倉庫中所有docker版本,並選擇特定版本安裝
yum list docker-ce --showduplicates | sort -r

#安裝指定版本的docker
yum install docker-ce-17.12.0.ce

#啓動docker,並設置爲開機自啓動
systemctl start docker
systemctl enable docker

#最後驗證docker版本
docker version

下載kubectl
這個時候我們的docker環境就已經安裝完畢了,那麼接下來我們便開始進入kubectl的安裝了。kubectl是啥?通俗易懂地來理解,這個東西就是一個管理k8s集羣的命令發送工具,沒有kubectl 我們沒法對集羣進行各種管理,所以接下來我們需要對它進行安裝。

首先是下載kubectl,阿里源的,國內開發者優先考慮:

curl -Lo kubectl    http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl

接着我們將其cp到/user/local/bin目錄下邊,並且進行授權:

cp kubectl /usr/local/bin
chmod +x kubectl

驗證kubectl的方式:

kubectl version

在確認kubectl安裝完成之後,會看到這樣的界面:
在這裏插入圖片描述

minikube的下載和啓動
下載
ps:這裏我所採用的minikube版本爲1.4.0

curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.4.0/minikube-linux-amd64

chmod +x minikube

cp minikube /usr/local/bin

啓動

minikube start --vm-driver=none 

這裏安裝的過程可能會比較久,筆者當時大概等待了30分鐘


ps:文章開頭我提到過centos機器最好內存在2g以上,並且cpu內核數至少爲2,否則啓動的時候可能會報下邊這種錯誤:
cpu數量不足異常

開啓服務期間可能遇到的問題:

下邊分享幾個我在啓動過程中遇到的問題:

[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2

這個異常我曾經在github上邊搜到過解決方式,通過添加–extra-config=kubeadm.ignore-preflight-errors=NumCPU --cpus 1命令的形式來解決,但是我試了下再不同版本的minikube上邊這條命令所帶來的效果並不一樣,如果對你有幫助的話,可以嘗試一下,完整命令如下:

minikube start --vm-driver=none  --extra-config=kubeadm.ignore-preflight-errors=NumCPU --cpus 1

起初我在一臺內存只有0.5g的機器上邊啓動minikube,結果報出了內存不足異常,核心描述如下:

k8s cannot allocate memory

關於這種異常唯一的解決方式就是加內存了。

minikube和docker的版本不匹配問題:

Docker 18.09: [ERROR SystemVerification]: unsupported docker version: 18.09.0 

我在一開始的時候採用了過高版本的docker,導致後邊安裝minikube的時候出現異常。

當安裝完成之後,你會看到這樣的界面:
在這裏插入圖片描述

安裝完成之後,我們可以通過命令來查看minikube是否運作成功

[root@localhost k8s]# minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 10.1.10.51

使用minikube啓動一個tomcat容器

 
 kubectl create deployment tomcat --image=tomcat:8.0
 
 kubectl expose deployment tomcat --type=NodePort --port=8080
 
 minikube service tomcat 

啓動tomcat服務成功之後,你可能會看到這樣的信息:
在這裏插入圖片描述
然後我們通過訪問這裏的url路徑進行測試:
在這裏插入圖片描述
ok訪問成功了。
如果你到達了這一步,一切都還順利的話,那麼恭喜你,minikube的基本環境已經安裝成功了,下邊就只需要參考着官方文檔進行對k8s的一步步學習了。
在下一篇文章裏面,我會開始對k8s的各種命令,功能,結構進行講解。

寫在文末

在上一篇的文章底部留言區,看到了一些網友的提問,我在這裏進行統一回復一下:
@BC 讀者的提問:

對於不同機器中的環境配置問題,可以在不同的機器上邊設置一個環境變量值,例如說生產的機器,就定義一個變量:export ENV=prod
然後在dockerfile文件中引用環境變量的值,判斷讀取不同的配置,從而使得部署的機器能夠自動識別讀取不同的配置參數。

@忘忘不念。讀者的提問:
關於docker pull超時的問題,通常的原因在於拉去鏡像的地址有異常。docker一般都是往官方的Docker Hub中拉去鏡像,通常拉去並不能成功,而且速度比較慢,建議可以給Docker配置一個國內的鏡像源,例如說DaoCloud,使用的方法如下:
修改我們的 etc/default/docker文件配置:

DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io"

使用service docker restart重啓Docker服務即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章