Minikube 搭建Kubernetes學習環境


1. 介紹

Minikube是Kubernetes社區維護的單機版的Kubernetes集群工具,幫助Kubernetes新手和開發者快速建立本地的Kubernetes集群,降低Kubernetes學習成本。

在Kubernetes文檔中也首推開發者使用Minikube進行學習使用,見:https://kubernetes.io/zh/docs/tutorials/hello-minikube/

Minikube官網鏈接: https://minikube.sigs.k8s.io

以下是在本地Linux虛擬機中搭建成功的結果示例:

[landscape@MiWiFi-R4CM-srv ~]$ minikube start
* Centos 7.8.2003 上的 minikube v1.15.1
* 根據現有的配置文件使用 docker 驅動程序
* Starting control plane node minikube in cluster minikube
* Updating the running docker "minikube" container ...
* 正在 Docker 20.10.0 中准備 Kubernetes v1.19.4…
* Verifying Kubernetes components...
* Enabled addons: storage-provisioner, default-storageclass, dashboard
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

[landscape@MiWiFi-R4CM-srv ~]$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

[landscape@MiWiFi-R4CM-srv ~]$ docker container ls
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                                                                                      NAMES
e4acce8ab8c3        kicbase/stable:v0.0.15-snapshot4   "/usr/local/bin/entr…"   5 weeks ago         Up 10 hours         127.0.0.1:32771->22/tcp, 127.0.0.1:32770->2376/tcp, 127.0.0.1:32769->5000/tcp, 127.0.0.1:32768->8443/tcp   minikube

[landscape@MiWiFi-R4CM-srv ~]$ minikube ssh
docker@minikube:~$ docker container ls
CONTAINER ID   IMAGE                                                           COMMAND                  CREATED        STATUS        PORTS     NAMES
c38e76753066   bad58561c4be                                                    "/storage-provisioner"   5 hours ago    Up 5 hours              k8s_storage-provisioner_storage-provisioner_kube-system_41b54bd4-c655-4f3d-8e65-0945bf564971_15
a697f54873d6   503bc4b7440b                                                    "/dashboard --insecu…"   10 hours ago   Up 10 hours             k8s_kubernetes-dashboard_kubernetes-dashboard-6f9cb85d88-6s4v9_kubernetes-dashboard_0c142bb5-a1ed-4f78-a56d-e408a1ce4120_8
150b34be990b   86262685d9ab                                                    "/metrics-sidecar"       10 hours ago   Up 10 hours             k8s_dashboard-metrics-scraper_dashboard-metrics-scraper-c85578d8-k7vdm_kubernetes-dashboard_1dd96b8e-c9ca-4e25-b632-0b187b85ca51_4
f9cf094c99f0   bfe3a36ebd25                                                    "/coredns -conf /etc…"   10 hours ago   Up 10 hours             k8s_coredns_coredns-6c76c8bb89-gb8rp_kube-system_6f72f157-73da-4618-b882-b9a2cddc6f46_8
aeb847fb4718   635b36f4d89f                                                    "/usr/local/bin/kube…"   10 hours ago   Up 10 hours             k8s_kube-proxy_kube-proxy-vm84w_kube-system_4e157482-6fee-4d5c-9e8c-7848666bfea2_7
006b63a03302   4830ab618586                                                    "kube-controller-man…"   10 hours ago   Up 10 hours             k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_be338aa45050ec7206c766bab91becdb_8
5f8a8157b70a   14cd22f7abe7                                                    "kube-scheduler --au…"   10 hours ago   Up 10 hours             k8s_kube-scheduler_kube-scheduler-minikube_kube-system_bfdfba5e160e5615ef897a84299c8df5_7
6c17b84fe3b0   b15c6247777d                                                    "kube-apiserver --ad…"   10 hours ago   Up 10 hours             k8s_kube-apiserver_kube-apiserver-minikube_kube-system_84fbf273d9d4bc25831a46f437b7344c_8
62509564babb   0369cf4303ff                                                    "etcd --advertise-cl…"   10 hours ago   Up 10 hours             k8s_etcd_etcd-minikube_kube-system_44e0bd5176f5542a3e8d77b000b60c76_8

雖然Minikube官方文檔很完善,但是還是會讓第一次使用的人摸不着頭腦。希望這篇簡單的文章可以幫助你繞過彎路初窺Kubernetes的真容。

如果文中出現錯誤或者有更好的方案,歡迎評論交流。

2. 安裝

本文默認安裝環境為:

  • Cent OS 7.X+
  • Docker 19.0+

其他版本或環境也可以稍作參考,沒有安裝Docker可以按照Docker官方文檔的步驟安裝Docker:https://docs.docker.com/engine/install/

2.1 Minikube

首先從官網選擇合適的版本下載Minikube,地址:https://minikube.sigs.k8s.io/docs/start/
這里建議用X雷或者其他工具下載

上傳到服務器,我這里選擇了二進制文件進行安裝,所以按照文檔執行命令:sudo install minikube-linux-amd64 /usr/local/bin/minikube

[landscape@localhost ~]$ ls
minikube-linux-amd64
[landscape@localhost ~]$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
[landscape@localhost ~]$ minikube start
* Centos 7.8.2003 上的 minikube v1.17.0
* minikube 1.17.1 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.17.1
* To disable this notice, run: 'minikube config set WantUpdateNotification false'

* 根據現有的配置文件使用 docker 驅動程序
* Starting control plane node minikube in cluster minikube
* Pulling base image ...

到這里繼續按照官方文檔的步驟直接執行minikube start大概率是沒用的,minikube會從谷歌鏡像倉庫下載所需鏡像,可能是用法網絡等原因,按照阿里雲社區這篇文檔的步驟進行依舊無法使用:https://developer.aliyun.com/article/221687。
然后一直卡住,最終下載以失敗告終,如下:

[landscape@localhost ~]$ ./minikube-linux-amd64-ali start --image-mirror-country cn --registry-mirror=https://registry.docker-cn.com
* Centos 7.8.2003 上的 minikube v1.16.0
* 根據現有的配置文件使用 docker 驅動程序
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
E0130 20:58:57.870751    3153 cache.go:180] Error downloading kic artifacts:  failed to download kic base image or any fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! StartHost failed, but will try again: creating host: create: creating: setting up container node: preparing volume for minikube container: docker run --rm --entrypoint /usr/bin/test -v minikube:/var kicbase/stable:v0.0.17 -d /var/lib: exit status 125
stdout:

stderr:
Unable to find image 'kicbase/stable:v0.0.17' locally
docker: Error response from daemon: Head https://registry-1.docker.io/v2/kicbase/stable/manifests/v0.0.17: Get https://auth.docker.io/token?scope=repository%3Akicbase%2Fstable%3Apull&service=registry.docker.io: net/http: TLS handshake timeout.
See 'docker run --help'.

* docker "minikube" container is missing, will recreate.
* Creating docker container (CPUs=2, Memory=2200MB) ...

我們從錯誤信息中得知minikube拉取的基礎鏡像是 kicbase/stable:v0.0.17,這里可以在DockerHub中找到鏡像 ,如下:

嘗試手動拉取鏡像:

[landscape@localhost ~]$ docker pull kicbase/stable:v0.0.17
v0.0.17: Pulling from kicbase/stable
da7391352a9b: Pull complete 
14428a6d4bcd: Pull complete 
2c2d948710f2: Pull complete 
a068cd99c676: Pull complete 
086636b22e9d: Pull complete 
5221d3fd465c: Pull complete 
8a2738df9ade: Pull complete 
74fc054d5085: Downloading [============================>                      ]  10.84MB/19.17MB
20228527694f: Download complete 
a7823b5983e9: Downloading [==>                                                ]  5.901MB/130.4MB
a036a37c5c11: Downloading [==========================================>        ]  36.82MB/43.48MB
bb15b50b0a94: Waiting 
a596876de093: Waiting 
0e301f5a0ff7: Waiting 
9e29a8a5c096: Waiting 
445dc96e3be9: Waiting 
f41b1d751d1d: Waiting 
cdabbc900ca4: Waiting 

網絡不好的可以嘗試更換版本、開啟魔法上網工具,實在不行可以嘗試一下其他的備用鏡像:

然后使用minikube參數指定你下載的鏡像即可啟動minikube

[landscape@localhost ~]$ minikube start --base-image="kicbase/stable:v0.0.15-snapshot4" --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'
* Centos 7.8.2003 上的 minikube v1.17.0
* 自動選擇 docker 驅動
* 正在使用鏡像存儲庫 registry.cn-hangzhou.aliyuncs.com/google_containers
* Starting control plane node minikube in cluster minikube
* Creating docker container (CPUs=2, Memory=2200MB) ...
    > kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Verifying Kubernetes components...
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

2.2 kubectl(可選)

接下來安裝kubectl管理Kubernetes集群,可以直接在Kubernetes官網找到安裝命令執行

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

也將版本號替換到鏈接中用X雷或者其他工具下載,例如我這里下載的版本是v1.20.2,所以直接下載 https://dl.k8s.io/release/v1.20.2/bin/linux/amd64/kubectl 即可。

3. 啟動示例

寫入一個簡單的Deployment示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: mynginx
        image: nginx:1.19.6
        ports:
        - containerPort: 80

創建Deployment:

[landscape@localhost minikube]$ kubectl create -f nginx-deploy.yaml 
deployment.apps/nginx-deployment created
[landscape@localhost minikube]$ kubectl get rs
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-bd5567f5b   3         3         0       11s
[landscape@localhost minikube]$ kubectl get pods
NAME                               READY   STATUS              RESTARTS   AGE
nginx-deployment-bd5567f5b-ctqjb   0/1     ContainerCreating   0          15s
nginx-deployment-bd5567f5b-pzntl   0/1     ContainerCreating   0          15s
nginx-deployment-bd5567f5b-tp8vc   0/1     ContainerCreating   0          15s

這里是一個小坑,Minikube的鏡像運行在Docker容器里沒有任何配置,即會從官方registry拉取鏡像,所以如果像下面一樣創建失敗了(ImagePullBackOff)也不奇怪

[landscape@localhost minikube]$ kubectl get pods
NAME                               READY   STATUS              RESTARTS   AGE
nginx-deployment-bd5567f5b-ctqjb   0/1     ContainerCreating   0          11m
nginx-deployment-bd5567f5b-pzntl   0/1     ImagePullBackOff    0          11m
nginx-deployment-bd5567f5b-tp8vc   0/1     ContainerCreating   0          11m

所以像配置外部Docker一樣配置容器內的鏡像加速即可,使用minikube ssh進入容器,然后創建或修改/etc/docker/daemon.json文件,如果不了解的同學按照 阿里雲 官方鏡像加速這篇文章操作就行。

minikube ssh

sudo chmod 777 /etc/docker/ && sudo echo '{"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json

重啟minikube,stop + start ,直接start雖然顯示update但是沒什么用

[landscape@localhost minikube]$ minikube stop
* Stopping node "minikube"  ...
* 正在通過 SSH 關閉“minikube”…
* 1 nodes stopped.

[landscape@localhost minikube]$ minikube start
* Centos 7.8.2003 上的 minikube v1.17.0
* 根據現有的配置文件使用 docker 驅動程序
* Starting control plane node minikube in cluster minikube
* Restarting existing docker container for "minikube" ...
! This container is having trouble accessing https://registry.cn-hangzhou.aliyuncs.com/google_containers
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* 正在 Docker 20.10.0 中准備 Kubernetes v1.20.2…
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

[landscape@localhost minikube]$ kubectl delete deploy nginx-deployment
deployment.apps "nginx-deployment" deleted

[landscape@localhost minikube]$ kubectl create -f nginx-deploy.yaml 
deployment.apps/nginx-deployment created

[landscape@localhost minikube]$ kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5599fc6777   3         3         0       4s

[landscape@localhost minikube]$ kubectl get pods
NAME                                READY   STATUS        RESTARTS   AGE
nginx-deployment-5599fc6777-7fmvp   1/1     Running       0          34s
nginx-deployment-5599fc6777-9t5k5   1/1     Running       0          34s
nginx-deployment-5599fc6777-tr49g   1/1     Running       0          34s
nginx-deployment-bd5567f5b-7rczv    0/1     Terminating   0          2m22s
nginx-deployment-bd5567f5b-pjcsl    0/1     Terminating   0          2m22s
nginx-deployment-bd5567f5b-xpsjb    0/1     Terminating   0          2m22s

pod成功運行,開始有趣的Kubernetes學習之旅吧👌~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM