标签: okd

短暂闲置后无法使用Openshift服务

我们的项目托管在OpenShift中(确切地说是OKD。我们自己托管)。设置如下:

  • 路由服务器(带有Zuul的Spring Boot 1.5.8):该服务器接收所有传入流量并将其路由到正确的服务

  • 多种服务(全部使用Spring Boot):这是所有业务逻辑

我们使用SOAP来调用该项目中的其他服务。

当前,当我们调用应用程序时,调用转到路由服务器,然后路由服务器将其路由到主要业务服务。约一个小时的闲置时间后,无法通过外部呼叫获得我们的主要业务服务。但是,边缘服务器在100%的时间内可用且可调用。504 Gateway Timeout当我们调用它时,确实会从系统中获取异常。我们已经弄清楚这是openshift haproxy.router.openshift.io/timeout中的路由超时(在路由中)。

核心问题是,OpenShift似乎在闲置了大约一个小时后便休眠了主要业务服务。经过15分钟的延迟后,呼叫似乎找到了目的地,并且数据得到了正确处理。

我们如何关闭这种行为?

编辑1:

  • 我们在生产中的普通“老式” VM中具有相同的应用程序。我们在那里没有任何问题。
  • 我们注意到当我们将它们定期调用时,这些服务可以“保持活动”。我们建立了一个小型服务,定期调用主题(每隔15分钟)。这样看来可行。但这不是IMO可以投入生产的解决方法。

编辑2:

我们的pod配置(某些名称已匿名):

https://gist.github.com/moritzluedtke/6867499b0acbb2d7b5a9a70e49b0d45c

我们不使用自动定标器。

编辑3:

我们的部署配置(某些名称已匿名):

https://gist.github.com/moritzluedtke/dc7c1078fe9cc7e4aeb737094849fc1b

OpenShift Master:      v3.11.0+1c3e643-87
Kubernetes Master:     v1.11.0+d4cacc0
OpenShift Web Console: v3.11.0+ea42280
Run Code Online (Sandbox Code Playgroud)

编辑4:

看来这不是OpenShift的问题,而是我们的技术堆栈。一旦有解决方案,我将更新此问题。

java openshift spring-boot okd

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

OpenShift Origin 4.X的时间表是什么?

我的公司正在与OKD合作。我有一个问题,何时可以向公众提供4.1版。在这方面的任何评论将不胜感激。

okd

6
推荐指数
0
解决办法
120
查看次数

openshift 3.11 安装失败 - 无法更新 cni 配置:在 /etc/cni/net.d 中找不到网络",

我正在尝试在一个主节点、一个工作节点设置上安装 Openshift 3.11。

安装失败,我可以看到journalctl -r

2730 kubelet.go:2101] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
2730 cni.go:172] Unable to update cni config: No networks found in /etc/cni/net.d
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  1. 重启主节点
  2. 确保hostnamehostname -f所有节点上的相同
  3. 禁用主节点上的 IP 转发,如https://github.com/openshift/openshift-ansible/issues/7967#issuecomment-405196238https://linuxconfig.org/how-to-turn-on-off-ip 中所述-forwarding-in-linux
  4. 在主节点上应用 kube-flannel,如/sf/answers/3834591701/ 所述
  5. unset http_proxy https_proxy在主节点上,如https://github.com/kubernetes/kubernetes/issues/54918#issuecomment-385162637 所述
  6. 修改/etc/resolve.conf为 have nameserver 8.8.8.8,如上所述https://github.com/kubernetes/kubernetes/issues/48798#issuecomment-452172710 所述
  7. 创建了一个包含内容的文件 /etc/cni/net.d/80-openshift-network.conf { "cniVersion": "0.2.0", "name": "openshift-sdn", "type": "openshift-sdn" …

openshift openshift-origin kubernetes okd

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

由于权限被拒绝问题,Filebeat 无法访问“/var/lib/docker/containers”路径下的日志

我正在尝试在 Openshift 环境中使用 Filebeat 部署 ELK 堆栈。

Filebeat 正在尝试读取 Pod 的“/var/lib/docker/containers”路径下的日志文件,但失败并出现“权限被拒绝”错误。

我正在使用带有“runsAsAny”和“runAsUser: 0”的 SCC,

- apiVersion: v1
  kind: SecurityContextConstraints
  metadata:
    name: hostpath
  allowPrivilegedContainer: true
  allowHostDirVolumePlugin: true
  runAsUser:
    type: RunAsAny
  seLinuxContext:
    type: RunAsAny
  fsGroup:
    type: RunAsAny
  readOnlyRootFilesystem: false
  supplementalGroups:
    type: RunAsAny
  users:
  - my-admin-user
  groups:
  - my-admin-group
Run Code Online (Sandbox Code Playgroud)

卷安装:

volumeMounts:
- mountPath: /var/lib/docker/containers
  name: varlibdockercontainers
Run Code Online (Sandbox Code Playgroud)

主机路径卷:

securityContext:
  runAsUser: 0
volumes:
- hostPath:
    path: /var/lib/docker/containers
    type: ""
  name: varlibdockercontainers
Run Code Online (Sandbox Code Playgroud)

如果我在 SCC 中缺少某些内容,以便在“/var/lib/docker/containers”路径中至少具有读取权限,请告诉我。

kubernetes filebeat okd

6
推荐指数
0
解决办法
610
查看次数

如果 Pod 未处于运行状态,则 statefulset 无法回滚

我已经使用自动滚动策略部署了 mongo 有状态 pod,下面是它的模板。部署成功,Pod 进入 Running 状态。

- apiVersion: apps/v1beta1
  kind: StatefulSet
  metadata:
    name: mongo
  spec:
    serviceName: "mongo"
    podManagementPolicy: Parallel
    replicas: 3
    strategy:
      type: Rolling
    template:
      metadata:
        labels:
          role: mongo
          environment: test
      spec:
        terminationGracePeriodSeconds: 10
        containers:
          - name: mongo
            image: mongo:4.0
            imagePullPolicy: Always
            command:
              - mongod
              - "--replSet"
              - rs0
              - "--bind_ip"
              - 0.0.0.0
              - "--smallfiles"
              - "--noprealloc"
            ports:
              - containerPort: 27017
            volumeMounts:
              - name: mongo-persistent-storage
                mountPath: /data/db
          - name: mongo-sidecar
            image: cvallance/mongo-k8s-sidecar
            env:
              - name: MONGO_SIDECAR_POD_LABELS
                value: "role=mongo,environment=test"
    updateStrategy: …
Run Code Online (Sandbox Code Playgroud)

openshift kubernetes-statefulset okd

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

如何在 dnsConfig 中将节点 ip 设置为名称服务器?

我正在覆盖 pod 的 dns 策略,因为我面临着pod 的默认问题/etc/resolv.conf。另一个问题是由于/etc/resolv.confpod 的默认设置,pod无法连接到 smtp 服务器

因此,需要应用于部署/pod 的 dnspolicy 是:

      dnsConfig:
        nameservers:
          - <ip-of-the-node>
        options:
          - name: ndots
            value: '5'
        searches:
          - monitoring.svc.cluster.local
          - svc.cluster.local
          - cluster.local
      dnsPolicy: None
Run Code Online (Sandbox Code Playgroud)

在上面的配置中,nameservers需要是部署 pod 的节点的 IP。由于我有三个工作节点,我无法将值硬编码到特定工作节点的 IP。我不希望将 pod 配置为部署到特定节点,因为如果资源不足以让 pod 部署到特定节点,则 pod 可能会保持挂起状态。

如何nameservers获取部署 pod 的节点的 IP 地址的值?

或者是否可以nameservers使用某种通用参数更新pod,以便 pod 能够连接到 smtp 服务器。

openshift openshift-origin kubernetes kubernetes-pod okd

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

无法在 openshift 中部署 mongodb 社区运营商

我正在尝试使用以下命令在 openshift 3.11 中部署 mongodb 社区操作员

git clone https://github.com/mongodb/mongodb-kubernetes-operator.git
cd mongodb-kubernetes-operator 
oc new-project mongodb
oc create -f deploy/crds/mongodb.com_mongodb_crd.yaml -n mongodb
oc create -f deploy/operator/role.yaml -n mongodb
oc create -f deploy/operator/role_binding.yaml -n mongodb
oc create -f deploy/operator/service_account.yaml -n mongodb 
oc apply -f deploy/openshift/operator_openshift.yaml -n mongodb
oc apply -f deploy/crds/mongodb.com_v1_mongodb_openshift_cr.yaml -n mongodb
Run Code Online (Sandbox Code Playgroud)

Operator pod 已成功运行,但 mongodb 副本集 pods 没有出现。错误如下

[kubenode@master mongodb-kubernetes-operator]$ oc get pods
NAME                                           READY     STATUS             RESTARTS   AGE
example-openshift-mongodb-0                    1/2       CrashLoopBackOff   4          2m
mongodb-kubernetes-operator-66bfcbcf44-9xvj7   1/1       Running            0          2m

[kubenode@master mongodb-kubernetes-operator]$ oc …
Run Code Online (Sandbox Code Playgroud)

mongodb openshift openshift-origin kubernetes okd

5
推荐指数
0
解决办法
583
查看次数

Openshift/OKD - 如何模板化 docker 秘密

作为拥有大量参数化 Openshift 模板的管理员,我正在努力在模板中为 kubernetes.io/dockerconfigjson 或 kubernetes.io/dockercfg 类型创建参数化的 SECRET 对象,以便该秘密可用于 docker pull。

挑战:对于普通的 dockerconfigjson 模板设置,所有内容都是以 JSON 格式进行的 pre-base64 编码,但不确定如何更改它。

问:如何创建一个带有参数 ${DOCKER_USER}、${DOCKER_PASSWORD}、${DOCKER_SERVER} 和 ${DOCKER_EMAIL} 的 SECRET 模板,然后创建可用于从私有/受保护的 docker 注册表。

这是为了替换命令行“oc create secret docker-registry ....”技术,将它们放在存储在 gitlab/github 中的模板文件中,以具有 gitOps 风格的部署模式。

谢谢!

openshift okd

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