Kubernetes 部署应用(nginx)的两种方式,你更喜欢哪一种?

k8s发布应用的两种方式:

  • kubernetes-dashboard
  • kubectl命令行

一、Dashboard方式

配置部署:包含应用名称、容器镒、pod数量、Service非常的方便,不想设置配置yaml的可以很方便的部署。

点击部署就成功了k8s应用的部署了。部署后可以看到相应的deployment、pod、service等状态和信息。

  • Deployment
  • Pod
  • Service
  • 监控

二、命令行方式

1、创建namespace

arduino 复制代码
vim nginx-namespace.yaml
yaml 复制代码
apiVersion: v1 #类型为Namespace
kind: Namespace  #类型为Namespace
metadata:
  name: ns-test  #命名空间名称
  labels:
    name: label-test  #pod标签

执行

csharp 复制代码
#创建
kubectl create -f nginx-namespace.yaml
#查询
kubectl get namespace

2、创建pod

一般不直接create pod,而是通过controller来创建pod。deployment为其中一种controller

复制代码
vim nginx-deployment.yaml
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ns-test
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

执行

csharp 复制代码
#创建
kubectl create -f nginx-deployment.yaml
#查询。查询时需要等待一会,此时会下载镜像需要时间
kubectl get deployment  -n ns-test
#或
kubectl get pods -n ns-test

可以看到"replicas: 3",所以有3个pod并且每个pod只有一个容器。都正常启动。

接下来看看如何访问,查看访问的端口:

csharp 复制代码
kubectl get pods -o wide -n ns-test   #-o wide 展开的意思

这时已经可以访问了,就是通过虚拟ip来端口

curl 10.244.1.43

curl 10.244.1.44

curl 10.244.1.45

如下图,只要集群范围内的机器就可以直接通过IP访问了

那问题来了,这么多虚拟ip,每次pod重建还会重新生成,那怎么办呢???

看下面的servcie

3、创建service

vim nginx-service.yaml

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  namespace: ns-test
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

执行

arduino 复制代码
kubectl apply -f nginx-service.yaml
kubectl get svc nginx-service -o wide  -n ns-test

可以看到有一个cluster-ip,通过这个端口+端口就可以负载到之前3个节点的nginx了

当然cluster-ip也只能在集群内的机器访问。再结合nginx或域名就可以向外提供负载均衡访问了。

可以看到cluster-ip虽然有负载均衡的功能但还是不能外网访问k8s部署的应用,那如何才能直接外网能访问k8s部署的应用呢?

设置service为nodeport方式,如下:

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  namespace: ns-test
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - nodePort: 30000
  	protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

其中type: NodePort另外想指定端口也可以加上nodePort: 30000。这样就可以通过主机ip+nodePort的访问k8s部署的应用了。

执行

arduino 复制代码
kubectl apply -f nginx-service.yaml
kubectl get svc nginx-service -o wide  -n ns-test

可以看到我使用的是我主机的ip+nodePort可以直接访问到nginx了。

三、补充知识

1、Service

Kubernetes 服务有四种类型:ClusterIP、NodePort、LoadBalancer 和ExternalName。服务spec中的type 属性决定了服务如何暴露给网络。

  • ClusterIP 类型的服务将在集群内部暴露,并分配一个 cluster IP 地址。Pod 可以通过这个 IP 地址来访问该服务。ClusterIP 类型的服务适用于需要在集群内部访问的服务,例如数据库服务。
  • NodePort 类型的服务将在每个节点上暴露一个端口,并分配一个 cluster IP 地址。外部客户端可以通过 : 来访问该服务。NodePort 类型的服务适用于需要在集群外部访问的服务,例如 Web 服务。
  • LoadBalancer 类型的服务将使用集群外部的负载均衡器来暴露服务。外部客户端可以通过负载均衡器的 IP 地址来访问该服务。LoadBalancer 类型的服务适用于需要在集群外部访问的服务,并且需要高可用性的服务。一般LoadBalancer是付费提供的。
  • ExternalName 类型的服务将将服务指向一个外部主机或域名。Pod 可以通过该主机或域名来访问该服务。ExternalName 类型的服务适用于需要访问外部服务的场景。

复制代码
如果文章对你有帮助,欢迎关注+点赞,必回关!!!
相关推荐
techdashen10 小时前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
木雷坞11 小时前
K8s GPU 推理服务 ImagePullBackOff 排查与预热
云原生·容器·kubernetes·gpu算力
人生匆匆11 小时前
通过nginx解决跨域问题
运维·nginx
吴爃12 小时前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
子木HAPPY阳VIP14 小时前
信创UOS,Docker 完整操作部署(Dockerfile部署方式)&排错整合
linux·运维·redis·nginx·docker·容器·tomcat
The Straggling Crow14 小时前
Monitoring 2026-04-30
kubernetes
AOwhisky14 小时前
Kubernetes调度与服务暴露:从“定时任务”到“服务发现”的完全指南
linux·运维·云原生·容器·kubernetes·服务发现
Cyber4K15 小时前
【Kubernetes专项】温故而知新,重温技术原理(6)
云原生·容器·kubernetes
运维老郭17 小时前
K8s故障排查:一条分层排查路径解决99%线上问题
运维·云原生·kubernetes
吹个口哨写代码17 小时前
小程序图片不显示,直接访问显示,头部配置问题
javascript·css·nginx