我在 GKE 上创建了一个私有集群,并与该集群一起配置了 NAT。我还有一个堡垒设置来访问私有集群。我正在尝试通过 SSH 连接到其中一个节点,但无法执行此操作,因为私有节点没有外部 IP。有什么办法可以做到这一点吗?
我正在尝试在 v1.18 GKE kubernetes 集群上部署 pod
我的 Pod 循环崩溃,因为它无法挂载其配置映射:
$ kubectl describe pod <pod>
...
Volumes:
cm-cxf-conf:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: project-cm-cxf-conf
Optional: false
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedMount 41m kubelet MountVolume.SetUp failed for volume "cm-cxf-conf" : failed to sync configmap cache: timed out waiting for the condition
...
Run Code Online (Sandbox Code Playgroud)
但是,配置映射确实存在:
$ kubectl get configmap project-cm-cxf-conf
project-cm-cxf-conf 1 4h40m
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因可能是什么?我该如何修复它?
我曾尝试在我的裸机服务器上使用 kubeadm 构建 kubernetes,并将 containerd 作为 cri,但安装 cni (weave-net) 后似乎 coredns 无法启动。
两个 coredns 容器现在处于“CrashLoopBackOff”状态,它们的日志为:
plugin/forward: no nameservers found
Run Code Online (Sandbox Code Playgroud)
而“kubectl描述pod”的描述如下:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 4m52s (x9 over 13m) default-scheduler 0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate.
Normal Scheduled 4m7s default-scheduler Successfully assigned kube-system/coredns-58cf647449-8pq7k to k8s
Normal Pulled 3m13s (x4 over 4m6s) kubelet Container image "localhost:5000/coredns:v1.8.4" already present on machine
Normal Created 3m13s (x4 …Run Code Online (Sandbox Code Playgroud) 在 AKS 中创建集群时,默认情况下会创建 2 个资源组。其中一个前缀为MC_,根据文档,“称为节点资源组,包含与集群关联的所有基础设施资源。这些资源包括 Kubernetes 节点虚拟机、虚拟网络和存储。默认情况下,节点资源组的名称类似于 MC_myResourceGroup_myAKSCluster_eastus "。
有谁知道MC前缀是否代表什么,或者只是 2 个随机字母?
我正在测试 k8s 调试功能,包括调试 pod 和临时容器,但我无法弄清楚如何将“目标”pod 的文件系统正确映射到调试容器中。
我想使用递归绑定挂载 * 链接两个不相交的挂载命名空间,以便容器 A 将容器 B 的根视为容器 B 的根,/containerB反之亦然。包括所有卷和其他安装。
目标是让目标 pod 的完整文件系统树,包括映射到调试容器的子目录(例如 )的卷和其他挂载/run/target。如果目标容器挂载持久卷,则应映射这些挂载点,因此,例如,如果目标容器具有,/data则调试容器应具有已安装的/run/target/data.
或者,可以将调试容器文件系统树“注入”到目标容器中,因此可以在调试容器/run/debug时公开可用的调试容器根。nsenter包括它的像 procfs 这样的挂载,所以它的功能齐全。
我希望能够例如调试容器提供的gdb -p $target_pid位置。为此,必须能够从目标容器中找到进程可执行文件。gdbgdb
我探索了一些解决方法。但我真正想做的是将mount --rbind目标容器 FS 树转移到来宾上,反之亦然。给定一个定制的特权调试容器,例如:
apiVersion: v1
kind: Pod
metadata:
name: debugcontainer
namespace: default
spec:
nodeName: TARGET_NODE_NAME_HERE
enableServiceLinks: true
hostIPC: true
hostNetwork: true
hostPID: true
restartPolicy: Never
containers: …Run Code Online (Sandbox Code Playgroud) 升级到 v1.24.0 后(删除 Dockershim 后),我必须安装cri-dockerd,然后我执行了以下操作:
\nsudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.0.196\nRun Code Online (Sandbox Code Playgroud)\n我选择flannel作为网络插件:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml\nRun Code Online (Sandbox Code Playgroud)\n到目前为止,一切都按预期进行,但在主节点上启用调度、加入工作节点并部署我的 Pod 和服务后,我注意到一个奇怪的网络问题,即NodePort和ClusterIP服务在节点之间无法工作(使用一个节点时没有问题) 。
\n后来我发现 pod 是从docker 网络( 172.17.0.*) 获取 IP 地址,而不是从--pod-network-cidr=10.244.0.0/16:
masterzulu@master-zulu:~$ kubectl get pods --all-namespaces -o wide\nNAMESPACE NAME READY STATUS RESTARTS AGE IP NODE \n\ndjango-space django-588cb669d4-46b4w 1/1 Running 0 3m35s 172.17.0.4 master-zulu\ndjango-space postgres-deployment-b58d5ff94-hs7t4 1/1 Running 0 3m35s 172.17.0.5 master-zulu\nkube-system coredns-6d4b75cb6d-8gw6c 1/1 Running 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个本地 Kubernetes 集群。首先,我使用 kubeadm 在一个节点上初始化我的控制平面。但所有 kube 系统 pod 都会不断崩溃。我通过 crictl 深入研究了 pod 日志,结果发现大多数 pod 崩溃是因为它们无法到达 上的 kube-apiserver <node IP>:6443。并且 kube-apiserver 似乎崩溃了,因为它无法到达 上的 etcd 127.0.0.1: 2379。etcd 会“崩溃”,因为几分钟后它会在没有任何明显原因的情况下收到 sigterm。在 etcd 容器进程上使用 strace 可以得到:
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=0, si_uid=0} ---
Run Code Online (Sandbox Code Playgroud)
我尝试过 flanneld、calico 和 weave net 作为 CNI,但没有成功。交换从一开始就被禁用了。防火墙没有任何自定义规则。作为一名 kubernetes 新手,我想不出其他可能的失败原因,如果有任何提示,我将不胜感激。
系统信息:
我在尝试跟踪 Kubernetes Pod 的日志时收到此错误。
failed to create fsnotify watcher: too many open files
在我的 Kubernetes 集群中,我想将 nginx 负载均衡器绑定到节点的外部 IP。但是,外部 IP 始终显示为“待处理”。
集群在两个使用 weave 的根服务器上运行。
我能做些什么来解决这个问题吗?使用“externalIPs”数组是有效的,但不是我想要的,因为 IP 不是由 Kubernetes 管理的。
我通过了以下内容,它对从appsettings.json文件中创建 kubernetes 机密进行了试运行,然后将其通过管道传输到 kubernetes apply。我认为-f将采用--dry-run创建的秘密的文件名并在应用秘密时使用它,但我想知道尾随-是否有任何意义,或者它只是一个错字?
kubectl create secret generic test --from-file=appsettings.json --dry-run -oyaml | kubectl apply -f -
kubernetes ×10
kubeadm ×3
linux ×2
linux-kernel ×2
networking ×2
containerd ×1
docker ×1
etcd ×1
flags ×1
ingress ×1
kubectl ×1
mount ×1
namespaces ×1
nginx ×1
options ×1
ssh ×1