环境
- Rocky Linux9.4 x86_64 VM
- 安装了Microk8s (参考:Microk8s安装方法)
说明: 其他k8s(例如: k3s, kubernetes)创建Pod的方法和Microk8s没啥区别,可以参考本文
目标
创建一个Nginx的Pod,映射宿主机30000端口到Pod容器的80端口;客户端能通过宿主机30000端口访问Pod容器中的Nginx服务
步骤
从国内源下载nginx:1.27.3镜像, 再导入镜像
Microk8s执行如下命令:
1 | microk8s.ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3 |
如果是Kubernetes环境,执行如下命令: (和Microk8s大同小异)
1 | ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3 |
创建nginx的namespace
创建一个新的namespace,名称为nginx,后续在这个namespace下创建Pod
1 | kubectl create ns nginx |
创建并应用deployment
创建nginx-deployment.yaml文件,内容如下:
1 | apiVersion: apps/v1 |
这个yaml文件参考了官方文档: https://kubernetes.io/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/
再应用这个deployment
1 | kubectl apply -f nginx-deployment.yaml |
deployment创建成功后,查看Nginx pod状态如下:
1 | kubectl -n nginx get pods |
查看当前Nginx deployment的内容
1 | kubectl -n nginx get deploy nginx-deployment -o yaml |
创建并应用service, 将宿主机端口(例如30000端口)映射到Pod的80端口
创建nginx-service.yaml文件,主要字段的说明参考注释,文件内容如下:
1 | apiVersion: v1 |
面试题: 说说看Service中port, targetPort, nodePort的作用,有什么区别?
- port: 暴露在cluster IP上的端口,提供集群内部访问service的入口,即clusterIP:port
- nodePort: 宿主机端口, 提供集群外部访问Service的能力
- targetPort: Pod内部端口,是实际应用程序监听的端口
再应用这个service
1 | kubectl apply -f nginx-service.yaml |
执行成功后,查看service
1 | kubectl -n nginx get svc |
可以看出NodePort端口是30000,clusterIp:port为10.152.183.248:80
测试
通过NodePort方式可以访问Nginx
1 | curl localhost:30000 |
通过clusterIp:port方式也可以访问Nginx
1 | curl 10.152.183.248:80 |
删除Nginx Pod
删除之前创建的deployment和service资源即可,方法如下:
1 | kubectl -n nginx delete deploy nginx-deployment |
参考
https://kubernetes.io/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/