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)

相关推荐
Michaelwubo3 分钟前
jenkins 配置邮件问题整理
java·运维·jenkins
大吱佬23 分钟前
K8S快速部署
云原生·容器·kubernetes
小安同学iter24 分钟前
SpringMVC(八)Knife4j 接口文档
java·开发语言·spring boot·spring·java-ee·intellij-idea
飞奔的马里奥25 分钟前
力扣Hot100——169. 多数元素
java·算法·leetcode
日暮南城故里33 分钟前
Java学习------static、final、this、super关键字
java·学习
Yee_mo41 分钟前
helm部署metricbeat
elasticsearch·kubernetes·k8s·运维开发·devops
TayTay的学习笔记2 小时前
LinkedList底层结构和源码分析(JDK1.8)
java·笔记·学习
无际单片机编程2 小时前
学习单片机需要多长时间才能进行简单的项目开发?
java·stm32·单片机·嵌入式硬件·嵌入式
lmryBC492 小时前
golang-type关键字
java·数据结构·golang
keep one's resolveY3 小时前
Tomcat线程池详解,为什么SpringBoot最大支持200并发?
java·开发语言