Kubernetes Calico 노드 'XXXXXXXXXX'이(가) 이미 IPv4 주소 XXXXXXX를 사용하고 있습니다. 충돌 루프백오프
AWS Kubernetes Quickstart를 사용하여 VPC와 개인 서브넷에 Kubernetes 클러스터를 만들었습니다. 한동안은 잘 돌아가고 있었다. 내 쿠버네티스 클러스터에 칼리코를 설치했어. 나는 두 개의 노드와 마스터가 있다. 마스터의 칼리코 포드는 정상적으로 실행되고 노드의 칼리코 포드는 crashloopbackoff 상태입니다:
NAME READY STATUS RESTARTS AGE
calico-etcd-ztwjj 1/1 Running 1 55d
calico-kube-controllers-685755779f-ftm92 1/1 Running 2 55d
calico-node-gkjgl 1/2 CrashLoopBackOff 270 22h
calico-node-jxkvx 2/2 Running 4 55d
calico-node-mxhc5 1/2 CrashLoopBackOff 9 25m
충돌한 포드 중 하나 설명:
ubuntu@ip-10-0-1-133:~$ kubectl describe pod calico-node-gkjgl -n kube-system
Name: calico-node-gkjgl
Namespace: kube-system
Node: ip-10-0-0-237.us-east-2.compute.internal/10.0.0.237
Start Time: Mon, 17 Sep 2018 16:56:41 +0000
Labels: controller-revision-hash=185957727
k8s-app=calico-node
pod-template-generation=1
Annotations: scheduler.alpha.kubernetes.io/critical-pod=
Status: Running
IP: 10.0.0.237
Controlled By: DaemonSet/calico-node
Containers:
calico-node:
Container ID: docker://d89979ba963c33470139fd2093a5427b13c6d44f4c6bb546c9acdb1a63cd4f28
Image: quay.io/calico/node:v3.1.1
Image ID: docker-pullable://quay.io/calico/node@sha256:19fdccdd4a90c4eb0301b280b50389a56e737e2349828d06c7ab397311638d29
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Tue, 18 Sep 2018 15:14:44 +0000
Finished: Tue, 18 Sep 2018 15:14:44 +0000
Ready: False
Restart Count: 270
Requests:
cpu: 250m
Liveness: http-get http://:9099/liveness delay=10s timeout=1s period=10s #success=1 #failure=6
Readiness: http-get http://:9099/readiness delay=0s timeout=1s period=10s #success=1 #failure=3
Environment:
ETCD_ENDPOINTS: <set to the key 'etcd_endpoints' of config map 'calico-config'> Optional: false
CALICO_NETWORKING_BACKEND: <set to the key 'calico_backend' of config map 'calico-config'> Optional: false
CLUSTER_TYPE: kubeadm,bgp
CALICO_DISABLE_FILE_LOGGING: true
CALICO_K8S_NODE_REF: (v1:spec.nodeName)
FELIX_DEFAULTENDPOINTTOHOSTACTION: ACCEPT
CALICO_IPV4POOL_CIDR: 192.168.0.0/16
CALICO_IPV4POOL_IPIP: Always
FELIX_IPV6SUPPORT: false
FELIX_IPINIPMTU: 1440
FELIX_LOGSEVERITYSCREEN: info
IP: autodetect
FELIX_HEALTHENABLED: true
Mounts:
/lib/modules from lib-modules (ro)
/var/lib/calico from var-lib-calico (rw)
/var/run/calico from var-run-calico (rw)
/var/run/secrets/kubernetes.io/serviceaccount from calico-cni-plugin-token-b7sfl (ro)
install-cni:
Container ID: docker://b37e0ec7eba690473a4999a31d9f766f7adfa65f800a7b2dc8e23ead7520252d
Image: quay.io/calico/cni:v3.1.1
Image ID: docker-pullable://quay.io/calico/cni@sha256:dc345458d136ad9b4d01864705895e26692d2356de5c96197abff0030bf033eb
Port: <none>
Host Port: <none>
Command:
/install-cni.sh
State: Running
Started: Mon, 17 Sep 2018 17:11:52 +0000
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Mon, 17 Sep 2018 16:56:43 +0000
Finished: Mon, 17 Sep 2018 17:10:53 +0000
Ready: True
Restart Count: 1
Environment:
CNI_CONF_NAME: 10-calico.conflist
ETCD_ENDPOINTS: <set to the key 'etcd_endpoints' of config map 'calico-config'> Optional: false
CNI_NETWORK_CONFIG: <set to the key 'cni_network_config' of config map 'calico-config'> Optional: false
Mounts:
/host/etc/cni/net.d from cni-net-dir (rw)
/host/opt/cni/bin from cni-bin-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from calico-cni-plugin-token-b7sfl (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
lib-modules:
Type: HostPath (bare host directory volume)
Path: /lib/modules
HostPathType:
var-run-calico:
Type: HostPath (bare host directory volume)
Path: /var/run/calico
HostPathType:
var-lib-calico:
Type: HostPath (bare host directory volume)
Path: /var/lib/calico
HostPathType:
cni-bin-dir:
Type: HostPath (bare host directory volume)
Path: /opt/cni/bin
HostPathType:
cni-net-dir:
Type: HostPath (bare host directory volume)
Path: /etc/cni/net.d
HostPathType:
calico-cni-plugin-token-b7sfl:
Type: Secret (a volume populated by a Secret)
SecretName: calico-cni-plugin-token-b7sfl
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: :NoSchedule
:NoExecute
:NoSchedule
:NoExecute
CriticalAddonsOnly
node.kubernetes.io/disk-pressure:NoSchedule
node.kubernetes.io/memory-pressure:NoSchedule
node.kubernetes.io/not-ready:NoExecute
node.kubernetes.io/unreachable:NoExecute
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning BackOff 4m (x6072 over 22h) kubelet, ip-10-0-0-237.us-east-2.compute.internal Back-off restarting failed container
동일한 포드에 대한 로그:
ubuntu@ip-10-0-1-133:~$ kubectl logs calico-node-gkjgl -n kube-system -c calico-node
2018-09-18 15:14:44.605 [INFO][8] startup.go 251: Early log level set to info
2018-09-18 15:14:44.605 [INFO][8] startup.go 269: Using stored node name from /var/lib/calico/nodename
2018-09-18 15:14:44.605 [INFO][8] startup.go 279: Determined node name: ip-10-0-0-237.us-east-2.compute.internal
2018-09-18 15:14:44.609 [INFO][8] startup.go 101: Skipping datastore connection test
2018-09-18 15:14:44.610 [INFO][8] startup.go 352: Building new node resource Name="ip-10-0-0-237.us-east-2.compute.internal"
2018-09-18 15:14:44.610 [INFO][8] startup.go 367: Initialize BGP data
2018-09-18 15:14:44.614 [INFO][8] startup.go 564: Using autodetected IPv4 address on interface ens3: 10.0.0.237/19
2018-09-18 15:14:44.614 [INFO][8] startup.go 432: Node IPv4 changed, will check for conflicts
2018-09-18 15:14:44.618 [WARNING][8] startup.go 861: Calico node 'ip-10-0-0-237' is already using the IPv4 address 10.0.0.237.
2018-09-18 15:14:44.618 [WARNING][8] startup.go 1058: Terminating
Calico node failed to start
따라서 노드 IP 주소를 찾는 데 충돌이 있거나 Calico는 IP가 이미 다른 노드에 할당되어 있다고 생각하는 것 같습니다. 빠른 검색을 통해 이 스레드를 찾았습니다. IP_AUTODETECTION_MODE를 can-reach=DESTINATION으로 설정하여 이 문제를 해결해야 한다는 것을 알았습니다. 이 경우 "can-reach=10.0.237"이 될 것으로 예상합니다. 이 구성은 calico/node 컨테이너에 설정된 환경 변수입니다. 나는 컨테이너 자체에 포격을 시도해 왔지만, 쿠벡틀은 컨테이너를 찾을 수 없다고 말했다:
ubuntu@ip-10-0-1-133:~$ kubectl exec calico-node-gkjgl --stdin --tty /bin/sh -c calico-node -n kube-system
error: unable to upgrade connection: container not found ("calico-node")
칼리코가 IP를 할당할 수 없어서 그런 것 같아요. 그래서 호스트에 로그온하고 도커를 사용하여 컨테이너에서 셸링을 시도했습니다:
root@ip-10-0-0-237:~# docker exec -it k8s_POD_calico-node-gkjgl_kube-system_a6998e98-ba9a-11e8-a9fa-0a97f5a48ef4_1 /bin/bash
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory"
그래서 나는 컨테이너에 실행할 셸이 없다고 생각한다. 왜 쿠버네티스가 그걸 실행하지 못했는지 이해가 되네요. 외부에서 명령을 실행하여 환경 변수를 나열하려고 했지만 찾을 수 없었습니다. 그러나 다음 명령을 잘못 실행했을 수 있습니다:
root@ip-10-0-0-237:~# docker inspect -f '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' k8s_POD_calico-node-gkjgl_kube-system_a6998e98-ba9a-11e8-a9fa-0a97f5a48ef4_1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@ip-10-0-0-237:~# docker exec -it k8s_POD_calico-node-gkjgl_kube-system_a6998e98-ba9a-11e8-a9fa-0a97f5a48ef4_1 printenv IP_AUTODETECTION_METHOD
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"printenv\": executable file not found in $PATH"
root@ip-10-0-0-237:~# docker exec -it k8s_POD_calico-node-gkjgl_kube-system_a6998e98-ba9a-11e8-a9fa-0a97f5a48ef4_1 /bin/env
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/env\": stat /bin/env: no such file or directory"
좋아요, 그럼 제가 잘못된 방향으로 가고 있는 것 같아요. Kubernetes를 사용하여 Calico 구성 파일을 변경하고 다시 배포해야 합니까? 시스템 어디에서 찾을 수 있습니까? 나는 환경 변수를 어디에 설정해야 할지 찾지 못했다.
를 보면 이미 로 기본값이 설정되어 있습니다.
내 생각에 무언가 또는 IP 주소가 이전 calico의 'run'에 의해 공개되지 않거나 calico 버전의 버그일 것이다.
시도:
크래시백오프 루프에 있는 Calico 포드를 삭제합니다
kubectl -n kube-system delete calico-node-gkjgl calico-node-mxhc5
포드가 다시 생성되고 초기화됩니다.
Calico를 최신 버전으로 업그레이드하십시오. 다음을 따르십시오. 헵티오의 Calico 설치에서 etcd 데이터스토어를 사용하고 있는 것 같습니다.
Heptio의 AWS AMI가 어떻게 작동하는지 이해하고 문제가 있는지 확인하십시오. 이 작업은 시간이 걸릴 수 있으므로 지원팀에 문의할 수도 있습니다.
다른 방법으로 Calico를 사용하여 Kubernetes를 설치해 보십시오. 잘 문서화되어 있음
나에게 효과가 있었던 것은 노드에 남아있는 도커 네트워크를 제거하는 것이었다. 각 노드의 현재 네트워크를 나열한 다음 필요 없는 네트워크를 제거해야 했습니다. . 그렇게 한 후 calico 배포 포드가 정상적으로 실행되었습니다
나는 문제를 디버깅하고 해결한 후에 문제의 원인을 알아냈습니다. Kubernetes 외에도 클러스터에서 실행 중인 다른 서비스(예: 를 사용)가 있었습니다. 이로 인해 클러스터의 네트워크에 문제가 발생했습니다.
명령에 따라 도커에는 다음과 같은 네트워크가 있습니다:
NETWORK ID NAME DRIVER SCOPE
39c36916cc71 bridge bridge local
b90b28ce31ec docker_default bridge local
f045c30c679f host host local
36aa4115b540 none null local
생성한 컨테이너를 제거한 다음 명령을 실행합니다. 내 경우 네트워크를 삭제하거나 제거할 네트워크를 알고 있으면 명령을 실행하여 제거할 수 있습니다
'개발하자' 카테고리의 다른 글
/.pub-cache의 플러터 종속성 업데이트 (0) | 2023.05.24 |
---|---|
내 kubernetes 클러스터 IP 주소가 변경되어 kubectl이 더 이상 연결되지 않습니다 (1) | 2023.05.23 |
python2의 멀티스레딩과 python3의 멀티스레딩 (1) | 2023.05.22 |
Python Logging with loguru- log request params on Fastapi app (1) | 2023.05.22 |
Flooth에서 바이트 배열을 이미지로 변환하시겠습니까? (0) | 2023.05.21 |