前言
本文主要介紹在阿里云ecs實例上搭建自建Kubernetes環境的步驟,參照的是k8s官網上minikube的安裝教程。
安裝k8s
查閱網上資料得知,安裝k8s集群一般有幾種方式:
- kubeadm(適用于生產環境)
- Docker Desktop(如果是本地桌面系統推薦這種方式)
- minikube(本地快速單機部署,體驗最簡版的k8s,不推薦在生產環境上使用)
本文選擇安裝minikube的方式搭建最簡k8s環境,官方教程:https://minikube.sigs.k8s.io/docs/start/
安裝前注意
通過閱讀官方教程得知,用minikube搭建k8s環境時,既支持通過虛擬化技術運行,也可以選擇不通過虛擬化技術直接運行在服務器上。所以對于一些不支持虛擬化技術的云服務器實例,只能通過后者安裝運行k8s,也無須安裝KVM或VirtualBox等虛擬化工具,不過還是依賴于Docker環境,所以需要先安裝Docker,具體可參考Ubuntu上安裝Docker。
Note: Minikube also supports a
--vm-driver=none
option that runs the Kubernetes components on the host and not in a VM. Using this driver requires Docker and a Linux environment but not a hypervisor. It is recommended to use the apt installation of docker from Docker, when using the none driver. The snap installation of docker does not work with minikube.
MiniKube安裝步驟
https://kubernetes.io/docs/tasks/tools/install-minikube/
1. 安裝kubectl
kubectl是k8s的命令行工具,通過kubectl對k8s進行操作:
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux
# 下載kubectl
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
# 安裝到/usr/local/bin/目錄
$ sudo mv ./kubectl /usr/local/bin/kubectl
2. 安裝hypervisor(略)
阿里云ECS不支持虛擬化技術,略過
3. 安裝minikube
# 下載最新版本minikube并賦予執行權限
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
# 安裝到/usr/local/bin/目錄
$ sudo mkdir -p /usr/local/bin/
$ sudo install minikube /usr/local/bin/
# 確認安裝成功
$ kubectl version --client
4. 啟動k8s
$ minikube start --vm-driver=none
輸入命令minikube start --vm-driver=none
啟動kubernetes,注意這里--vm-driver
參數使用none
,前提是要求本機有安裝docker,不然會報錯:
?? Unable to start VM. Please investigate and run 'minikube delete' if possible: create: precreate: exec: "docker": executable file not found in $PATH
初次執行大多數情況會報錯啟動失敗,原因是minikube啟動k8s環境時需要從k8s.gcr.io
拉取kube-apiserver
、kube-controller-manager
、kube-scheduler
等docker鏡像進行部署。而由于墻的問題從阿里云的云端機器上是無法訪問k8s.gcr.io
的。
$ minikube start --help
...
--image-repository='': Alternative image repository to pull docker images from. This can be used when you have
limited access to gcr.io. Set it to "auto" to let minikube decide one for you. For Chinese mainland users, you may use
local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers
...
通過minikube的幫助文檔能看到,對于天朝的用戶可以直接用阿里云的鏡像地址registry.cn-hangzhou.aliyuncs.com/google_containers
代替k8s.gcr.io
$ minikube start --vm-driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
?? minikube v1.6.2 on Ubuntu 16.04
? Selecting 'none' driver from user configuration (alternates: [])
? Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
?? Running on localhost (CPUs=2, Memory=3951MB, Disk=40188MB) ...
?? OS release is Ubuntu 16.04.6 LTS
?? Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
?? Downloading kubeadm v1.17.0
?? Downloading kubelet v1.17.0
?? Pulling images ...
?? Launching Kubernetes ...
?? Configuring local host environment ...
?? The 'none' driver provides limited isolation and may reduce system security and reliability.
?? For more information, see:
?? https://minikube.sigs.k8s.io/docs/reference/drivers/none/
?? kubectl and minikube configuration will be stored in /root
?? To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:
? sudo mv /root/.kube /root/.minikube $HOME
? sudo chown -R $USER $HOME/.kube $HOME/.minikube
?? This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
? Waiting for cluster to come online ...
?? Done! kubectl is now configured to use "minikube"
出現上面的日志表示minikube已經部署完畢,隨后查看k8s的運行狀態
# 可以看到minikube在docker中啟動了很多k8s相關的container
$ docker container ls
# 查看minikube的運行狀態
$ minikube status
后記
minikube提供了一種簡便快捷的方式在單機中完成k8s集群的部署,默認使用虛擬化技術(或者docker)模擬多節點部署,為學習研究k8s提供了巨大的方便。
另外使用docker運行minikube會存在一些安全性或兼容性問題,需要注意的地方:https://minikube.sigs.k8s.io/docs/reference/drivers/none/