首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

k8s发布应用的两种方式:

kubernetes-dashboard

kubectl命令行

一、Dashboard方式

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

点击部署就成功了k8s应用的部署了。部署后可以看到相应的deployment

、pod、service

等状态和信息。

Deployment

Pod

Service

监控

二、命令行方式

1、创建namespace

vim nginx-namespace.yaml

apiVersion: v1 #类型为Namespace

kind: Namespace  #类型为Namespace

metadata:

name: ns-test  #命名空间名称

labels:

  name: label-test  #pod标签

执行

#创建

kubectl create -f nginx-namespace.yaml

#查询

kubectl get namespace

2、创建pod

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

vim nginx-deployment.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

执行

#创建

kubectl create -f nginx-deployment.yaml

#查询。查询时需要等待一会,此时会下载镜像需要时间

kubectl get deployment  -n ns-test

#或

kubectl get pods -n ns-test

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

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

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

apiVersion: v1

kind: Service

metadata:

namespace: ns-test

name: nginx-service

spec:

selector:

  app: nginx

ports:

- protocol: TCP

  port: 80

  targetPort: 80

执行

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方式,如下:

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部署的应用了。

执行

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 地址。外部客户端可以通过 <NodeIP>:<NodePort> 来访问该服务。NodePort 类型的服务适用于需要在集群外部访问的服务,例如 Web 服务。

LoadBalancer 类型的服务将使用集群外部的负载均衡器来暴露服务。外部客户端可以通过负载均衡器的 IP 地址来访问该服务。LoadBalancer 类型的服务适用于需要在集群外部访问的服务,并且需要高可用性的服务。一般LoadBalancer是付费提供的。

ExternalName 类型的服务将将服务指向一个外部主机或域名。Pod 可以通过该主机或域名来访问该服务。ExternalName 类型的服务适用于需要访问外部服务的场景。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oe2-dyHDpS9_bOmTIQ4odRwg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券