当前位置: 首页 > 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.mrgr.cn/news/79366.html

相关文章:

  • Redis: 一个高效的内存数据存储解决方案
  • 电脑win11家庭版升级专业版和企业版相关事项
  • 计算机视觉与医学的结合:推动医学领域研究的新机遇
  • 网卡驱动及dpdk的使用
  • FireFox火狐浏览器企业策略禁止更新
  • 学习记录:js算法(一百二十三):不同路径 II
  • 写NFC标签支持Android安卓Ohos纯血鸿蒙唤醒微信小程序
  • java面向对象实验——扫雷+24点
  • windsurf简介
  • [软件工程]九.可依赖系统(Dependable Systems)
  • 多层感知机imdb情感分析分块第一部分
  • 大型网站演化实例
  • Java---每日小题
  • 【网盘系统】递归删除批量文件、从回收站恢复文件、彻底删除文件
  • PS核心知识点
  • 【组件封装】uniapp vue3 封装一个完整的Tabs(标签页)组件教程,功能由简到杂实现讲解。
  • Python实现BBS论坛自动签到【steamtools论坛】
  • 2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别
  • Java后端面试模板(技术面)
  • [软件工程]十.可靠性工程(reliable engineering)
  • android studio 读写文件操作(应用场景二)
  • 代码随想录-算法训练营day41(动态规划04:01背包,01背包滚动数组,分割等和子集)
  • 信奥常考点:二叉树的构建(已知中序和 前序或后序 的情况下)
  • 网络原理之 TCP 协议
  • pubmed关键词搜索技能1:待更新
  • No APK Signature Scheme v2 signature in package