(详细步骤+各项报错处理)windows11 安装Docker和部署K8S单节点(minikube)
本文是minikube在win11系统的部署,可以作为k8s的前置学习(单节点集群)。
一、本人电脑的一些配置
(1)win11系统(win10应该也可以,但没试过)
(2)保证cpu虚拟化开启
(3)主机要留有一定的内存
满足以上即可安装docker desktop版本
二、安装docker desktop
(1)获取Docker Desktop并安装Download For Windows(使用了WSL2技术,直接可以在windows上运行,不需要额外的虚拟化环境)
(2)开始安装,按照安装向导走(过程可能有点长),安装成功打开看看。
这个样子就对了!
(3)登录你的docker账号。(如果没有,建议去注册--sign up一个,别把密码忘了。。)
(4)打开你的powershell,输入以下命令,看看安装成功了吗(笑
docker -v
成功输出版本,成功啦!
三、K8S单节点集群部署(minikube)
安装这个之前你要确保你的docker安装成功哦~
(1)下载minikube:minikube,按照下图选择安装包。
接下来按照官方给的步骤安装,这里为了方便阅读给出从那里复制的安装步骤及指令:
首先在你的powershell中运行以下指令:
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing
如果你运行的正确的话,会发现在你的C盘中创建了一个minikube文件夹,里面放着minikube的可执行文件。
(2)编辑系统变量,添加C:\minikube。(也可以使用指令去添加)
(3)以管理员模式打开powershell,运行以下指令。
minikube start --driver=docker --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
中间可能失败,多来几次就好了,会接着上次继续下载。
(4)查看一下minikube的状态。
minikube status
发现了一处报错?据我所知,有的人没有这个报错,这里我就说一下解决方案吧,报错中有一个路径,我这里是
C:\Users\86130\.docker\contexts\meta\37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f\meta.json
报错中说找不到这个路径,那我们就在自己的电脑去按这个路径找一下,诶,找到37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f这一串代码的这个文件夹的时候发现我们的文件夹名字跟报错中找的不一致,我们只需要把自己的这个文件夹名字改成报错中那个即可!
我们再次运行minikube status,发现没有报错了,解决!
(5)部署应用(这里将介绍两种方式,一种是NodePort,一种是LoadBalancer 方式,他们是用来将服务暴露给外部的两种方式)
I、nodeport方式(暴露端口)
//创建一个部署名字为hello-minikube,通过镜像cilium/echoserver部署容器下去
kubectl create deployment hello-minikube --image=cilium/echoserver
//根据官方文档,这里我们把hello-minikube服务暴露给一个端口,为什么是80端口呢
kubectl expose deployment hello-minikube --type=NodePort --port=80
我们来看一下:
原来是该容器监听的是80端口,所以服务得通过80端口进行访问。
接下来我们来访问一下hello-minikube的服务,正常来讲minikube提供了一种快捷指令来访问,但windows下会受到一些限制,所以我们采取下面的方式:
//把宿主机器的7080端口转发到集群的80端口
kubectl port-forward service/hello-minikube 7080:80
接下来访问http://localhost:7080/,由于我们绑定了宿主机的7080端口和minikube的80端口,所以按理来讲该服务请求会发给我们的minikube集群中,我们来看看是不是这样:
通过第一行Hostname: hello-minikube-694fd4b5c4-wxc2m,我们知道我们的服务请求成功的发给了我们的hello-minikube服务也就是minikube集群。
第一种方式是跟端口有关的,端口有两种,监听端口是服务的入口点,用于接收来自外部的请求,而随机分配访问端口是容器之间或容器与主机之间的通信通道。这里的80端口是前者。
II、loadbalancer方式(负载均衡)
这种方式是与第一种原理不同的暴露服务的方式,具体如下:
//同理创建一个名为hello-minikube-loadbalancer的部署
kubectl create deployment hello-minikube-loadbalancer --image=cilium/echoserver
//将服务端口80以loadbalancer方式暴露
kubectl expose deployment hello-minikube-loadbalancer --type=LoadBalancer --port=80
//获取hello-minikube-loadbalancer这个部署的服务信息
kubectl get services hello-minikube-loadbalancer
这是我们发现该服务的外部ip(external-ip)处于pending(待获取)状态,我们接下来输入:
//建立网络隧道,将集群服务公开到主机操作系统的网络中
minikube tunnel
再次查看服务信息(再打开一个终端):
发现已经同步成了主机的ip,再次访问 http://localhost/ 或者 http://127.0.0.1/,发现了跟之前nodeport相似的结果,说明在本机可以通过隧道直接访问这个服务!
以上就是两种方式去访问minikube集群的服务,让我们看一看我们集群的两个deployment(部署):
从上面的步骤中,能很明显的体会到两种方式的不同!(AGE表示资源的年龄)
(6)最后总结一下kubectl的常见指令吧(水字数):
以下是一些常见的 kubectl 命令,用于管理 Kubernetes 集群中的资源和操作:
查看集群信息:
kubectl cluster-info:查看集群信息,包括 API 服务器的地址和状态。
kubectl get nodes:查看集群中的节点列表。
查看资源列表:
kubectl get pods:查看 Pod 列表。
kubectl get services:查看服务列表。
kubectl get deployments:查看部署列表。
kubectl get configmaps:查看配置映射列表。
kubectl get secrets:查看密钥和密码列表。
查看资源详细信息:
kubectl describe pod <pod-name>:查看特定 Pod 的详细信息。
kubectl describe service <service-name>:查看特定服务的详细信息。
创建和管理资源:
kubectl create -f <yaml-file>:从 YAML 文件创建资源。
kubectl apply -f <yaml-file>:应用或更新资源的配置。
kubectl delete <resource-type> <resource-name>:删除资源。
kubectl scale deployment <deployment-name> --replicas=<replica-count>:调整部署的副本数。
执行命令:
kubectl exec -it <pod-name> -- <command>:在 Pod 中执行命令。
kubectl run <pod-name> --image=<image-name>:运行一个新的临时 Pod,并在其中执行命令。
管理上下文和配置:
kubectl config view:查看当前的 kubeconfig 配置。
kubectl config use-context <context-name>:切换到不同的上下文。
kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name>:创建或修改上下文配置。
日志和调试:
kubectl logs <pod-name>:查看 Pod 的日志。
kubectl port-forward <pod-name> <local-port>:<pod-port>:将本地端口映射到 Pod 内的端口,用于调试。
执行滚动更新:
kubectl set image deployment/<deployment-name> <container-name>=<new-image>:更新部署中容器的镜像版本。
更多推荐
所有评论(0)