我们在 Google Cloud Platform Kubernetes 集群中有一个 pod,将 JsonFormatted 写入 StdOut。这是 Stackdriver 开箱即用的。但是,我们看到 pod 的磁盘使用量一直在增长,我们无法理解如何在 Deployment 上设置最大大小以进行日志轮换。
Google Cloud 和 Kubernetes 上的文档对此不清楚。
这只是最后一个小时:
logging log-rotation google-cloud-platform kubernetes kubernetes-pod
我在 Google Container Registry 中有一个大小为 6.5GB 的图像。当我尝试通过部署在 Kubernetes 集群节点(工作节点)上拉取镜像时,会发生错误:ErrImagePull(或有时是 ImagePullBackOff)。我使用describe命令详细查看错误。该错误被描述为无法拉取映像“gcr.io/.../..”:rpc 错误:代码 = 已取消 desc = 上下文已取消 可能是什么问题以及如何缓解它?
我有一个设置 Metallb 作为 LB,在 K8S 集群上安装了 Nginx Ingress。我已经阅读了有关会话关联及其重要性的内容,但到目前为止我还没有清楚的了解。
如何创建一个服务来公开同一应用程序的多个 Pod?创建单个服务入口点后,如何将具体的客户端IP映射到服务抽象出来的Pod?
是否有任何博客根据 kubernetes 中如何完成客户端 IP 和 POD 之间的映射来解释这个概念?
但是我在 YAML 中没有看到客户端的 IP。那么,这个服务如何将流量映射到各自的客户端到它的端点?这是我的问题。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10000
Run Code Online (Sandbox Code Playgroud) kubernetes kubernetes-ingress kubernetes-pod kubernetes-service
看了kubernetes.io上的官方文档,我还是想知道 Kubernetes 中 label 和 selector 到底有什么区别?
编辑:例如考虑以下 Kubernetes 对象,以下 yaml 文件的 Labels 和 Selectors 有什么区别。
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: label-demo
labels:
environment: production
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: App1
template:
metadata:
labels:
environment: production
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
Run Code Online (Sandbox Code Playgroud) 要等待某个 pod 完成,命令是
kubectl wait --for=condition=Ready pod/pod-name
同样,我想等待 statefulset 中的任何一个 pod 准备就绪。我试过下面的命令没有用,
kubectl wait --for=condition=Ready statefulset/statefulset-name
命令选项应该是什么样的?
如何container port
从不同targetports
在Kubernetes容器?它们是否可以互换使用,如果可以,为什么?
我遇到了下面的代码片段,其中containerPort
用于表示port
Kubernetes 中的 pod。
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
labels:
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-pod
labels:
name: postgres-pod
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres:9.4
ports:
- containerPort: 5432
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,他们为containerPort
参数提供了 5432 (在最后一行)。那么,这containerPort
与targetport
?
据我所知,该术语port
泛指port
上service
(Kubernetes)。如果我不正确,请纠正我。
我有一个像下面这样的场景,有两个版本 - Release-A 和 Release-B。
目前,我在 Release-A 上,需要将所有微服务升级到 Release-B。我尝试使用以下命令执行微服务的掌舵升级 - “mymicroservice”以交付 Release-B。
helm --kubeconfig /home/config upgrade --namespace testing --install --wait mymicroservice mymicroservice-release-b.tgz
Run Code Online (Sandbox Code Playgroud)
由于某些问题,部署对象无法安装并进入错误状态。
观察到这一点,我执行以下回滚命令。
helm --kubeconfig /home/config --namespace testing rollback mymicroservice
Run Code Online (Sandbox Code Playgroud)
由于某些问题(可能是间歇性系统故障或用户行为),Release-A 的部署对象也进入了 failed/Crashloopbackoff 状态。虽然这会导致 helm 回滚成功,但部署对象仍然没有进入运行状态。
一旦我进行了必要的更正,我将重试回滚。由于部署规范已经使用 helm 进行了更新,因此即使处于失败状态,它也不会尝试重新安装部署对象。
Helm 是否有任何选项可以处理上述情况?
尝试使用--force
标志,但在使用 --force 标志方法时,还有其他与微服务中的服务对象替换相关的错误。
Rollback "mymicroservice -monitoring" failed: failed to replace object: Service "mymicroservice-monitoring" is invalid: spec.clusterIP: Invalid value: "": field is immutable
Run Code Online (Sandbox Code Playgroud) kubernetes microservices kubernetes-helm kubernetes-deployment kubernetes-pod
readinessProbe:指示容器是否准备好响应请求。如果就绪探测失败,端点控制器会从与 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址。初始延迟之前的默认就绪状态为失败。如果容器不提供就绪探测,则默认状态为成功
如果就绪探测失败(并且从端点删除了 Pod 的 IP 地址),接下来会发生什么?会再次检查 Pod 的就绪探测条件吗?它会在初始延迟后再次检查吗?Pod 的 IP 地址是否有可能再次添加到端点(如果 Pod 在就绪探测失败后自我修复)?如果 Pod 被治愈,它会再次收到流量吗?
self-healing kubernetes google-kubernetes-engine kubernetes-pod readinessprobe
我有一个 k3s 集群,我的应用程序 Pod 正在运行。当我登录(使用命令)时,在所有 Pod 中kubectl exec <pod_name> -n <ns> -it /bin/bash
都有kubernetes.io
一个目录,其中包含任何人都可以获得的秘密令牌 cat token
:
root@Ubuntu-VM: kubectl exec app-test-pod -n app-system -it /bin/bash
root@app-test-pod:/var/run/secrets/kubernetes.io/serviceaccount# ls -lhrt
total 0
lrwxrwxrwx 1 root root 12 Oct 11 12:07 token -> ..data/token
lrwxrwxrwx 1 root root 16 Oct 11 12:07 namespace -> ..data/namespace
lrwxrwxrwx 1 root root 13 Oct 11 12:07 ca.crt -> ..data/ca.crt
Run Code Online (Sandbox Code Playgroud)
这似乎是一个安全威胁(或漏洞)。有人可以让我知道是否有办法从 pod 中删除此依赖项,以便我可以限制用户(甚至是 root 用户)在登录 pod 时访问此机密?另外,如果这是可能的,那么 pod 将如何与 API 服务器通信?
kubernetes kubernetes-security kubernetes-pod kubernetes-secrets k3s
在一个简单的 bash 脚本中,我想运行多个kubectl
和helm
命令,例如:
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.5.4 \
--set installCRDs=true
kubectl apply -f deploy/cert-manager/cluster-issuers.yaml
Run Code Online (Sandbox Code Playgroud)
我的问题是,在helm install
命令之后我必须等到 cert-manager pod 运行,然后kubectl apply
才能使用该命令。现在脚本调用它太早了,所以它会失败。
kubernetes-pod ×10
kubernetes ×9
kubectl ×2
bash ×1
containers ×1
devops ×1
docker-image ×1
k3s ×1
log-rotation ×1
logging ×1
port ×1
rpc ×1
self-healing ×1
shell ×1