Kubernetes 引入了PodDisruptionBudget,它可以防止我们的应用程序的功能因手动和自动垂直(节点)扩展而中断。
假设我们正在使用HozirontalPodAutoscaler。另外使用 PDB 的价值是什么?PodDisruptionBudget minAvailable
和HozirontalPodAutoscaler minReplicas
之间有什么区别?
Kubernetes 引入了PodDisruptionBudget,它可以防止我们的应用程序的功能因手动和自动垂直(节点)扩展而中断。
假设我们正在使用HozirontalPodAutoscaler。另外使用 PDB 的价值是什么?PodDisruptionBudget minAvailable
和HozirontalPodAutoscaler minReplicas
之间有什么区别?
一直在查看 Flink Kubernetes Operator v1.10 的文档,有没有办法预先配置集群,以便所有提交的作业都将使用带有预定义 s3 路径的 rocksdb 状态?要实现这一点需要什么?我一直在尝试使用 S3 后端设置作业,但它说不支持 s3 后端,我需要启用 s3 插件,但我不确定该怎么做。
我已经部署,但随着时间的推移,出现了错误。
NAME READY STATUS RESTARTS AGE
pod/picanagm-solution-5cb8887968-qk4pr 0/1 CrashLoopBackOff 140 (78s ago) 11h
pod/picanagm-solution-77f5fcfdc-kwd9w 1/1 Running 0 2d20h
失败 Pod 的日志
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BackOff 2m42s (x3258 over 11h) kubelet Back-off restarting failed container
和
Picked up JAVA_TOOL_OPTIONS: -Dlogging.config=/app/run/logback.xml -DcontentServer.factory-reset=folder -DcontentServer.factory-reset.folder-name=file:/app/bookmarks -DSameSite=none -Dconfiguration.sign-off.enabled=true -Ddata.extraction.templates.base.dir.path=${java.io.tmpdir} --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED
I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL http://10.244.4.81:8778/jolokia/
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/activeviam/MINDZ/starter/main/MINDZApplication has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
一个副本集正常,另一个副本集尚未准备好
replicaset.apps/picanagm-solution-5cb8887968 1 1 0 11h
为什么?如何调试此行为?
我使用 watch 机制来监控另一个集群中的资源,例如特定命名空间下的 Pod。我想及时检测 watch 连接的健康状态,包括连接延迟以及连接是否断开。我注意到在断开连接后 30 秒内会生成错误日志,但我没有找到可以收集的相关指标。
我想公开有关监视操作延迟的指标。阅读客户端 go 和组件库源代码后,我仍然不知道该怎么做(使用其他预打包库的解决方案对我来说也很好)。或者有没有办法让我直接监视到目标集群的延迟?
我第一次尝试在这里添加观察。
informer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: func(obj interface{}) bool {
// Update last synced time.
UpdateLastSyncedTime()
return true
},
}
但经过讨论,我发现这可能不是一个好方法。原因是,更新功能是由通知器事件触发的,这些事件源于集群中项目的更改或定期重新同步。要使前面提到的方法发挥作用,需要减少重新同步间隔,这可能会导致效率低下。
我按照以下文档中提到的步骤在 Kubernetes 上安装了全新的 Couchbase 集群:
我已经在 Kubernetes 集群 v 1.28.1 上安装了 kubernetes 运算符 v 2.7。安装自定义资源定义、运算符和准入控制器的命令成功。
当我运行时,kubectl apply -f couchbase-cluster.yaml
出现以下错误:
secret/cb-example-auth created
Error from server (InternalError): error when creating "couchbase-cluster.yaml": Internal error occurred: failed calling webhook "release-1-couchbase-admission-controller.couchbase.svc": failed to call webhook: Post "https://release-1-couchbase-admission-controller.couchbase.svc:443/couchbaseclusters/validate?timeout=10s": service "release-1-couchbase-admission-controller" not found
Error from server (InternalError): error when creating "couchbase-cluster.yaml": Internal error occurred: failed calling webhook "release-1-couchbase-admission-controller.couchbase.svc": failed to call webhook: Post "https://release-1-couchbase-admission-controller.couchbase.svc:443/couchbaseclusters/validate?timeout=10s": service "release-1-couchbase-admission-controller" not found
这些是 cao 创建的实际服务:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
couchbase-operator ClusterIP xx.xx.xx.xx <none> 8080/TCP,8383/TCP 19m
couchbase-operator-admission ClusterIP xx.xx.xx.xx <none> 443/TCP 19m
似乎在创建集群时,Couchbase 正在为操作员和准入控制器寻找与 cao 实际安装的服务名称不同的服务名称。我该如何解决这个问题?
我正在尝试为 Kubernetes 集群设置基于 NFS 的持久卷,我已创建挂载点并将共享挂载到配置为在启动时挂载的客户端: 在其中一个客户端上挂载的共享示例
我已经创建了我的卷 yaml,如下所示
apiVersion: v1
kind: PersistentVolume
metadata:
name: cc-pv-volume
labels:
type: local
author: Administrator
spec:
storageClassName: manual
claimRef:
name: pv-claim
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
# persistentVolumeReclaimPolicy: Retain
nfs:
path: /nfs/general
server: 172.16.0.4
readOnly: false
和我的PersistentVolumeClaim yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
当我运行命令时sudo kubectl apply -f pv-claim.yaml
终端返回persistentvolumeclaim/pv-claim created
,但当我运行时sudo kubectl get pv cc-pv-volume
卷的状态仍然为“可用”,而不是显示“已绑定”
任何关于我做错的事情的想法,谢谢,Archvirus
编辑:我注意到在 PV 中 AccessMode 是:ReadWriteMany
但在 PVC 中 AccessMode 是:ReadWriteOnce
我编辑了 PVC 以将 AccessMode 更改为,ReadWriteMany
因为我有 2 个节点(Ubuntu1 和 Ubuntu2),但当我应用此更改时,终端返回
The PersistentVolumeClaim "pv-claim" is invalid: spec: Forbidden: spec is immutable after creation except resources.requests and volumeAttributesClassName for bound claims
core.PersistentVolumeClaimSpec{
- AccessModes: []core.PersistentVolumeAccessMode{"ReadWriteOnce"},
+ AccessModes: []core.PersistentVolumeAccessMode{"ReadWriteMany"},
Selector: nil,
Resources: {Requests: {s"storage": {i: {...}, s: "2Gi", Format: "BinarySI"}}},
... // 6 identical fields
}
我尝试创建一个名为 pv-claim-test 的新 yaml 文件,它与“pv-claim”相同,但 AccessMode 更改为ReadWriteMany
,删除了“pv-claim.yaml”并尝试应用新的 PVC,但终端出现与之前相同的错误。
我认为问题是由于 PV 和 PVC 具有不同的 StorageClass,PV 不能满足声明的要求因此不具有约束力,但我不知道为什么我无法应用新的 PVC,并且当我使用该命令时sudo kubectl apply -f pv-claim-test.yaml
错误仍然引用pv-claim.yaml
即使pv-claim.yaml
不再存在并且我没有尝试应用该 yaml。
运行“sudo kubectl describe persistentvolume cc-pv-volume”的结果显示没有声明,但它不允许我更改正在应用的 PVC
Name: cc-pv-volume
Labels: author=Administrator
type=local
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass: manual
Status: Available
Claim:
Reclaim Policy: Retain
Access Modes: RWX
VolumeMode: Filesystem
Capacity: 2Gi
Node Affinity: <none>
Message:
Source:
Type: NFS (an NFS mount that lasts the lifetime of a pod)
Server: 172.16.0.4
Path: /nfs/general
ReadOnly: false
Events: <none>
我正在通过阅读教科书《Kubernetes in Action》来学习 Kubernetes。我正在阅读有关服务和端点的章节。
我注意到,如果我分别创建一个服务和端点,然后删除该服务,端点也会被删除。即使我--cascade=orphan
在删除命令中使用选项,端点仍然不会被孤立。为什么我会遇到这种结果?我怎么不能保留端点?这是我尝试的实验:
这是我的test.yml
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
ports:
- port: 80
name: p1
- port: 91
name: p2
---
apiVersion: v1
kind: Endpoints
metadata:
# must match the service name
name: external-service
subsets:
- addresses:
- ip: 10.244.0.110
- ip: 10.244.0.111
- ip: 10.244.0.112
ports:
- port: 80
name: p1
- port: 91
name: p2
然后我运行了以下命令:
kubectl apply -f test.yml;
kubectl get endpoints; # i confirmed endpoints do exist
kubectl delete svc external-service --cascade=orphan;
kubectl get endpoints; # the endpoints are gone
我在 Helm Chart 的 yaml 中有以下值:
controller:
nodeSelector:
node-role.kubernetes.io/master: 'true'
但是我想只使用一个命令来安装图表,而不使用文件。
我尝试过这个但没有结果:
helm install A B \
--set "controller.nodeSelector[0].node-role.kubernetes.io/master='true'"
zsh:zsh: command not found: --set
看到这个我还以为是终端的问题
重击:json: cannot unmarshal array into Go struct field PodSpec.spec.template.spec.nodeSelector of type map[string]string
查看Pod Lifecycle文档,我看到一个状态部分,例如:
status:
conditions:
- type: Ready # a built in PodCondition
status: "False"
lastProbeTime: null
lastTransitionTime: 2018-01-01T00:00:00Z
对于 pod。如何使用 kubectl 查看此输出?当我运行 时kubectl describe pod podname
,我得到如下输出:
Name: podname
...
Status: Running
...
Conditions:
Type Status
PodReadyToStartContainers True
Initialized True
Ready True
ContainersReady True
PodScheduled True
但是这个输出看起来不像 pod readiness 中记录的示例,并且明显缺少我想要的 lastProbeTime 和 lastTransitionTime。我应该运行什么命令来获取此信息?
我目前正在开发一个设计为微服务 API 的 Node.js 项目。它由在我的计算机上本地运行的多个 Docker 容器组成。该项目的主要目的是使用物联网控制水培塔,采用各种传感器和 ESP32 微控制器。微服务使用 Skaffold 部署并通过 Kubernetes 进行管理。目前,我有四个运行中的微服务:身份验证服务、设备服务(处理每个设备的详细信息,例如单个水培塔)、邮件服务和使用 Next.js 和 React 构建的客户端界面。所有微服务都使用 Express,我使用 Ingress NGINX 进行服务间通信。
当我将所有 IoT 设备连接到同一网络并向本地 PC 发出 API 请求时,测试设置时出现了问题。我已将 /etc/hosts 文件配置为将“greenhive.io”(我创建的域)重定向到 127.0.0.1。我知道从另一台设备访问我的 PC 的 IP 允许通过端口 80 与我的本地设置进行通信。但是,当使用来自其他设备的 IP 地址时,我遇到“找不到 NGINX”错误。这表明问题出在我的 Ingress NGINX 部署中。这是我的 Ingress NGINX 的 YAML 文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-srv
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: 'greenhive.io'
http:
paths:
- path: /api/users/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: auth-srv
port:
number: 3000
- path: /api/devices/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: devices-srv
port:
number: 3000
- path: /api/logs/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: logs-srv
port:
number: 3000
- path: /api/readings/?(.*)
pathType: ImplementationSpecific
backend:
service:
name: readings-srv
port:
number: 3000
- path: /?(.*)
pathType: ImplementationSpecific
backend:
service:
name: client-srv
port:
number: 3000
我尝试将 hosts 文件上的 IP 更改为本地网络为我的 PC 提供的本地 IP。此外,我还尝试将我的 PC 的端口 80 转发到入口 pod 的端口 80。