我正在尝试设置Kubernetes集群,但我无法运行CoreDNS.我运行了以下命令来启动集群:
sudo swapoff -a
sudo sysctl net.bridge.bridge-nf-call-iptables=1
sudo kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s- version=$(kubectl version | base64 | tr -d '\n')"
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
Run Code Online (Sandbox Code Playgroud)
为了检查POD kubectl get pods --all-namespaces,我明白了
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-68fb79bcf6-6s5bp 0/1 CrashLoopBackOff 6 10m
kube-system coredns-68fb79bcf6-hckxq 0/1 CrashLoopBackOff 6 10m
kube-system etcd-myserver 1/1 Running 0 79m
kube-system kube-apiserver-myserver 1/1 Running 0 79m
kube-system kube-controller-manager-myserver 1/1 Running …Run Code Online (Sandbox Code Playgroud) 我有一个正在运行的 k8s 集群,其中包含两个 CoreDNS 副本。但是当我尝试输入 POD 的 bash 提示符时,它向我抛出以下错误
# kubectl exec -it coredns-5644d7b6d9-285bj -n kube-system sh
error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "94f45da89fa5493a8283888464623788ef5e832dc31e0d89e427e71d86391fd6": OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
Run Code Online (Sandbox Code Playgroud)
但我可以毫无问题地登录其他 Pod。我尝试使用 nsenter 和内核进程 ID 它可以工作,但它只适用于与网络相关的开放,例如,
# nsenter -t 24931 -n ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default …Run Code Online (Sandbox Code Playgroud) 我已经按照许多在线教程在四个 Raspberry Pi 4 上设置了 Kubernetes 集群。我最终使用 Flannel 作为网络插件,因为它似乎是唯一一个真正适用于 RPi 的插件,根据2017 年的本指南,pod 网络 CIDR 为 10.244.0.0/16 。几乎一切正常……kube-system 命名空间中的所有基本 pod 都在运行/健康,我可以拉下图像并启动新容器。起初我无法获得任何 pod 日志,但是通过在每个节点上打开端口 10250 很快就解决了这个问题。
但是DNS解析好像还是有问题。我应该澄清一下,主机上的 DNS 解析显然有效,因为集群能够下载我指定的任何容器映像。但是一旦容器运行,它就无法“拨出”任何东西。作为测试,我arm32v7/buildpack-deps:latest在 pod 中运行容器。它可以很好地从 Docker 集线器中提取图像。但是当我进入它并简单地输入curl https://www.google.com它时,它会在最终超时之前挂起。我启动的任何需要与外部 Internet 交互的 Pod 也是如此:它们挂起、挂起、挂起。
以下是我已经在每个节点上运行的所有与网络相关的命令:
sudo iptables -P FORWARD ACCEPT
sudo iptables -A FORWARD -i cni0 -j ACCEPT
sudo iptables -A FORWARD -o cni0 -j ACCEPT
sudo ufw allow ssh
sudo ufw allow 443 # can't remember why i ran this one …Run Code Online (Sandbox Code Playgroud) 我有一个由虚拟机组成的自制 Kubernetes 集群。我的问题是,coredns pod 总是处于 CrashLoopBackOff 状态,过了一段时间它们又回到运行状态,因为什么也没发生。我发现但无法尝试的一个解决方案是将默认内存限制从 170Mi 更改为某些内容更高。由于我不是这方面的专家,我认为这不是一件难事,但我不知道如何更改正在运行的 pod 的配置。这可能是不可能的,但必须有一种方法可以使用新配置重新创建它们。我尝试了 kubectl 补丁,也查找了滚动更新,但我就是想不通。如何更改限制?
这是 pod 数据的相关部分:
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/podIP: 176.16.0.12/32
creationTimestamp: 2018-11-18T10:29:53Z
generateName: coredns-78fcdf6894-
labels:
k8s-app: kube-dns
pod-template-hash: "3497892450"
name: coredns-78fcdf6894-gnlqw
namespace: kube-system
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: coredns-78fcdf6894
uid: e3349719-eb1c-11e8-9000-080027bbdf83
resourceVersion: "73564"
selfLink: /api/v1/namespaces/kube-system/pods/coredns-78fcdf6894-gnlqw
uid: e34930db-eb1c-11e8-9000-080027bbdf83
spec:
containers:
- args:
- -conf
- /etc/coredns/Corefile
image: k8s.gcr.io/coredns:1.1.3
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: …Run Code Online (Sandbox Code Playgroud) Kubernetes附带一个ConfigMap名为coredns可以让你指定的DNS设置。我想通过添加以下内容来修改或修补此配置的一小部分:
apiVersion: v1
kind: ConfigMap
data:
upstreamNameservers: |
["1.1.1.1", "1.0.0.1"]
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用kubectrl edit来编辑coredns ConfigMap上面的文件,该文件仅包含我要插入或更新的设置,并且可以将其合并到现有文件之上或在现有文件上打补丁ConfigMap吗?
原因是我希望使用CI / CD可重复进行部署。因此,即使我在全新的Kubernetes集群上运行了Helm图表,也将应用上面的设置。
如何在 kubernetes 集群上刷新 CoreDNS 缓存?
我知道可以通过删除 CoreDNS pod 来完成,但是是否有适当的方法来刷新缓存?
我们有一个由 kops 管理的 1 个主节点和 3 个节点的 Kubernetes 集群,用于我们的应用程序部署。我们有最少的 pod 到 pod 连接,但喜欢 Kubernetes 中的自动缩放功能。过去几个月我们一直在使用它,但最近开始出现问题,即我们的 pod 随机无法连接到我们的 redis 或数据库,并出现如下错误:
Set state pending error: dial tcp: lookup redis.id.0001.use1.cache.amazonaws.com on 100.64.0.10:53: read udp 100.126.88.186:35730->100.64.0.10:53: i/o timeout
Run Code Online (Sandbox Code Playgroud)
或者
OperationalError: (psycopg2.OperationalError) could not translate host name “postgres.id.us-east-1.rds.amazonaws.com” to address: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这只会在某些时候发生,然后当重新创建一个 pod 时,它会再次工作,不久之后它就会被绊倒。
我们尝试遵循 Kube 的所有 kube-dns 调试说明但无济于事,尝试了无数解决方案,例如更改 ndots 配置,甚至尝试迁移到 CoreDNS,但仍然存在完全相同的间歇性问题。我们使用 Calico 进行网络连接,但很难说它是否发生在网络级别,因为我们没有看到任何其他服务的问题。
有没有人知道在哪里可以找到可能导致这种行为的原因,或者如果您在自己之前经历过这种行为,请分享您是如何解决它的?
谢谢
CoreDNS 的 pods 看起来不错
? kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
... …Run Code Online (Sandbox Code Playgroud) 我有 Spring Boot 应用程序,application.property我们在其中指定了以下属性。kafka 安装在带有自签名证书的远程机器上(在 kubernete 集群之外)。
camel.component.kafka.configuration.brokers=kafka-worker1.abc.com:9092,kafka-worker2.abc.com:9092,kafka-worker3.abc.com:9092
Run Code Online (Sandbox Code Playgroud)
在应用程序启动时,它会尝试寻找 kafka 代理。现在,如果我将主机别名添加到部署中,它将像下面一样正常工作
hostAliases:
- ip: 10.76.XX.XX
hostnames:
- kafka-worker1.abc.com
- ip: 10.76.XX.XX
hostnames:
- kafka-worker2.abc.com
- ip: 10.76.XX.XX
hostnames:
- kafka-worker3.abc.com
Run Code Online (Sandbox Code Playgroud)
它会正常工作,但我不希望这是拥有主机别名的不好做法,如果 IP 更改,我们可能需要重新启动 pod。我们希望主机名解析发生在 coredns 上,或者在不将 ip 添加到 pod 的主机文件的情况下进行解析。
如何实现这一目标。遵循此无法从 kubernetes pod服务端点内部连接到外部数据库,如下所示为 kafka-worker2 和 kafka-worker3 使用各自的 IP 创建
kind: Service
apiVersion: v1
metadata:
name: kafka-worker1
spec:
clusterIP: None
ports:
- port: 9092
targetPort: 9092
externalIPs:
- 10.76.XX.XX
Run Code Online (Sandbox Code Playgroud)
并将其添加到属性文件中
camel.component.kafka.configuration.brokers=kafka-worker1.default:9092,kafka-worker2.default:9092,kafka-worker3.default:9092
Run Code Online (Sandbox Code Playgroud)
仍然收到同样的警告
2020-05-13T11:57:12.004+0000 Etc/UTC docker-desktop …Run Code Online (Sandbox Code Playgroud) 我试图让我的 kubernetes 集群从内部运行的容器注册表服务中拉取。我有 kube dns 设置,我有一个注册表部署和服务正在运行。我可以通过节点上的主机命令解析服务内部名称。我已经--dns使用 kube dns 服务的地址向 docker 守护进程添加了标志。我的 kubelet 运行时也将--cluster-dns标志设置为相同的地址。然而,不知何故,这就是我尝试使用此注册表创建 pod 时得到的结果。
Failed to pull image "kube-registry.kube-system.svc.cluster.local/myuser/myimage": rpc error: code = Unknown desc = Error response from daemon: Get https://kube-registry.kube-system.svc.cluster.local/v1/_ping: dial tcp: lookup kube-registry.kube-system.svc.cluster.local: no such host
不知何故,即使 kube dns 地址明确提供给 dockerd 和 kubelet,由于名称解析,从注册表服务中提取图像也会失败。我错过了什么?
我设置了一个 Kubernetes 集群,其中包含 1 个主节点 (kube-master) 和 2 个从节点(kube-node-01 和 kube-node-02)
一切都运行良好......现在在 debianstretch->buster 升级之后,我的 coredns podCrashLoopBackOff由于某种原因失败了。
我做了一个kubectl describe,错误是Readiness probe failed: HTTP probe failed with statuscode: 503
Readiness url 对我来说看起来很可疑http-get http://:8080/health delay=0s timeout=1s period=10s #success=1 #failure=3......没有主机名!?那是对的吗?
该Liveness属性也没有主机名。
所有虚拟机均可相互 ping 通。
有任何想法吗?
coredns ×10
kubernetes ×10
kube-dns ×4
docker ×3
apache-kafka ×1
configmap ×1
core-file ×1
dns ×1
networking ×1
patch ×1
ubuntu-16.04 ×1
ufw ×1