Docker & k8s 系列二:本機k8s環境搭建

  • 2020 年 5 月 17 日
  • 筆記

本篇將會講解k8s是什麼?本機k8s環境搭建,部署一個pod並演示幾個kubectl命令,k8s dashboard安裝。

k8s是什麼

k8s是kubernetes的簡寫,它是一個全新的基於容器技術的分散式架構領先方案。它是Google內部使用的大規模集群管理系統Borg的一個開源版本。這個項目在Google內部使用多年,由於員工簽署了保密協議,所以外界對這個項目一無所知。直到kubernetes的開源一鳴驚人,大家才得以了解。Kubernetes是一個開放的開發平台,並不限制特定的程式語言,任何語言編寫的服務都可以被映射為Kubernetes的Service(服務),並通過標準的TCP通訊協議進行交互。你在處理分散式系統所需要用到的能力,在kubernetes中都支援,比如服務發現、故障發現和自我修復、滾動升級、擴容等。總之,Kubernetes是一個分散式解決方案、是一個一站式的完備的分散式系統開發和支撐平台。k8s+docker使得小規模團隊甚至是個人hold住大型項目成為可能。

本機k8s環境搭建

如果之前沒有接觸過k8s的話,也許聽完上面的解釋,並不是很清楚。而在軟體技術的學習中,實操十分重要,搭建好環境,實際操作幾次就不會覺得那麼陌生了。在本機搭建k8s環境,我們有兩種方式:

  1. k8s for docker desktop
  2. Minikube

本例將使用第一種方式,在mac電腦上搭建k8s環境。這種方式相對簡單,可以快速的搭建起來實驗看看效果。以Mac為例,當我們按照上一篇文章的步驟配置好了docker環境之後,點擊docker小圖標,打開菜單,找到「Preferences..」,在彈出的配窗口中,可以看到Kubernetes,介面如下:

當我們安裝好docker desktop for mac/windows之後,默認情況下,「Enable kubernetes」 是沒勾選的。我們需要先進行下面的操作,然後過來勾選這個以啟動k8s。

給docker daemon配置阿里雲鏡像加速器

為了使得下載某些鏡像更快,我們需要配置一下鏡像加速器。為了使用阿里雲的鏡像加速器,你需要先註冊一個阿里雲帳號(進入aliyun.com註冊即可)。登錄阿里雲的控制台之後,進入「容器鏡像服務」,在左側的菜單中展開「鏡像中心」,點擊「鏡像加速器」,可以看到你的專屬鏡像加速器地址,大概是這樣子:

//xxxxx.mirror.aliyuncs.com

如果你註冊阿里雲帳號還真,找不到這個頁面,可以直接從這個鏈接進入:

//cr.console.aliyun.com/cn-hangzhou/instances/mirrors

得到加速器地址之後,把他配置到docker裡邊去,docker->Preferences->Daemon->Registry Mirrods 點加號,貼入地址,重啟之後就生效了。

在Docker Desktop開啟k8s

這個過程完全參考阿里雲的一個倉庫://github.com/AliyunContainerService/k8s-for-docker-desktop

首先clone一下這個倉庫:

git clone //github.com/AliyunContainerService/k8s-for-docker-desktop.git

clone好倉庫之後,進入可以看到裡邊有一個文件:load_images.sh。我們先保持在這個目錄,一回兒需要執行這個腳本

但是執行之前,需要在About Docker中查看kubernetes的版本,我的版本是:

Kubernetes: v1.14.8

可以看到是v1.14.8下面我們來切換一下上面所clone的程式碼的分支:

git checkout v1.14.8

OK,下面可以執行腳本了./load_images.sh這個腳本執行過程中,將會從阿里雲下載Kubernetes 所需要的鏡像,這個過程大概需要兩三分鐘。這個命令執行完了之後,我們就可以開啟k8s了。Docker – > Preference -> kubernetes -> 勾選Enable kubernetes, apply and restart 。等待幾分鐘之後,我們點開docker小圖標,可以看到:

docker is running
Kubernetes is runing

使用Kubectl連接k8s

上面我們已經配置好了k8s環境,下面我們來驗證一下。kuberctl是一個命令行工具,在配置好k8s環境之後,這個命令就有了。我們輸入:kubectl cluster-info

$ kubectl cluster-info                                               
Kubernetes master is running at //kubernetes.docker.internal:6443
KubeDNS is running at //kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

可以看到 kubernetes master is running, KubeDNS is running。說啟動正常,再看一個命令:kubectl get nodes

$ kubectl get nodes   
NAME             STATUS   ROLES    AGE   VERSION
docker-desktop   Ready    master   32d   v1.14.8

再看一個命令:kubectl get pods

$ kubectl get pods 
NAME            READY   STATUS    RESTARTS   AGE
my-first-demo   1/1     Running   2          6d1h

可以看到我部署了一個my-first-demo應用正在運行。下一篇將會講解如何部署應用到k8s。

配置Kubernetes 控制台

如果我們想更直觀的看kubernetes內的應用情況,我們可以部署Kubernetes控制台,即Kubernetes dashboard。還記得上面步驟中中clone的倉庫吧(k8s-for-docker-desktop.git)。我們再次進入這個目錄

cd your/path/to/k8s-for-docker-desktop

這個目錄中有一個kubernetes-dashboard.yaml文件(注意看下分支,需要是你本機k8s的版本,例如v1.14.8)執行這個命令:

kubectl create -f kubernetes-dashboard.yaml

這個命令將會啟動Kubernetes dashboard,使用這個命令查看啟動狀況:

$ kubectl get pod -n kube-system         
NAME                                     READY   STATUS    RESTARTS   AGE
etcd-docker-desktop                      1/1     Running   4          32d
kubernetes-dashboard-5d9599dc98-g6czk    1/1     Running   7          32d

可以看到下面有個kubernetes-dashboard-5d9599dc98-g6czk,說明k8s控制台的pod啟動成功。下面執行如下命令:

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

然後再瀏覽器訪問:

//localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

打開之後,可以看到一個登陸介面:

我們選擇「令牌」方式登陸,這裡需要令牌,獲得令牌需要在命令行輸入如下命令:

TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
kubectl config set-credentials docker-for-desktop --token="${TOKEN}"
echo $TOKEN

這串命令比較長,複製完整,粘貼執行即可。會得到一長串的字元串,複製貼到面板的令牌輸入框點擊登陸。你將會看到一個這樣的介面:

介面中,我們可以看到負載狀態,容器組資訊等。操作過阿里雲k8s環境的同學肯定不陌生,阿里雲的容器dashboard就是這個,只是顏色不一樣而已。

總結

至此,本文簡單介紹了一下k8s是什麼,並我們配置好了本機的k8s環境,並演示了幾個kubectl命令以查看k8s運行情況。至此,準備工作算是做完了。下一篇將講如何部署應用到k8s。

Docker & k8s 系列一:快速上手docker
Docker & k8s 系列三:在k8s中部署單個服務實例

alt 逃離沙漠公眾號