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)

相关推荐
YuTaoShao21 分钟前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张323 分钟前
SpringBoot计时一次请求耗时
java·spring boot·后端
llwszx3 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野4 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person4 小时前
Java SE--方法的使用
java·开发语言·算法
小阳拱白菜5 小时前
java异常学习
java
FrankYoou6 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
charlee447 小时前
nginx部署发布Vite项目
nginx·性能优化·https·部署·vite
麦兜*7 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了7 小时前
JAVA-springboot 整合Redis
java·spring boot·redis