写写k8s中nodeport类型的service

apiVersion: v1
kind: Service
metadata:
  name: my-service                      # Service 的名称
spec:
  type: NodePort                        # Service 类型为 NodePort
  selector:
    app: my-app                         # 根据标签选择器选择要关联的 Pod
  ports:
    - protocol: TCP                     # 服务端口的协议
      port: 80                           # Service 的端口
      targetPort: 8080                   # Pod 的目标端口
      nodePort: 30080                    # 暴露到节点的端口
  • apiVersion:指定 Kubernetes API 的版本,这里使用的是 v1 版本。
  • kind:指定资源的类型,这里是 Service
  • metadata:用于定义资源的元数据,例如名称、标签等。
    • name:指定 Service 的名称为 my-service
  • spec:定义 Service 的规范。
    • type:指定 Service 类型为 NodePort。这表示将在每个节点上公开一个端口,并将流量转发到 Service。
    • selector:根据标签选择器选择要与 Service 关联的 Pod。
      • app: my-app:这里选择具有标签 app: my-app 的 Pod 与该 Service 关联。
    • ports:定义 Service 的端口配置。
      • protocol:指定服务端口的协议,这里使用的是 TCP。
      • port:指定 Service 的端口,这里设置为 80
      • targetPort:指定将流量转发到 Pod 的目标端口,这里设置为 8080
      • nodePort:指定要暴露到每个节点的端口,这里设置为 30080

通过上述 YAML 文件,定义了一个名为 my-service 的 NodePort 类型的 Service。该 Service 关联带有标签 app: my-app 的 Pod,并将流量从每个节点的 30080 端口转发到与该标签匹配的 Pod 的 8080 端口上。

port 和nodeport的区别

在 Kubernetes 的 NodePort 类型的 Service 中,portnodePort 是两个不同的概念,它们的区别如下:

  • portport 是 Service 的端口,用于标识 Service 监听的端口号。它是在集群内部使用的端口,用于将流量从 Service 转发到关联的 Pod 的 targetPort 上。port 是在 Service 内部定义的,其他 Service 或外部用户可以使用它来访问 Service。

  • nodePortnodePort 是 Service 暴露到每个节点的端口,用于外部访问 Service。当 Service 类型设置为 NodePort 时,Kubernetes 会在每个节点上打开一个相同的 nodePort,并将流量转发到 Service 的 port 上。nodePort 是在整个集群范围内定义的,它允许从集群外部通过节点的 IP 地址和 nodePort 访问 Service。

在总结上述区别时:

  • port 是 Service 内部使用的端口,用于将流量从 Service 转发到 Pod。
  • nodePort 是 Service 暴露到每个节点的端口,用于从集群外部访问 Service。

需要注意的是,nodePort 的取值范围是 30000-32767,因此在定义 nodePort 时需要确保不与其他已使用的端口冲突。

这两个端口是 Service 的两个不同层级的端口,port 用于 Service 内部的流量转发,而 nodePort 用于从集群外部访问 Service。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要分步骤来回答。 首先,我们需要准备以下资源: 1. Hadoop镜像 2. NFS服务器 3. Kubernetes集群 4. Kubectl命令行工具 接下来,我们需要在Kubernetes集群创建一个NFS的Persistent Volume。 ``` apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: path: /data/nfs server: nfs-server-ip ``` 然后,我们需要创建一个PVC,将其绑定到上面创建的PV上。 ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pv-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi selector: matchLabels: name: nfs-pv ``` 接下来,我们需要创建一个ConfigMap,存储Hadoop的配置文件。 ``` apiVersion: v1 kind: ConfigMap metadata: name: hadoop-config data: core-site.xml: | <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> </property> </configuration> hdfs-site.xml: | <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/datanode</value> </property> </configuration> ``` 然后,我们需要创建一个Headless Service,用于访问Hadoop的NodePort。 ``` apiVersion: v1 kind: Service metadata: name: hadoop labels: app: hadoop spec: ports: - name: namenode port: 9000 targetPort: 9000 - name: datanode port: 50010 targetPort: 50010 - name: jmx port: 50075 targetPort: 50075 - name: web port: 9870 targetPort: 9870 clusterIP: None selector: app: hadoop ``` 接下来,我们需要创建一个StatefulSet,用于启动Hadoop的节点。 ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: hadoop spec: serviceName: hadoop replicas: 3 selector: matchLabels: app: hadoop template: metadata: labels: app: hadoop spec: containers: - name: namenode image: hadoop-image command: [ "/bin/bash", "-c", "hdfs namenode" ] ports: - name: namenode containerPort: 9000 - name: jmx containerPort: 50075 - name: web containerPort: 9870 volumeMounts: - name: hadoop-config mountPath: /usr/local/hadoop/etc/hadoop - name: nfs-pv mountPath: /data env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: datanode image: hadoop-image command: [ "/bin/bash", "-c", "hdfs datanode" ] ports: - name: datanode containerPort: 50010 volumeMounts: - name: nfs-pv mountPath: /data env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: metadata.name volumeClaimTemplates: - metadata: name: nfs-pv spec: accessModes: [ "ReadWriteMany" ] resources: requests: storage: 10Gi selector: matchLabels: name: nfs-pv ``` 最后,我们需要创建一个Service,用于访问Hadoop的NodePort。 ``` apiVersion: v1 kind: Service metadata: name: hadoop-nodeport spec: ports: - name: namenode port: 9000 targetPort: 9000 nodePort: 30070 - name: datanode port: 50010 targetPort: 50010 nodePort: 30075 - name: jmx port: 50075 targetPort: 50075 nodePort: 30080 - name: web port: 9870 targetPort: 9870 nodePort: 30090 selector: app: hadoop type: NodePort ``` 以上就是部署Hadoop集群的Kubernetes配置文件,可以根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值