当前位置: 首页 > news >正文

【k8s实践】 创建第一个Pod(Nginx)

环境

  • 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执行如下命令:

microk8s.ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3
microk8s.ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3 docker.io/library/nginx:1.27.3

如果是Kubernetes环境,执行如下命令: (和Microk8s大同小异)

ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3
ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.3 docker.io/library/nginx:1.27.3

创建nginx的namespace

创建一个新的namespace,名称为nginx,后续在这个namespace下创建Pod

kubectl create ns nginx

创建并应用deployment

创建nginx-deployment.yaml文件,内容如下:

apiVersion: apps/v1
kind: Deployment #指定资源类型
metadata:name: nginx-deployment #指定deployment名称namespace: nginx #指定pod运行的namespace
spec:selector:matchLabels:app: nginxreplicas: 1 # 指定副本数(nginx pod个数)template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.27.3 #(指定镜像)imagePullPolicy: IfNotPresent #(指定镜像拉取策略, IfNotPresent表示如果本地有就取本地镜像,否则从网络拉取镜像ports:- containerPort: 80 # 容器内暴露的端口

这个yaml文件参考了官方文档: https://kubernetes.io/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/
再应用这个deployment

kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created

deployment创建成功后,查看Nginx pod状态如下:

kubectl -n nginx get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5c7dff4cf7-gbtsr   1/1     Running   0          2m55s

查看当前Nginx deployment的内容

kubectl -n nginx get deploy nginx-deployment -o yaml

创建并应用service, 将宿主机端口(例如30000端口)映射到Pod的80端口

创建nginx-service.yaml文件,主要字段的说明参考注释,文件内容如下:

apiVersion: v1
kind: Service #指定资源类型
metadata:name: nginx-service #指定service的名称namespace: nginx #指定pod运行的namespace
spec:selector:app: nginxtype: NodePortports:- protocol: TCPtargetPort: 80 # Pod容器中的端口,是Nginx程序实际监听的端口port: 80 # 暴露在cluster IP上的端口,提供集群内部访问service的入口, 即clusterIP:portnodePort: 30000 # 指定宿主机的端口, nodePort提供集群外部访问Service的能力

面试题: 说说看Service中port, targetPort, nodePort的作用,有什么区别?

  • port: 暴露在cluster IP上的端口,提供集群内部访问service的入口,即clusterIP:port
  • nodePort: 宿主机端口, 提供集群外部访问Service的能力
  • targetPort: Pod内部端口,是实际应用程序监听的端口

再应用这个service

kubectl apply -f nginx-service.yaml
service/nginx-service created

执行成功后,查看service

kubectl -n nginx get svc
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.152.183.248   <none>        80:30000/TCP   2m32s

可以看出NodePort端口是30000,clusterIp:port为10.152.183.248:80

测试

通过NodePort方式可以访问Nginx

curl localhost:30000
...
<title>Welcome to nginx!</title>
...

通过clusterIp:port方式也可以访问Nginx

curl 10.152.183.248:80
...
<title>Welcome to nginx!</title>
...

删除Nginx Pod

删除之前创建的deployment和service资源即可,方法如下:

kubectl -n nginx delete deploy nginx-deployment
kubectl -n nginx delete svc nginx-service

参考

https://kubernetes.io/zh-cn/docs/tasks/run-application/run-stateless-application-deployment/

http://www.lryc.cn/news/498934.html

相关文章:

  • 盘古大模型实战
  • Python subprocess.run 使用注意事项,避免出现list index out of range
  • 包管理器npm,cnpm,yarn和pnpm
  • 树莓派4B使用opencv读取摄像头配置指南
  • Spring Boot 进阶话题:部署
  • Python 3 和 MongoDB 的集成使用
  • perl语言中模式匹配的左右关系
  • 【漏洞复现】网动统一通信平台(ActiveUC)接口iactiveEnterMeeting存在信息泄露漏洞
  • C++ STL 容器系列(三)list —— 编程世界的万能胶,数据结构中的百变精灵
  • Java经典面试题总结(附答案)2025
  • Stylus 浏览器扩展开发-Cursor AI辅助
  • DAY35|动态规划Part03|LeetCode:01背包问题 二维、01背包问题 一维、416. 分割等和子集
  • 创建空向量:std::vector<int> v,刚创建时大小为0
  • VBA基础2
  • 计算机网络-GRE基础实验二
  • JSON 使用
  • Leetcode—1539. 第 k 个缺失的正整数【简单】
  • 深入浅出:PHP 控制结构与循环语句
  • 深入解析 Loss 减少方式:mean和sum的区别及其在大语言模型中的应用 (中英双语)
  • c++ auto
  • python中的列表、元组、字典的介绍与使用
  • 深入浅出:PHP中的表单处理全解析
  • 双绞线直连两台电脑的方法及遇到的问题
  • 2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战解题全过程文档及程序
  • Qt 设置QLineEdit控件placeholderText颜色
  • 麒麟 V10 系统(arm64/aarch64)离线安装 docker 和 docker-compose
  • Windows基线自动化检查脚本
  • 离谱的梯形滤波器——增加过渡点
  • tauri下的两个常用rust web框架:Leptos和Trunk
  • pubmed关键词搜索技能1:待更新