在之前的幾篇文章中,主要還是講解了關於簡單的docker容器該如何進行管理和操作,在接下來的這篇文章開始,我們將開始進入對於k8s模塊的學習
不熟悉的可以先回顧之前的章節,Docker教程系列文章將歸置到菜單欄:連載中..->Docker一欄。
在進行對k8s的學習之前,我們首先來進行幾個知識點的回顧:
什么是容器?
docker自身具有哪些特點?
什么是容器?
通俗易懂地來講,容器是一系列相互隔離的進程。它們自身具備有輕量操作系統層面的虛擬化技術,每個容器都有着自己的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服務即可。
好了,今天的文章就到這里,搭建過程有問題可以留言,在下一篇 Docker從入門到掉坑 文章中將挑選比較普遍的問題給出解決。如果在搭建過程遇到有趣的問題解決了,也可以留言分享出來哦。