• k8s端口问题


    在service中

    port:8199   //svc端口
    
    targetport:8199    //容器端口
    

    在ingress中

    servicePort:8199   //svc端口要与port端口一致
    

    headless_serivce(无头服务)

    在svc资源中增加如下表示启动无头服务,不走clusterip,默认不设置走的就是clusterip模式。

    apiVersion: v1
    kind: Service
    metadata:
      name: main
      labels:
        helm.sh/chart: main
    spec:
      type: ClusterIP
      clusterIP: None   //启动无头服务
      ports:
        - port: 8199
          targetPort: 8199
          protocol: TCP
          name: http
      selector:
        app.kubernetes.io/name: main
        app.kubernetes.io/instance: main
    

    headless_serivce(无头服务)在deployment和StatefulSet都能使用

    StatefulSet

    使用StatefulSet资源时候service资源标准规范设置是加无头服务的,也就是说在端口设置上要保持和容器的端口一致,无头服务了所以没有分配IP地址所以无法做转发不走svcip,添加配置clusterIP: None ,像开源组件zookeeper官方给出的k8s.yaml文件,配置了2个service资源对象,一个是headless,一个是clusterIP。

    例子如下:

    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: sgm-middleware
      name: zookeeper-svc
      labels:
        app: zookeeper
    spec:
      ports:
        - port: 2181
          name: client
      selector:
        app: zookeeper
    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: sgm-middleware
      name: zookeeper-svc-headless
    spec:
      ports:
        - port: 2888
          name: server
        - port: 3888
          name: leader-election
      clusterIP: None
      selector:
        app: zookeeper
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      namespace: sgm-middleware
      name: zookeeper
      labels:
        app: zookeeper
    spec:
      serviceName: zookeeper-svc-headless
      replicas: 3
      updateStrategy:
        type: OnDelete
      selector:
        matchLabels:
          app: zookeeper
      template:
        metadata:
          labels:
            app: zookeeper
        spec:
          containers:
            - name: zookeeper-server
              imagePullPolicy: Always
              image: test-zk.com/paas/zookeeper:3.4.6
              resources:
                limits:
                  cpu: "2"
                  memory: 4Gi
                requests:
                  cpu: "1"
                  memory: 2Gi
              ports:
                - containerPort: 2181
                  name: client
                - containerPort: 2888
                  name: server
                - containerPort: 3888
                  name: leader-election
              env:
                - name: TZ
                  value: "Asia/Shanghai"
                - name: sleep_seconds
                  value: "120"
                - name : ZK_REPLICAS
                  value: "3"
                - name : ZK_HEAP_SIZE
                  value: "1G"
                - name : ZK_TICK_TIME
                  value: "2000"
                - name : ZK_INIT_LIMIT
                  value: "10"
                - name : ZK_SYNC_LIMIT
                  value: "5"
                - name : ZK_MAX_CLIENT_CNXNS
                  value: "60"
                - name: ZK_SNAP_RETAIN_COUNT
                  value: "3"
                - name: ZK_PURGE_INTERVAL
                  value: "1"
                - name: ZK_LOG_LEVEL
                  value: INFO
                - name: ZK_CLIENT_PORT
                  value: "2181"
                - name: ZK_SERVER_PORT
                  value: "2888"
                - name: ZK_ELECTION_PORT
                  value: "3888"
              volumeMounts:
                - name: datadir
                  mountPath: /var/lib/zookeeper
                  subPath: data
      volumeClaimTemplates:
        - metadata:
            name: datadir
          spec:
            accessModes: [ "ReadWriteOnce" ]
            storageClassName: nfs-rd
            resources:
              requests:
                storage: 100Gi
    
    

    其中把集群内部通信的端口2888 和 集群选举端口3888 设置成了 headless方式,端口2181就是zk服务端暴露出来供zk客户端连接的端口,之后zk客户端(ssh终端或者java代码客户端)发送命令到服务端都会经过这个端口设置成了clusterIP,2181这么设置是为了集群可以在k8s外访问,当暴漏NodePort(公网或集团内公网)的时候就会用上,而headless方式是无法使用NodePort的。

  • 相关阅读:
    .NET Framework 概述
    .Net笔试(二)
    EF CodeFirst 创建数据库
    C#中的继承
    SqlHelper 基类
    在C#中实现OOP概念
    索引器、委托和事件
    .Net笔试(一)
    HTML标签速记整理W3C
    Java函数调用总结
  • 原文地址:https://www.cnblogs.com/sunju/p/15735650.html
Copyright © 2020-2023  润新知