环境信息
minikube version: v1.26.0
docker desktop: 4.16.2 (95914)
mac OS: 13.1
表单填写方式部署 nginx
在 dashboard 的右上角有个+图标,点击后选择从表单创建,填写数据:
应用名称: nginx-form
容器镜像: nginx:latest
pod 的数量: 2
Service: External
端口: 8000, 目标端口: 80, 协议: TCP

点击部署后,集群将会拉取nginx的最新版本镜像并创建两个 pod,pod 将内部接口 80 暴露出 8000。应用名为nginx-form,deployment和service 都会明明为 nginx-form。需要等待几分钟,拉取镜像需要时间。部署成功后,状态将会是running。
kubernetes service 是将运行在一个或一组 pod 上的网络应用程序公开为网络服务的方法。
kubernetes deployment 检查 pod 的健康状况,并在 pod 中的容器终止的情况下重新启动新的容器。 deployment 是管理 Pod 创建和扩展的推荐方法。
kubernetes pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。
使用 yaml 文件的方式部署 nginx
首先要了解一下yaml语言,因为kubectl需要的通信都是建立在yaml语言之上,和web中的html一样,是所有运行的基础。
编写yaml文档有两个小技巧,一个是参考kubernetes的官方参考文档。
另一个是使用kubectl命令:
1 | kubectl explain pod |
使用kubectl例如生成一个模版,输出到一个指定文件中:
1 | kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml > nginx_pod.yaml |
nginx_pod.yaml
1 | apiVersion: v1 # 创建该对象所使用的 Kubernetes API 的版本 |
pod的关键在于yaml文件的编写,然后用kubectl去执行:
1 | # 添加pod |
使用 ConfigMap 配置 Pod
很多应用在其初始化或运行期间要依赖一些配置信息。 大多数时候,存在要调整配置参数所设置的数值的需求。configMap是kubernetes的一种机制,可让你将配置数据注入到应用的pod内部。
例如,创建一个ConfigMap来导入时区设置:
1 | kubectl create configmap area-timezone --from-file=/usr/share/zoneinfo/Asia/Shanghai |
不创建,以下部署文件执行时会报错: MountVolume.SetUp failed for volume “timezone” : configmap “area-timezone” not found
编辑部署文件
本地编辑一个nginx-deploy.yaml 部署文件。文件中包括 deployment 和 service 的资源声明。nginx-deploy.yaml 部署文件的内容:
1 |
|
部署 nginx
根据yaml配置文件创建nginx-form,执行部署命令:
1 | kubectl apply -f nginx-deploy.yaml |
kubectl apply -f <spec.yaml> - 基于文件名或标准输入,将新的配置应用到资源上
检查容器是否正常运行命令:
1 | kubectl get pod |
输出类似于:
1 | NAME READY STATUS RESTARTS AGE |
进入容器
除了通过kubectl get pod获取容器信息,还可以通过kubernetes dashboard查看:
获取容器详情:
1 | kubectl describe pod nginx-form-857bd686db-r9tt8 |
输出类似于:
1 | Name: nginx-form-857bd686db-r9tt8 |
进入指定容器命令:
1 | kubectl exec nginx-form-857bd686db-r9tt8 -c nginx-form -it -- /bin/sh |
输出类似于:
1 | # date |
更多exec信息,请移步官方文档
双破折号 “–” 用于将要传递给命令的参数与 kubectl 的参数分开。
显示有关 service 的信息:
1 | kubectl get services nginx-form |
输出类似于:
1 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
可以看到 service 对外暴露的端口是 32578,我们通过 minikube 的 IP + 端口即可访问 nginx
查看当前 minikube 的 IP 地址的命令:
1 | minikube ip |

如果外部IP地址显示为<pending>,请等待一分钟再次输入相同的命令。
但因为使用的是minikube,需要输入minikube service nginx-form将在浏览器中自动打开nginx-form应用程序。
成功请求的响应会在浏览器页面展示:
1 | minikube service nginx-form |
输出类似于:
1 | |-----------|------------|------------------------|---------------------------| |

浏览器自动打开http://127.0.0.1:59206/
显示有关 Service 的详细信息:
1 | kubectl describe services nginx-form |
输出类似于:
1 | Name: nginx-form |
可以看到服务有几个端点: 172.17.0.5:80,172.17.0.6:80, 这些都是正在运行 nginx-form 应用程序的 Pod 的内部地址。
验证这些是 Pod 地址,请输入以下命令:
1 | kubectl get pods --output=wide |
输出类似于:
1 | NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES |
显示有关 Deployment 的信息:
1 | kubectl get deployments nginx-form |
显示有关 ReplicaSet 对象的信息:
1 | kubectl get replicasets |
ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
清理现场
要删除service,请输入以下命令:
1 | kubectl delete services nginx-form |
要删除正在运行nginx-form应用程序的deployment、replicaSet 和pod,请输入以下命令:
1 | kubectl delete deployment nginx-form |
以上。