我们的项目托管在OpenShift中(确切地说是OKD。我们自己托管)。设置如下:
路由服务器(带有Zuul的Spring Boot 1.5.8):该服务器接收所有传入流量并将其路由到正确的服务
多种服务(全部使用Spring Boot):这是所有业务逻辑
我们使用SOAP来调用该项目中的其他服务。
当前,当我们调用应用程序时,调用转到路由服务器,然后路由服务器将其路由到主要业务服务。约一个小时的闲置时间后,无法通过外部呼叫获得我们的主要业务服务。但是,边缘服务器在100%的时间内可用且可调用。504 Gateway Timeout当我们调用它时,确实会从系统中获取异常。我们已经弄清楚这是openshift haproxy.router.openshift.io/timeout中的路由超时(在路由中)。
核心问题是,OpenShift似乎在闲置了大约一个小时后便休眠了主要业务服务。经过15分钟的延迟后,呼叫似乎找到了目的地,并且数据得到了正确处理。
我们如何关闭这种行为?
我们的pod配置(某些名称已匿名):
https://gist.github.com/moritzluedtke/6867499b0acbb2d7b5a9a70e49b0d45c
我们不使用自动定标器。
我们的部署配置(某些名称已匿名):
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)
看来这不是OpenShift的问题,而是我们的技术堆栈。一旦有解决方案,我将更新此问题。
我的公司正在与OKD合作。我有一个问题,何时可以向公众提供4.1版。在这方面的任何评论将不胜感激。
我正在尝试在一个主节点、一个工作节点设置上安装 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)
我尝试过的事情:
hostname与hostname -f所有节点上的相同unset http_proxy https_proxy在主节点上,如https://github.com/kubernetes/kubernetes/issues/54918#issuecomment-385162637 所述/etc/resolve.conf为 have nameserver 8.8.8.8,如上所述https://github.com/kubernetes/kubernetes/issues/48798#issuecomment-452172710 所述{ "cniVersion": "0.2.0", "name": "openshift-sdn", "type": "openshift-sdn" …我正在尝试在 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”路径中至少具有读取权限,请告诉我。
我已经使用自动滚动策略部署了 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) 我正在覆盖 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 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) 作为拥有大量参数化 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 风格的部署模式。
谢谢!