我们有一个 4 节点 Kubernetes 集群,使用 Juju 2.0 和官方规范的 Kubernetes 魅力安装。这个非常本地和私人安装的唯一目的是开发和测试。
此安装最大的和记录在案的问题之一是完全缺乏优雅的服务器关闭程序。只有当etcd节点出现故障时,整个配置才会丢失。
我们花了大量时间为 Kubernetes 寻找自动备份/恢复脚本/程序。我们遇到的问题最常见的答案是在我们启动它时使用 Juju 从头开始部署服务器。给予 30-35 分钟。部署时间 它似乎不是一个有吸引力的解决方案?
你碰巧对这个问题有任何可行的解决方案吗?
有没有办法Alias IP在现有的 GKE 集群上启用(禁用Alias IP)?
(除了使用https://github.com/bowei/k8s-custom-iptables在每个节点上创建 NAT)
我的入口目前看起来像这样:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- example.org
- app.example.org
secretName: prod-tls
rules:
- host: example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
- host: app.example.org
http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
但现在我想重定向app.example.org到example.org。我怎样才能做到这一点?
我发现这个示例使用ingress.kubernetes.io/configuration-snippet但我不知道它将适用于哪些域?
我正在使用头盔nginx-ingress-1.37.0;应用程序版本 0.32.0。
将 AKS kubernetes 集群从 v1.23.8 升级到 v1.24.3 后,我们的入口停止正常工作。事件中没有记录任何错误,并且 ingress-nginx pod 不会在控制台上报告任何错误。从集群内部看来一切都很好,但公共 IP 的所有端口在外部都是关闭的。
即使从集群内部卷曲在集群中运行的 Web 应用程序也可以正常工作。看来只是对外开放的端口坏了。Ingress-nginx 通过 helm release (HR v4.2.5) 进行部署。
我有一种感觉,一定是入口或控制器的某些配置需要更改。
更新:我们重新安装了一个普通的 AKS 集群,并helm install quickstart ingress-nginx/ingress-nginx在 1.23.8(有效)、1.24.0(无效)和 1.24.3(也无效)中进行了安装。
有什么想法或指示吗?
尝试在 Amazon EKS 上设置 HorizontalPodAutoscaler 时,TARGETS 列始终显示<unknown>/50%,在描述 HPA 时,我看到
警告 FailedGetResourceMetric 17s(x50 over 1h)horizontal-pod-autoscaler 无法获取资源 cpu 的指标:无法从资源指标 API 获取指标:服务器找不到请求的资源(获取 pods.metrics.k8s.io)
我在其他网站上发现了多篇关于提到--horizontal-pod-autoscaler-use-rest-clients在 kube-controller-manager 上使用的类似问题的帖子,但我找不到更改 EKS 集群的 kube-controller-manager 设置的方法,因为看起来你不能SSH 到主节点进行管理和 kube-controller-manager 不会被列为系统中任何地方的资源。
我尝试按照https://github.com/kubernetes-incubator/metrics-server 上的说明手动设置指标服务器,但在这种情况下,我发现 EKS 没有提供验证 API 所需的配置映射扩展Could not create the API server: configmaps "extension-apiserver-authentication" not found
我正在尝试实现一个入口 helm 模板,将当前应用程序版本编码到 url 中。这将允许用户通过向他们提供不同版本的应用程序来进行软迁移。
例子:
mydomain.org/1.0/applicationpath
mydomain.org/1.1/applicationpath
mydomain.org/2.0/applicationpath
Run Code Online (Sandbox Code Playgroud)
为了防止在每次更新的入口中手动配置它,我更喜欢使用正则表达式自动确定 major.minor 版本。该应用程序根据 Semver 2.0.0 进行了修订,因此应该使用像 \d+.\d+ 这样的模式。
我试过这样的事情:
apiVersion: extensions/v1beta1
kind: Ingress
spec:
backend:
serviceName: {{ .Release.Name }}-my-srv
servicePort: 80
rules:
- host: {{ .Values.app.ingress.host }}
http:
paths:
- path: /{{ .Chart.AppVersion | regex \d+.\d+ }}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我找不到正则表达式的函数。是否可以选择使用 helm 模板来实现这一点?
如何使用 列出 Kubernetes 集群中的所有容器kubectl?
当前的文档没有提到像“容器”资源这样的东西。
kubectl get pod -o json
Run Code Online (Sandbox Code Playgroud)
列出所有包含容器描述的 pod。但是有可能将容器列为一等公民吗?
我家里有一个 4 节点集群设置,我正在使用它,当我开始尝试进行 Pod 到 Pod 通信时遇到了问题。我使用 Kubespray 安装节点(1 个“服务器/控制器”和 3 个“节点”)。
问题是我无法按名称解析服务,只能按 IP 解析。例如,我使用 Helm 在默认命名空间中使用服务名称“jenkins”启动 Jeknins,但如果我尝试 ping “jenkins”或“jenkins.default”,则无法解析。在 dnsutils pod 中执行dig jenkins或会产生:dig jenkins.default
/ # dig jenkins.default
; <<>> DiG 9.11.6-P1 <<>> jenkins.default
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 8927
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; …Run Code Online (Sandbox Code Playgroud) 我想为 OOMKilled 事件设置检测,在检查 pod 时看起来像这样:
Name: pnovotnak-manhole-123456789-82l2h
Namespace: test
Node: test-cluster-cja8smaK-oQSR/10.x.x.x
Start Time: Fri, 03 Feb 2017 14:34:57 -0800
Labels: pod-template-hash=123456789
run=pnovotnak-manhole
Status: Running
IP: 10.x.x.x
Controllers: ReplicaSet/pnovotnak-manhole-123456789
Containers:
pnovotnak-manhole:
Container ID: docker://...
Image: pnovotnak/it
Image ID: docker://sha256:...
Port:
Limits:
cpu: 2
memory: 3Gi
Requests:
cpu: 200m
memory: 256Mi
State: Running
Started: Fri, 03 Feb 2017 14:41:12 -0800
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Fri, 03 Feb 2017 14:35:08 -0800
Finished: Fri, 03 Feb 2017 14:41:11 -0800 …Run Code Online (Sandbox Code Playgroud) Kubernetes 正在弃用 Docker 作为 CRI 引擎。现在有containerd和CRI-O,可以作为它的替代品。两者都可以通过 cri-tools 中的 crictl 进行管理。
我需要一些通用的方法来查找正在运行的容器的 PID。
实际上我需要一个相当于 docker 命令的crictl :
# docker inspect 86cd8d605c2da -f '{{ .State.Pid }}'
9625
Run Code Online (Sandbox Code Playgroud)