Điểm:2

archlinux: kubernetes - coredns không hoạt động bình thường

lá cờ in

Tôi đã cài đặt kubernetes v1.23.0 với Arch Linux dưới dạng phân phối. Cụm bao gồm một chủ và một nút. Hệ thống gian hàng là máy ảo dựa trên KVM.

Khi một nhóm muốn thực hiện một truy vấn DNS, nó sẽ hết thời gian chờ khi dịch vụ chuyển tiếp các yêu cầu đến một phiên bản nhóm của coredns đang chạy trên một nút kubernetes khác.

Vì vậy, tôi nghi ngờ rằng nhà cung cấp mạng không hoạt động bình thường hoặc một số cài đặt (mô-đun kernel, sysctl, v.v.) không được đặt, bởi vì khi yêu cầu được chuyển tiếp đến phiên bản nhóm coredns đang chạy cục bộ, máy khách sẽ nhận được phản hồi. Đây là các bước gỡ lỗi của tôi:

  1. Trước khi tôi bắt đầu gỡ lỗi, tôi đã tăng loglevel của coredns bằng cách thêm đăng nhập vào sơ đồ cấu hình của coredns.
# kubectl get -n kube-system configmaps coredns -o yaml
phiên bản api: v1
dữ liệu:
  Tập tin lõi: |
    .:53 {
        đăng nhập
        lỗi
        Sức khỏe {
           lameduck 5s
        }
        Sẵn sàng
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           nhóm không an toàn
           dự phòng trong-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        phía trước . /etc/resolv.conf {
           max_concurrent 1000
        }
        bộ đệm 30
        vòng
        tải lại
        cân bằng tải
    }
  1. Tôi đã triển khai làm môi trường gỡ lỗi bộ chứa mạng của mình bằng các công cụ mạng như đào, nslookup v.v. để kiểm tra các phiên bản coredns khác nhau.
áp dụng kubectl -f https://raw.githubusercontent.com/volker-raschek/network-tools/master/network-tools.yml
  1. Các nhóm và dịch vụ coredns sau đây khả dụng:
kubectl get pod,service -n kube-system -l k8s-app=kube-dns -o wide
TÊN TRẠNG THÁI SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI IP NÚT NÚT ĐƯỢC ĐỀ CỬ CỔNG SẴN SÀNG
pod/coredns-64897985d-cgxmv 1/1 Chạy 0 24h 10.85.0.4 archlinux-x86-64-000 <none> <none>
pod/coredns-64897985d-l9ftl 1/1 Chạy 0 24h 10.85.0.3 archlinux-x86-64-001 <none> <none>

TÊN LOẠI CLUSTER-IP (CỔNG IP NGOẠI THẤT) BỘ CHỌN TUỔI
dịch vụ/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 24h k8s-app=kube-dns
  1. Thực thi shell trong nhóm mạng của tôi và cố gắng truy vấn địa chỉ IP của google.com thông qua lõi dịch vụ. Làm thế nào để nhận ra lệnh mất nhiều thời gian khác nhau. Thật không may, tôi không thể tái tạo lỗi hết thời gian chờ thông qua dịch vụ:
# kubectl exec network-tools -- time dig A google.com @10.96.0.10 +short
142.250.185.238
thực 0m 5,02s
người dùng 0 phút 0,02 giây
hệ thống 0m 0,00s
# kubectl exec network-tools -- time dig A google.com @10.96.0.10 +short
142.250.185.238
thực 0m 0,03s
người dùng 0 phút 0,01 giây
hệ thống 0m 0,00s
# kubectl exec network-tools -- time dig A google.com @10.96.0.10 +short
142.250.185.238
thực 0m 10.03s
người dùng 0 phút 0,01 giây
hệ thống 0m 0,01s
  1. Bây giờ tôi giới hạn truy vấn cho các nhóm coredns khác nhau. Lưu ý rằng nhóm coredns-64897985d-cgxmv với địa chỉ IP 10.85.0.4 đang chạy trên một nút khác.

nhóm/coredns-64897985d-l9ftl / 10.85.0.3

kubectl exec network-tools -- time dig A google.com @10.85.0.3 +short
142.251.36.206
thực 0m 0,09s
người dùng 0m 0.00s
hệ thống 0m 0,01s

nhóm/coredns-64897985d-cgxmv / 10.85.0.4

Đây là lỗi hết thời gian khi sử dụng rõ ràng lõi pod của một nút khác.

# kubectl exec network-tools -- time dig A google.com @10.85.0.4 +short

; <<>> DiG 9.16.20 <<>> Google.com @10.85.0.4 +ngắn
;; tùy chọn chung: + cmd
;; kết nối quá hạn; không thể truy cập máy chủ

Đã thoát lệnh với trạng thái khác không 9
thực 0m 15.02s
người dùng 0 phút 0,02 giây
hệ thống 0m 0,00s
lệnh kết thúc bằng mã thoát 9
  1. Các nhật ký sau đây được viết bởi lõi nhóm:

nhóm/coredns-64897985d-l9ftl / 10.85.0.3

# nhật ký kubectl -n kube-system coredns-64897985d-l9ftl 
.:53
[INFO] plugin/tải lại: Chạy cấu hình MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
linux/amd64, go1.17.1, 13a9191
[INFO] Đang tải lại
[INFO] plugin/sức khỏe: Chuyển sang chế độ lameduck trong 5 giây
[INFO] plugin/tải lại: Chạy cấu hình MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] Tải lại hoàn tất
[INFO] 127.0.0.1:54962 - 9983 "HINFO IN 4683476401105705616.5032820535498752139. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0,058383302s
[INFO] 10.85.0.1:24999 - 26748 "A IN google.com. udp 51 false 4096" KHÔNG LỖI qr,rd,ra 1549 0,070006969s
[INFO] 10.85.0.1:6142 - 9467 "A IN google.com. udp 51 false 4096" KHÔNG LỖI qr,aa,rd,ra 1549 0,000959536s
[INFO] 10.85.0.1:2544 - 20425 "A IN google.com. udp 51 false 4096" KHÔNG LỖI qr,aa,rd,ra 1549 0,00065977s
[INFO] 10.85.0.1:26782 - 372 "A IN google.com. udp 51 false 4096" KHÔNG LỖI qr,aa,rd,ra 1549 0,001292768s
[INFO] 10.85.0.1:62687 - 27302 "A IN google.com. udp 51 false 4096" 
...

nhóm/coredns-64897985d-cgxmv / 10.85.0.4

# nhật ký kubectl -n kube-system coredns-64897985d-cgxmv
.:53
[INFO] plugin/tải lại: Chạy cấu hình MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
linux/amd64, go1.17.1, 13a9191
[INFO] Đang tải lại
[INFO] plugin/sức khỏe: Chuyển sang chế độ lameduck trong 5 giây
[INFO] plugin/tải lại: Chạy cấu hình MD5 = 3d3f6363f05ccd60e0f885f0eca6c5ff
[INFO] Tải lại hoàn tất

Để thu hẹp vấn đề, tôi đã cài đặt lại cụm của mình thông qua ansible và cài đặt calico thay vì flannel thông qua lệnh bên dưới. Vấn đề tương tự tồn tại ở đó.

$ helm cài đặt calico projectcalico/tiger-operator --version v3.21.3

tôi đã sử dụng hướng dẫn cài đặt kubeadm để khởi tạo cụm. Tôi đã thực hiện như sau khởi tạo kubeadmin lệnh để khởi tạo cụm:

$ kubeadm init \
  --apiserver-advertise-address=192.168.179.101 \
  --apiserver-cert-extra-sans=api.example.com \
  --control-plane-endpoint=192.168.179.100 \
  --cri-socket=unix:///var/run/crio/crio.sock \
  --pod-network-cidr=10.244.0.0/16 \
  --upload-certs

mô-đun hạt nhân br_netfilter và các thuộc tính sysctl được xác định, nhưng sự cố vẫn tồn tại. Tôi đang ở cuối các phương pháp tiếp cận giải pháp của mình và cần lời khuyên từ các chuyên gia ở đây. Dưới đây là danh sách các mô-đun hạt nhân, cài đặt sysctl và các thông tin khác của tôi.

Tôi hy vọng ai đó có thể giúp tôi.

thông tin hạt nhân

$ uname -a
Linux archlinux-x86-64-000 5.10.90-1-lts #1 SMP Thứ tư, ngày 05 tháng 1 năm 2022 13:07:40 +0000 x86_64 GNU/Linux

mô-đun hạt nhân

$ lsmod | loại
ac97_bus 16384 1 snd_soc_core
aesni_intel 372736 0
agpgart 53248 4 intel_agp,intel_gtt,ttm,drm
atkbd 36864 0
bpf_preload 16384 0
cầu 274432 1 br_netfilter
br_netfilter 32768 0
cec 61440 1 drm_kms_helper
cfg80211 983040 0
crc16 16384 1 máy lẻ 4
crc32c_generic 16384 0
crc32c_intel 24576 3
crc32_pclmul 16384 0
cct10dif_pclmul 16384 1
cryptd 24576 2 crypto_simd,ghash_clmulni_intel
crypto_simd 16384 1 aesni_intel
drm 577536 5 drm_kms_helper,qxl,drm_ttm_helper,ttm
drm_kms_helper 278528 3 qxl
drm_ttm_helper 16384 1 qxl
máy lẻ4 933888 1
chuyển đổi dự phòng 16384 1 net_failover
béo 86016 1 vfat
fb_sys_fops 16384 1 drm_kms_helper
cầu chì 167936 1
ghash_clmulni_intel 16384 0
keo_helper 16384 1 aesni_intel
i2c_i801 36864 0
i2c_smbus 20480 1 i2c_i801
i8042 36864 0
intel_agp 24576 0
intel_gtt 24576 1 intel_agp
intel_pmc_bxt 16384 1 iTCO_wdt
intel_rapl_common 28672 1 intel_rapl_msr
intel_rapl_msr 20480 0
ip6_udp_tunnel 16384 1 vxlan
ip_set 57344 0
ip_tables 32768 0
ipt_REJECT 16384 0
ip_vs 184320 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
ip_vs_rr 16384 0
ip_vs_sh 16384 0
ip_vs_wrr 16384 0
irqbypass 16384 1 kvm
iTCO_vendor_support 16384 1 iTCO_wdt
iTCO_wdt 16384 0
jbd2 151552 1 máy lẻ 4
vui vẻ 28672 0
kvm 933888 1 kvm_intel
kvm_intel 331776 0
ledtrig_audio 16384 1 snd_hda_codec_generic
libcrc32c 16384 4 nf_conntrack,nf_nat,nf_tables,ip_vs
libps2 20480 2 atkbd, psmouse
llc 16384 2 cầu,stp
lpc_ich 28672 0
mac_hid 16384 0
mbcache 16384 1 ext4
Kích thước mô-đun được sử dụng bởi
chuộtdev 24576 0
net_failover 24576 1 virtio_net
nf_conntrack 172032 6 xt_conntrack,nf_nat,xt_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_conntrack_netlink 57344 0
nf_defrag_ipv4 16384 1 nf_conntrack
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
nf_nat 57344 3 xt_nat,nft_chain_nat,xt_MASQUERADE
nfnetlink 20480 4 nft_compat,nf_conntrack_netlink,nf_tables,ip_set
nf_reject_ipv4 16384 1 ipt_REJECT
nf_tables 249856 183 nft_compat,nft_counter,nft_chain_nat
nft_chain_nat 16384 7
nft_compat 20480 122
nft_count 16384 84
nls_iso8859_1 16384 0
lớp phủ 147456 18
pcspkr 16384 0
psmouse 184320 0
qemu_fw_cfg 20480 0
qxl 73728 0
rapl 16384 0
rfkill 28672 2 cfg80211
rng_core 16384 1 virtio_rng
sê-ri 28672 6 sê-ri_raw, atkbd, psmouse, i8042
seri_raw 20480 0
snd 114688 8 snd_hda_codec_generic,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_timer,snd_compress,snd_soc_core,snd_pcm
snd_compress 32768 1 snd_soc_core
snd_hda_codec 172032 2 snd_hda_codec_generic,snd_hda_intel
snd_hda_codec_generic 98304 1
snd_hda_core 110592 3 snd_hda_codec_generic,snd_hda_intel,snd_hda_codec
snd_hda_intel 57344 0
snd_hwdep 16384 1 snd_hda_codec
snd_intel_dspcfg 28672 1 snd_hda_intel
snd_pcm 147456 7 snd_hda_intel,snd_hda_codec,soundwire_intel,snd_compress,snd_soc_core,snd_hda_core,snd_pcm_dmaengine
snd_pcm_dmaengine 16384 1 snd_soc_core
snd_soc_core 327680 1 soundwire_intel
snd_timer 49152 1 snd_pcm
soundcore 16384 1 snd
soundwire_bus 90112 3 soundwire_intel,soundwire_generic_allocation,soundwire_cadence
soundwire_cadence 36864 1 soundwire_intel
soundwire_generic_allocation 16384 1 soundwire_intel
soundwire_intel 45056 1 snd_intel_dspcfg
stp 16384 1 cầu
syscopyarea 16384 1 drm_kms_helper
sysfillrect 16384 1 drm_kms_helper
sysimgblt 16384 1 drm_kms_helper
ttm 114688 2 qxl,drm_ttm_helper
udp_tunnel 20480 1 vxlan
65536 0
veth 32768 0
vfat 24576 0
virtio_balloon 24576 0
virtio_blk 20480 2
virtio_console 40960 0
virtio_net 61440 0
virtio_pci 28672 0
virtio_rng 16384 0
vxlan 77824 0
xhci_pci 20480 0
xhci_pci_renesas 20480 1 xhci_pci
x_tables 53248 11 xt_conntrack,xt_statistic,nft_compat,xt_tcpudp,xt_addrtype,xt_nat,xt_comment,ipt_REJECT,ip_tables,xt_MASQUERADE,xt_mark
xt_addrtype 16384 2
xt_bình luận 16384 64
xt_conntrack 16384 13
xt_mark 16384 12
xt_MASQUERADE 20480 6
xt_nat 16384 7
xt_statistic 16384 3
xt_tcpudp 20480 15

hệ thống

thuộc tính sysctl trên thùng rác. Vượt quá số ký tự tối đa cho lỗi máy chủ.

Mikolaj S. avatar
lá cờ cn
Bạn có thể vui lòng làm rõ điều này -> "Khi một nhóm muốn thực hiện truy vấn DNS tới coredns, nó sẽ hết thời gian chờ khi dịch vụ chuyển tiếp các yêu cầu đến phiên bản nhóm chạy bên ngoài của coredns." Làm cách nào để bạn thực hiện truy vấn DNS tới CoreDNS? Làm thế nào để bạn biết nó bị hết thời gian chờ? Bạn có thể kiểm tra nhật ký của nhóm CoreDNS (`kubectl log --namespace=kube-system -l k8s-app=kube-dns`) không?
Volker Raschek avatar
lá cờ in
@MikolajS. tôi đã thay đổi mô tả của vấn đề và thêm một số thông tin
Mikolaj S. avatar
lá cờ cn
Bạn có thể vui lòng chia sẻ các cờ mà bạn đã sử dụng cho lệnh `kubeadm init` không? Đặc biệt, bạn có sử dụng cờ `--pod-network-cidr` không? Bạn đã cài đặt Calico CNI như thế nào - có rất ít giải pháp khả thi, bạn đã sử dụng giải pháp nào? Bạn có chỉ định [nhóm CIDR cho Calico](https://projectcalico.docs.tigera.io/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-on-nodes) thích hợp không?
Volker Raschek avatar
lá cờ in
Xin chào @MikolajS., Tôi đã thay đổi lại mô tả và thêm lệnh `kubeadm init`. Có, tôi đã sử dụng cờ `--pod-network-cidr` và cài đặt calico thông qua helm. Không có thay đổi nào được thực hiện đối với giá trị.yaml và biến môi trường `CALICO_IPV4POOL_CIDR` không được xác định.
Volker Raschek avatar
lá cờ in
Để cài đặt kubernetes, gói `iptables` phải được [thay thế](https://github.com/archlinux/svntogit-community/blob/packages/kubernetes/trunk/PKGBUILD#L14) bởi `iptables-nft` . Sự thay đổi có lẽ không gây ra những hạn chế? Tôi đã tìm thấy bài viết sau về việc vô hiệu hóa mô-đun iptables. https://mihail-milev.medium.com/no-pod-to-pod-communication-on-centos-8-kubernetes-with-calico-56d694d2a6f4
Mikolaj S. avatar
lá cờ cn
Cảm ơn tất cả các thông tin, tôi sẽ cố gắng sao chép vấn đề của bạn và kiểm tra những gì có thể được thực hiện.
Mikolaj S. avatar
lá cờ cn
Bạn đã kiểm tra xem cả `iptables` đã được cài đặt chưa (ý tôi là phiên bản kế thừa và phiên bản nft)? Bạn có thể chạy lệnh `iptables -v` không?
Volker Raschek avatar
lá cờ in
Xin chào @MikolajS., Tôi đã tìm ra giải pháp tại sao calico và các plugin cni khác không hoạt động. Đây là cuộc thảo luận về vấn đề thời gian chạy crio cơ bản https://github.com/cri-o/cri-o/issues/2885#issuecomment-1015732983
Điểm:1
lá cờ cn

Đăng câu trả lời wiki cộng đồng dựa trên chủ đề GitHub - Các tệp có trong CentOS RPM can thiệp vào hoạt động của CNI và trang wiki ArchLinux - CRIO-O. Hãy mở rộng nó.


Vấn đề được biết đến và mô tả trong Wiki ArchLinux:

Cảnh báo: Arch cài đặt các plugin được cung cấp bởi plugin cni cho cả hai /usr/lib/cni/opt/cni/bin nhưng hầu hết các plugin khác (ví dụ: triển khai trong cụm, plugin được quản lý kubelet, v.v.) theo mặc định chỉ cài đặt vào thư mục thứ hai.

CRI-O chỉ được định cấu hình để tìm kiếm phần bổ trợ trong thư mục đầu tiên và kết quả là bất kỳ phần bổ trợ nào trong thư mục thứ hai đều không khả dụng nếu không có một số thay đổi về cấu hình.

Cách khắc phục được trình bày trong bài đăng này của người dùng bart0sh:

Tôi đang sử dụng cách giải quyết sau:

  • cài đặt cri-o
  • xóa mọi thứ khỏi /etc/cni/net.d
  • thiết lập nút với kubeadm
  • cài đặt plugin cni (wave, flannel, calico, v.v.)

cấu hình bổ sung được trình bày bởi người dùng volker-raschek:

Bên cạnh các cấu hình CNI bên dưới /etc/cni/net.d, phần mở rộng của plugin_dirs tài sản bị mất trong crio.conf cấu hình, bởi vì crio dường như không nhìn vào /opt/cni cho các plugin được triển khai theo mặc định. Tôi đã tạo một tệp thả xuống.

$ con mèo /etc/crio/crio.conf.d/00-plugin-dir.conf
[crio.mạng]
plugin_dirs = [
 "/opt/cni/bin/",
 "/usr/lib/cni",
]

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.