Docker & k8s 系列二:本機k8s環境搭建
- 2020 年 5 月 17 日
- 筆記
本篇將會講解k8s是什麼?本機k8s環境搭建,部署一個pod並演示幾個kubectl命令,k8s dashboard安裝。
k8s是什麼
k8s是kubernetes的簡寫,它是一個全新的基於容器技術的分佈式架構領先方案。它是谷歌內部使用的大規模集群管理系統Borg的一個開源版本。這個項目在谷歌內部使用多年,由於員工簽署了保密協議,所以外界對這個項目一無所知。直到kubernetes的開源一鳴驚人,大家才得以了解。Kubernetes是一個開放的開發平台,並不限制特定的編程語言,任何語言編寫的服務都可以被映射為Kubernetes的Service(服務),並通過標準的TCP通信協議進行交互。你在處理分佈式系統所需要用到的能力,在kubernetes中都支持,比如服務發現、故障發現和自我修復、滾動升級、擴容等。總之,Kubernetes是一個分佈式解決方案、是一個一站式的完備的分佈式系統開發和支撐平台。k8s+docker使得小規模團隊甚至是個人hold住大型項目成為可能。
本機k8s環境搭建
如果之前沒有接觸過k8s的話,也許聽完上面的解釋,並不是很清楚。而在軟件技術的學習中,實操十分重要,搭建好環境,實際操作幾次就不會覺得那麼陌生了。在本機搭建k8s環境,我們有兩種方式:
- k8s for docker desktop
- 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中部署單個服務實例