运行创建后,我的 Kubernetes 集群中的一个 pod 卡在“ContainerCreating”上。如何查看此操作的日志以诊断其卡住的原因?kubectl logs似乎不起作用,因为容器需要处于非挂起状态。
我有以下 Kubernetes 作业配置:
---
apiVersion: batch/v1
kind: Job
metadata:
name: dbload
creationTimestamp:
spec:
template:
metadata:
name: dbload
spec:
containers:
- name: dbload
image: sdvl3prox001:7001/pbench/tdload
command: ["/opt/pbench/loadTpcdsData.sh", "qas0063", "dbc", "dbc", "1"]
restartPolicy: Never
imagePullSecrets:
- name: pbenchregkey
status: {}
Run Code Online (Sandbox Code Playgroud)
当我完成kubectl create -f dbload-deployment.yml --record这项工作并创建了一个 pod 时,Docker 容器运行完成,我得到以下状态:
$ kubectl get job dbload
NAME DESIRED SUCCESSFUL AGE
dbload 1 1 1h
$ kubectl get pods -a
NAME READY STATUS RESTARTS AGE
dbload-0mk0d 0/1 Completed 0 1h
Run Code Online (Sandbox Code Playgroud)
这项工作是一次性交易,我需要能够重新运行它。如果我尝试使用kubectl create命令重新运行它,我会收到此错误 …
从 Kubernetes 1.8 开始,我似乎需要在我的节点上禁用交换(或设置--fail-swap-on为false)。
我找不到 Kubernetes 坚持禁用交换的技术原因。这是出于性能原因吗?安全原因?为什么没有记录这个原因?
我在 google 容器引擎中有一个单节点 kubernetes 集群可以玩。
现在,我托管的一个小型个人网站已经离线了几分钟。当我查看容器的日志时,我看到最近完成的正常启动序列,因此我假设一个容器死亡(或被杀死?)并重新启动。
我怎样才能弄清楚发生这种情况的方式和原因?
有没有办法在容器意外启动/停止时收到警报?
selector 字段定义了 Deployment 如何找到要管理的 Pod。
但是,在创建部署时,我已经将 pod 模板指定为部署的一部分。那么,为什么我还需要选择器呢?
它是否应该像服务一样使用,其中 pod 已经单独启动,但后来被置于 Deployment 的保护伞下以一起管理?
目前我正在做一个小型的爱好项目,一旦它准备好,我就会开源。此服务在 Google Container Engine 上运行。我选择 GCE 是为了避免配置麻烦,成本可以承受并学习新东西。
我的 pod 运行良好,我创建了一个类型LoadBalancer的服务来在端口 80 和 443 上公开服务。这完美地工作。
但是,我发现对于每个LoadBalancer服务,都会创建一个新的 Google Compute Engine 负载均衡器。这个负载均衡器非常昂贵,并且对于单个实例上的业余项目来说真的做得太过分了。
为了降低成本,我正在寻找一种无需负载平衡器即可公开端口的方法。
到目前为止我尝试过的:
部署NodePort服务。不幸的是,不允许公开低于 30000 的端口。
部署一个 Ingress,但这也会创建一个负载均衡器。
试图禁用HttpLoadBalancing(https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters#HttpLoadBalancing)但它仍然创建了一个负载平衡器。
有没有办法在没有负载均衡器的情况下为 Google Container Engine 上的单个实例公开端口 80 和 443?
所以,我试图让 Nexus 基于Kubernetes 中的这个图像运行,但它失败了:
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory
Run Code Online (Sandbox Code Playgroud)
从文档中可以看出该进程使用 UID 200 运行,并且必须使用这些权限安装卷:
A persistent directory, /nexus-data, is used for configuration,
logs, and storage. This directory needs to be writable by the Nexus
process, which runs as UID 200.
Run Code Online (Sandbox Code Playgroud)
我试图搜索文档以找到一种使用这些权限安装卷的方法,但是,我找不到任何方法来做到这一点。
有谁知道您是否可以在 PVC/PV 或 Deployment 的配置中指定用于安装卷的 UID?如果是这样,如何?
我目前使用 Kubernetes 规范Deployment.yaml来部署服务。该规范包括对特定 IP 地址的逐字引用(标记<static-ip-address>如下):
spec:
type: LoadBalancer
loadBalancerIP: <static-ip-address>
Run Code Online (Sandbox Code Playgroud)
我担心将密码或 IP 地址等信息推送到远程 Git 存储库中。我可以通过使用环境变量来避免这种情况,例如使用部署规范和实际部署大致如下:
spec:
type: LoadBalancer
loadBalancerIP: ${SERVICE_ADDRESS}
Run Code Online (Sandbox Code Playgroud)
和
export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml
Run Code Online (Sandbox Code Playgroud)
显然,这种特定的语法还不起作用。但是这样的事情可能吗,如果有的话怎么办?
我宁愿不依赖单独的配置工具。Secret s 和ConfigMaps 看起来很有希望,但显然不能以适合此目的的方式使用它们。如果我可以直接引用用它定义的静态 IP 地址gcloud compute addresses create service-address,那就最好了。
我在尝试创建 pod 时遇到了这个错误。甚至像 Ubuntu、Alpine 这样非常常见的图像也会发生这种情况。我对 Kubernetes 还很陌生并且使用Minikube 节点(版本 v0.24.1)
命令:
kubectl run ubuntu --image==ubuntu
Run Code Online (Sandbox Code Playgroud)
错误:
Back-off restarting failed container - Error syncing pod
Run Code Online (Sandbox Code Playgroud)
版本:
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"**v1.8.0**", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:57:57Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"**v1.8.0**", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}
描述 Pod 命令:
Name: ubuntunew-7567df64b8-mwc7x
Namespace: default
Node: minikube/192.168.99.102
Start Time: Tue, 31 Jul 2018 14:48:35 +0530
Labels: pod-template-hash=3123892064
run=ubuntunew
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"ubuntunew-7567df64b8","uid":"b3ba5547-94a2-11e8-91ce-080027df8e9...
Status: Running
IP: 172.17.0.4
Created By: ReplicaSet/ubuntunew-7567df64b8
Controlled By: ReplicaSet/ubuntunew-7567df64b8 …Run Code Online (Sandbox Code Playgroud) 我已经kubelet 1.26.0使用命令安装在 Ubuntu 22.04 上apt install kubelet,但是当我尝试时journalctl -xeu kubelet得到以下结果:
\xe2\x96\x91\xe2\x96\x91 \n\xe2\x96\x91\xe2\x96\x91 The unit kubelet.service has entered the 'failed' state with result 'exit-code'.\nDec 14 15:41:16 a systemd[1]: kubelet.service: Scheduled restart job, restart counter is at 86.\n\xe2\x96\x91\xe2\x96\x91 Subject: Automatic restarting of a unit has been scheduled\n\xe2\x96\x91\xe2\x96\x91 Defined-By: systemd\n\xe2\x96\x91\xe2\x96\x91 Support: http://www.ubuntu.com/support\n\xe2\x96\x91\xe2\x96\x91 \n\xe2\x96\x91\xe2\x96\x91 Automatic restarting of the unit kubelet.service has been scheduled, as the result for\n\xe2\x96\x91\xe2\x96\x91 the configured Restart= setting for the unit.\nDec 14 15:41:16 a systemd[1]: …Run Code Online (Sandbox Code Playgroud) kubernetes ×10
disk-volume ×1
docker ×1
kubeadm ×1
permissions ×1
pv ×1
swap ×1
systemctl ×1
systemd ×1