K8S的学习之旅-安装minikube

安装 docker desktop

取消settings中的use the WSL 2 based engine
  • docker desktop 默认已经安装了kubectl

安装minikube

启动集群
minikube start
启动失败,提示
* Microsoft Windows 10 Education 10.0.18363 Build 18363 上的 minikube v1.16.0
* Unable to pick a default driver. Here is what was considered, in preference order:
  - vmware: Not installed: exec: "docker-machine-driver-vmware": executable file not found in %PATH%
  - docker: Not installed: exec: "docker": executable file not found in %PATH%
  - hyperv: Not healthy: Hyper-V requires Administrator privileges
  - podman: Not installed: exec: "podman": executable file not found in %PATH%
  - virtualbox: Not installed: unable to find VBoxManage in $PATH

原因是没有默认的驱动,这里选择的是docker做为driver。


minikube支持的driver有五种

  • vmware
  • docker
  • hyperv
  • podman
  • virtualbox

vmware、virtualbox相信装过虚拟机的同学都知道这两个虚拟机应用程序。

docker是比虚拟机还轻量的容器技术。

hyper-v是Windows系统的本地虚拟机管理程序,可在程序与功能->启用或关闭 Windows功能中查看到。

podman则是一个无守护进程的容器引擎,用于在Linux上开发、运行或管理OCI容器。


  • 查看docker是否开启
docker -v
  • 成功启动docker后,再次启动集群
minikube start
  • 自动下载driver,拉去image

  • 完成后有默认的命名空间(获取命名空间:kubectl get ns)

C:\Users\Caisi>kubectl get ns
NAME              STATUS   AGE
default           Active   30m
kube-node-lease   Active   30m
kube-public       Active   30m
kube-system       Active   30m
  • 查看集群运行情况
C:\Users\Caisi>kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-74ff55c5b-jcpt7            1/1     Running   0          48m
kube-system   etcd-minikube                      1/1     Running   0          48m
kube-system   kube-apiserver-minikube            1/1     Running   0          48m
kube-system   kube-controller-manager-minikube   1/1     Running   0          48m
kube-system   kube-proxy-mj5vg                   1/1     Running   0          48m
kube-system   kube-scheduler-minikube            1/1     Running   0          48m
kube-system   storage-provisioner                1/1     Running   1          48m

都启动成功

  • 启动minikube dashboard控制台
C:\Users\Caisi>minikube dashboard
* 正在开启 dashboard ...
* 正在验证 dashboard 运行情况 ...
* Launching proxy ...
* 正在验证 proxy 运行状况 ...
* Opening http://127.0.0.1:53756/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

部署示例应用(这里是个坑,看看就可以了)

  • 创建应用
C:\Users\Caisi>kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created
  • 公开应用端口(在集群中)
C:\Users\Caisi>kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed
  • 查看服务
C:\Users\Caisi>kubectl get services hello-minikube
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort   10.111.191.44   <none>        8080:32207/TCP   20s
  • 查看pod容器启动情况
C:\Users\Caisi>kubectl get pods
NAME                              READY   STATUS             RESTARTS   AGE
hello-minikube-6ddfcc9757-mbtkk   0/1     ImagePullBackOff   0          7m54s

这里显示镜像拉取失败了


  • 使用命令查看pod运行详情
C:\Users\Caisi>kubectl describe pods hello-minikube-6ddfcc9757-mbtkk
Name:         hello-minikube-6ddfcc9757-mbtkk
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
···
Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  8m14s                  default-scheduler  Successfully assigned default/hello-minikube-6ddfcc9757-mbtkk to minikube
  Normal   Pulling    5m51s (x4 over 8m13s)  kubelet            Pulling image "k8s.gcr.io/echoserver:1.4"
  Warning  Failed     5m36s (x4 over 7m58s)  kubelet            Failed to pull image "k8s.gcr.io/echoserver:1.4": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     5m36s (x4 over 7m58s)  kubelet            Error: ErrImagePull
  Warning  Failed     5m9s (x7 over 7m57s)   kubelet            Error: ImagePullBackOff
  Normal   BackOff    3m2s (x15 over 7m57s)  kubelet            Back-off pulling image "k8s.gcr.io/echoserver:1.4"
  • 也可以通过minikube bashboard查看

这里出现问题的原因是k8s.gcr.io是国外Google的网站,国内无法访问,也就拉取不了镜像了。
##真正成功的部署示例应用
解决方法是使用国内的镜像源如:aliyuncs
删除刚刚的deployment和service

C:\Users\Caisi>kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

C:\Users\Caisi>kubectl delete service hello-minikube
service "hello-minikube" deleted
  • 重新创建应用
C:\Users\Caisi>kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
deployment.apps/hello-minikube created

C:\Users\Caisi>kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
hello-minikube-8947b65df-g78l7   1/1     Running   0          88s

可以看到pod已经运行成功了

  • 重新设置集群公开端口
C:\Users\Caisi>kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

C:\Users\Caisi>kubectl get services hello-minikube
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort   10.102.25.156   <none>        8080:32470/TCP   8s
  • 设置转发端口让本地可以访问
C:\Users\Caisi>kubectl port-forward service/hello-minikube 7080:8080
Forwarding from 127.0.0.1:7080 -> 8080
Forwarding from [::1]:7080 -> 8080
Handling connection for 7080
Handling connection for 7080

使用浏览器访问http://localhost:7080/可以看到服务的请求信息

管理集群

  • 暂停(不影响已部署的应用程序)
minikube pause
  • 停止
minikube stop
  • 查看内置的已安装的服务目录
C:\Users\Caisi>minikube addons list
|-----------------------------|----------|--------------|
|         ADDON NAME          | PROFILE  |    STATUS    |
|-----------------------------|----------|--------------|
| ambassador                  | minikube | disabled     |
| csi-hostpath-driver         | minikube | disabled     |
| dashboard                   | minikube | enabled ✅   |
| default-storageclass        | minikube | enabled ✅   |
| efk                         | minikube | disabled     |
| freshpod                    | minikube | disabled     |
| gcp-auth                    | minikube | disabled     |
| gvisor                      | minikube | disabled     |
| helm-tiller                 | minikube | disabled     |
| ingress                     | minikube | disabled     |
| ingress-dns                 | minikube | disabled     |
| istio                       | minikube | disabled     |
| istio-provisioner           | minikube | disabled     |
| kubevirt                    | minikube | disabled     |
| logviewer                   | minikube | disabled     |
| metallb                     | minikube | disabled     |
| metrics-server              | minikube | disabled     |
| nvidia-driver-installer     | minikube | disabled     |
| nvidia-gpu-device-plugin    | minikube | disabled     |
| olm                         | minikube | disabled     |
| pod-security-policy         | minikube | disabled     |
| registry                    | minikube | disabled     |
| registry-aliases            | minikube | disabled     |
| registry-creds              | minikube | disabled     |
| storage-provisioner         | minikube | enabled ✅   |
| storage-provisioner-gluster | minikube | disabled     |
| volumesnapshots             | minikube | disabled     |
|-----------------------------|----------|--------------|
  • 删除所有集群
minikube delete --all

总结

  1. 学会了一些markdown的编辑技巧
  2. 最近弄的好多都需要国外的网站,如这次的k8s.gcr.io,还有昨天在GitHub上面找的几个super-resolution都是国外的项目,有现成的模型,但是下载很麻烦,2M多下了半天,还一直下载失败。所以,在学习新的技术前,要了解一下需不需要国外的资源,以及国内有没有相应的资源可供选择。
  3. 这次只是简单的环境搭建,开了个头,接下来的才是开始。
  4. 简单的安装了docker、minikube,以及运行了示例应用。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐