kubernetes对于一个nginx服务的增删改查

1、创建 Nginx 服务

1.1、创建 Deployment

Deployment 用于管理 Pod 副本和更新策略。

方式一:命令式创建

bash 复制代码
kubectl create deployment nginx-deployment --image=nginx:latest --replicas=3 --port=80

--replicas=3:指定副本数为 3
--port=80:容器暴露的端口

方式二:YAML 文件创建

推荐优先使用 YAML 文件:便于版本控制和复用(例如 Git 管理)

创建 nginx-deployment.yaml:

yml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

应用配置:

bash 复制代码
kubectl apply -f nginx-deployment.yaml

1.2、创建 Service

Service 用于暴露 Pod 的网络访问。

方式一:命令式创建 NodePort 类型 Service

bash 复制代码
kubectl expose <资源类型> <资源名称> --port=<Service暴露端口> --target-port=<容器端口> [其他参数]
kubectl expose deployment nginx-deployment --type=NodePort --port=80 --target-port=80 --name=nginx-service

--type=NodePort:通过节点 IP 和端口访问
--target-port=80:Pod 中容器实际监听的端口,需与容器定义一致(如 Dockerfile 中的 EXPOSE)
--port:Service 对外暴露的端口,集群内其他组件通过此端口访问服务。

方式二:YAML 文件创建

创建 nginx-service.yaml:

yml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

应用配置:

bash 复制代码
kubectl apply -f nginx-service.yaml

2、查询 Nginx 服务状态

2.1、查看 Deployment 和 Pod

bash 复制代码
kubectl get deployments,pods -l app=nginx

-l app=nginx:通过标签过滤。

标签管理:通过 -l 筛选资源,确保 Service 正确关联 Pod。

2.2、查看 Service

bash 复制代码
kubectl get svc nginx-service

输出示例:

bash 复制代码
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.96.123.45   <none>        80:31000/TCP   5m

访问地址:http://:31000

2.3、查看详细信息

bash 复制代码
kubectl describe deployment nginx-deployment  # 查看 Deployment 详情
kubectl describe pod nginx-deployment-xxxxx  # 查看 Pod 日志和事件

3、修改 Nginx 服务

3.1、扩展副本数

bash 复制代码
kubectl scale deployment nginx-deployment --replicas=5

3.2、更新镜像版本

bash 复制代码
kubectl set image deployment/nginx-deployment nginx=nginx:1.25

3.3、通过 YAML 文件更新

修改 nginx-deployment.yaml 后执行:

bash 复制代码
kubectl apply -f nginx-deployment.yaml

4、删除 Nginx 服务

4.1、删除 Deployment

bash 复制代码
kubectl delete deployment nginx-deployment

关联的 Pod 会自动删除

4.2、删除 Service

bash 复制代码
kubectl delete svc nginx-service

4.3、通过 YAML 文件删除

bash 复制代码
kubectl delete -f nginx-deployment.yaml -f nginx-service.yaml

5、常见问题排查

Pod 未启动

bash 复制代码
kubectl logs nginx-deployment-xxxxx       # 查看 Pod 日志
kubectl describe pod nginx-deployment-xxxxx  # 检查事件和资源限制

服务无法访问

bash 复制代码
kubectl get endpoints nginx-service  # 检查后端 Pod IP 是否正常

回滚版本

bash 复制代码
kubectl rollout undo deployment/nginx-deployment  # 回滚到上一版本

命名空间:若需隔离环境,可添加 -n 参数(如 -n dev)

相关推荐
坐吃山猪2 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫3 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao3 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区4 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT5 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy5 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss7 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续7 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0447 小时前
ReAct模式解读
java·ai