小编ras*_*iya的帖子

用于路由 TCP 流量的入口控制器

我正在尝试设置一个入口控制器(nginx)来将一些 TCP 流量转发到 kubernetes 服务(GCP)。有本教程说明了如何使用nginx的路线HTTP通信服务(基于路径)。我想要一个类似的设置来转发 TCP 流量。

在我的集群中,我有一个 pod,它运行一个使用套接字用 Python 编写的 TCP 回显服务器。有一个服务附加到 pod。如果我将这个服务的服务类型设置为LoadBalancer,我可以按如下方式运行我的客户端并从集群中获取回声。

python client.py --host <EXTERNAL-IP-OF-LOAD-BALANCER> --port <PORT>
Run Code Online (Sandbox Code Playgroud)

与回显服务器类似,我的集群中有其他 TCP 服务为其他 pod 提供服务。目前我已将它们全部设置为 LoadBalancers。因此,它们具有外部 IP 并侦听不同端口上的流量。但是,我不想为所有这些服务创建 LoadBalancer。我将如何使用 nginx 根据端口号将 TCP 流量路由到不同的服务。如果 nginx 无法做到这一点,我是否可以使用其他选项来实现这一点?


更新:按照HangDu的回答,我创建了以下文件。

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: default
data:
  9000: "default/echo-service:50000"
Run Code Online (Sandbox Code Playgroud)

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: default
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP …
Run Code Online (Sandbox Code Playgroud)

tcp nginx google-cloud-platform kubernetes nginx-ingress

13
推荐指数
1
解决办法
2万
查看次数

在 Pod 重新创建或集群重新启动时,在 Kubernetes 上运行的 Postgres 会丢失数据

我有一个在GKE上运行的postgres容器和一个用于存储数据的设置。但是,如果集群重新启动或删除,数据库中的所有数据都会丢失。PodPersistentVolumePod

如果我运行kubectl delete <postgres_pod>删除现有Pod并检查新创建的(由kubernetesPod替换已删除的数据库,则相应的数据库没有Pod删除之前的数据。

这是我用来部署postgresyaml文件。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom-storage
parameters:
  type: pd-standard
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Retain
volumeBindingMode: Immediate
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-volume-claim
spec:
  storageClassName: custom-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
Run Code Online (Sandbox Code Playgroud)

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers: …
Run Code Online (Sandbox Code Playgroud)

persistent-storage docker kubernetes google-kubernetes-engine

3
推荐指数
1
解决办法
2079
查看次数

从Spark数据框中删除多列

我正在尝试从数据框中删除多个列。我已经在/sf/answers/2787305181/上遵循了该示例,但是它对我不起作用。我正在使用Spark 2.4.0

这就是我现在正在做的事情。它确实有效,但是我想知道是否有更好的方法可以做到这一点。

val colsToRemove = Seq("colA", "colB", "colC", etc) 

var filterdDF = df
 for(i <- 0 until colsToRemove.size){
    filterdDF = filterdDF.drop(colsToRemove(i))
}
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

1
推荐指数
1
解决办法
2340
查看次数

在"if-else结构"之外找不到"if-else结构"中定义的值

在下面的代码中,我希望编译器识别outputif部分或else部分中定义的get.

val df1 = spark.createDataFrame(Seq(
  (1, 10),
  (2, 20)
)).toDF("A", "B")

val df2 = spark.emptyDataFrame

if(df2.isEmpty){
    val output = df1
}
else{
    val output = df2
}

println(output.show)
Run Code Online (Sandbox Code Playgroud)

但是,它给我一个错误说 error: not found: value output.如果我在python中执行相同的实现,它工作正常,我得到预期的输出.为了使用scala使这个工作在spark中我已经定义output为一个可变变量并在其中更新它if-else.

var output = spark.emptyDataFrame

if(df2.isEmpty){
    output = df1
}
else{
    output = df2
}

println(output.show)
Run Code Online (Sandbox Code Playgroud)

为什么第一个实现不起作用,是否有办法在不使用可变变量的情况下获得预期结果?

scala apache-spark

1
推荐指数
1
解决办法
43
查看次数