Tôi đang cố gắng thiết lập cụm HA Kubernetes trên Hetzner Cloud sau cái này hướng dẫn. Tôi đã tạo 6 máy chủ, 3 máy chủ máy bay điều khiển và 3 công nhân. Khi cố gắng sử dụng kubeadm để tham gia máy chủ thứ hai vào cụm, tôi gặp phải các lỗi sau:
Trên k8s-server-1:
Ngày 06 tháng 7 14:09:01 k8s-server-1 kubelet[8059]: E0706 14:09:01.430599 8059 controller.go:187] không thể cập nhật hợp đồng thuê, lỗi: lỗi rpc: mã = Unknown desc = vượt quá thời hạn bối cảnh
Ngày 06 tháng 7 14:08:54 k8s-server-1 kubelet[8059]: E0706 14:08:54.370142 8059 controller.go:187] không thể cập nhật hợp đồng thuê, lỗi: lỗi rpc: mã = Unknown desc = vượt quá thời hạn ngữ cảnh
Ngày 06 tháng 7 14:08:51 k8s-server-1 kubelet[8059]: E0706 14:08:51.762075 8059 kubelet_node_status.go:470] "Lỗi cập nhật trạng thái nút, sẽ thử lại" err="lỗi nhận nút \"k8s-server -1\": Nhận \"https://my.kubernetes.test:6443/api/v1/nodes/k8s-server-1?resourceVersion=0&timeout=10s\": đã vượt quá thời hạn ngữ cảnh"
Ngày 06 tháng 7 14:08:47 k8s-server-1 kubelet[8059]: E0706 14:08:47.325309 8059 event.go:273] Không thể ghi sự kiện: '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"" , APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"kube-apiserver-k8s-server-1.168f32516b37209a", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"" , ResourceVersion:"", Thế hệ:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1. Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Nhãn:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers :[]string(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"kube- apiserver-k8s-server-1", UID:"10b8928a4f8e5e0b449a40ab35a3efdc", APIVersion:"v1", ResourceVersion:"", FieldPath:"spec.containers{kube-apiserver}"}, Lý do:"Không lành mạnh", Thông báo:"Sẵn sàng thăm dò không thành công: thăm dò HTTP fai dẫn đầu với mã trạng thái: 500", Nguồn:v1.EventSource{Thành phần:"kubelet", Máy chủ lưu trữ:"k8s-server-1"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd0ee49429a, ext:115787424848, loc:(*time.Location)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd16f1a0a1d, ext:117801107410, loc:(*time.Location)(0x74c3600)}}, Đếm: 2, Loại:"Cảnh báo", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Chuỗi:(*v1.EventSeries) (không), Hành động:"", Liên quan:(*v1.ObjectReference)(không), ReportingController:"", ReportingInstance:""}': 'Bản vá" https://my.kubernetes.test:6443/api/ v1/namespaces/kube-system/events/kube-apiserver-k8s-server-1.168f32516b37209a": đọc tcp 192.168.178.2:60934->192.168.178.8:6443: sử dụng kết nối mạng đã đóng'(có thể thử lại sau khi ngủ)
Ngày 06 tháng 7 14:08:47 k8s-server-1 kubelet[8059]: E0706 14:08:47.324053 8059 controller.go:187] không thể cập nhật hợp đồng thuê, lỗi: lỗi rpc: mã = Unknown desc = vượt quá thời hạn ngữ cảnh
Ngày 06 tháng 7 14:08:46 k8s-server-1 kubelet[8059]: I0706 14:08:46.986663 8059 status_manager.go:566] "Không thể nhận trạng thái cho nhóm" podUID=10b8928a4f8e5e0b449a40ab35a3efdc pod="kube-system/kube- apiserver-k8s-server-1" error="etcdserver: yêu cầu đã hết thời gian chờ"
Trên k8s-server-2:
Ngày 06 tháng 7 14:09:04 k8s-server-2 kubelet[6685]: E0706 14:09:04.072247 6685 event.go:264] Máy chủ từ chối sự kiện '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", APIVersion :""}, ObjectMeta:v1.ObjectMeta{Name:"weave-net-9fldg.168f3252093de42e", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"" , Thế hệ:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil) , DeletionGracePeriodSeconds:(*int64)(nil), Nhãn:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string( nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"weave-net-9fldg", UID:"88743b7a-aa81-4948-be9b-78c4bbf436fe", APIVersion:"v1", ResourceVersion:"714", FieldPath:"spec.initContainers{weave-init}"}, Lý do:"Đã kéo", Thông báo:"Thành công đã kéo hình ảnh \"docker.io/weaworks/weave-kube :2.8.1\" trong 6.525660057s", Nguồn:v1.EventSource{Thành phần:"kubelet", Máy chủ:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:(*time.Location)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:(*time.Location)(0x74c3600)} }, Đếm:1, Loại:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Sê-ri:(* v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'rpc error: code = Unknown desc = context deadline' (sẽ không thử lại!)
Ngày 06 tháng 7 14:08:57 k8s-server-2 kubelet[6685]: E0706 14:08:57.993540 6685 controller.go:144] không thể đảm bảo hợp đồng thuê tồn tại, sẽ thử lại sau 400 mili giây, lỗi: Nhận "https://my .kubernetes.test:6443/apis/coordinate.k8s.io/v1/namespaces/kube-node-lease/lease/k8s-server-2?timeout=10s": đã vượt quá thời hạn ngữ cảnh
Ngày 06 tháng 7 14:08:57 k8s-server-2 kubelet[6685]: I0706 14:08:57.352989 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02bd0d32a16706fc6eab6e458031f0714c9f8f262"f8f262"a562"
Ngày 06 tháng 7 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.992481 6685 event.go:273] Không thể ghi sự kiện: '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"" , APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"weave-net-9fldg.168f3252093de42e", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion: "", Thế hệ:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)( không), DeletionGracePeriodSeconds:(*int64)(nil), Nhãn:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[] string(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"weave-net-9fldg ", UID:"88743b7a-aa81-4948-be9b-78c4bbf436fe", APIVersion:"v1", ResourceVersion:"714", FieldPath:"spec.initContainers{weave-init}"}, Lý do:"Đã kéo", Thông báo: "Đã kéo thành công hình ảnh \"docker.io/weaveworks/weave-kub e:2.8.1\" trong 6.525660057s", Nguồn:v1.EventSource{Thành phần:"kubelet", Máy chủ:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e , ext:11173601176, loc:(*time.Location)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:(*time.Location)(0x74c3600) }}, Đếm:1, Loại:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Chuỗi:( *v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'Post "https://my.kubernetes.test :6443/api/v1/namespaces/kube-system/events": đọc tcp 192.168.178.3:47722->192.168.178.8:6443: sử dụng kết nối mạng đã đóng'(có thể thử lại sau khi ngủ)
Ngày 06 tháng 7 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.990109 6685 kubelet_node_status.go:470] "Lỗi cập nhật trạng thái nút, sẽ thử lại" err="lỗi nhận nút \"k8s-server -2\": Nhận \"https://my.kubernetes.test:6443/api/v1/nodes/k8s-server-2?timeout=10s\": net/http: yêu cầu bị hủy (Client.Timeout vượt quá trong khi đang chờ tiêu đề)"
Ngày 06 tháng 7 14:08:56 k8s-server-2 kubelet[6685]: I0706 14:08:56.989160 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02bd0d32a16706fc6eab6e458031f0714c9f2522"f8f262"f8f262"
Ngày 06 tháng 7 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.988865 6685 kubelet.go:1683] "Không thể tạo nhóm nhân bản cho" err="Post \"https://my. kubernetes.test:6443/api/v1/namespaces/kube-system/pods\": đọc tcp 192.168.178.3:47722->192.168.178.8:6443: sử dụng kết nối mạng kín" pod="kube-system/etcd- k8s-máy chủ-2"
Ngày 06 tháng 7 14:08:54 k8s-server-2 kubelet[6685]: E0706 14:08:54.210098 6685 pod_workers.go:190] "Lỗi khi đồng bộ hóa nhóm, bỏ qua" err="failed to \"StartContainer\" for \" etcd\" với CrashLoopBackOff: \"back-off 10s khởi động lại container không thành công=etcd pod=etcd-k8s-server-2_kube-system(22b3a914daf1bef98cb01ddd7868523d)\"" pod="kube-system/etcd-k8s-server-2" podUID =22b3a914daf1bef98cb01ddd7868523d
Ngày 06 tháng 7 14:08:54 k8s-server-2 kubelet[6685]: I0706 14:08:54.208472 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02bd0d32a16706fc6eab6e458031f0714c9f262"f8f262"f8f262"
Ngày 06 tháng 7 14:08:54 k8s-server-2 kubelet[6685]: E0706 14:08:54.208199 6685 kubelet.go:1683] "Không thể tạo nhóm nhân bản cho" err="rpc error: code = Unknown desc = context đã quá thời hạn" pod="kube-system/etcd-k8s-server-2"
Ngày 06 tháng 7 14:08:53 k8s-server-2 kubelet[6685]: E0706 14:08:53.347043 6685 event.go:264] Máy chủ từ chối sự kiện '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", APIVersion :""}, ObjectMeta:v1.ObjectMeta{Name:"kube-proxy-2z5js.168f3250c7fc2120", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"" , Thế hệ:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil) , DeletionGracePeriodSeconds:(*int64)(nil), Nhãn:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string( nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"kube-proxy-2z5js", UID:"0ac8fe5d-7332-4a4d-abee-48c6d4dee38f", APIVersion:"v1", ResourceVersion:"711", FieldPath:"spec.containers{kube-proxy}"}, Lý do:"Đã bắt đầu", Thông báo:"Đã bắt đầu container kube-proxy", Nguồn:v1.EventSource{Compone nt:"kubelet", Máy chủ:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd04243d720, ext:5783805064, loc:(*time.Location)(0x74c3600)}} , LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd04243d720, ext:5783805064, loc:(*time.Location)(0x74c3600)}}, Count:1, Type:"Normal", EventTime:v1.MicroTime {Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Sê-ri:(*v1.EventSeries)(nil), Hành động:"", Liên quan:(* v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'rpc error: code = Unknown desc = context deadline' (sẽ không thử lại!)
Ngày 06 tháng 7 14:08:53 k8s-server-2 kubelet[6685]: I0706 14:08:53.269542 6685 scope.go:111] "RemoveContainer" containerID="e2664d16d53ff5ae6de27fe52e84651791bca1ca70a6987c9a4e3aea7418"
Ngày 06 tháng 7 14:08:47 k8s-server-2 kubelet[6685]: I0706 14:08:47.194425 6685 scope.go:111] "RemoveContainer" containerID="7aaa63419740b5e30cc76770abc92dfbabe1f48d4d812b4abc89166df53"e
Ngày 06 tháng 7 14:08:46 k8s-server-2 kubelet[6685]: I0706 14:08:46.987598 6685 status_manager.go:566] "Không thể nhận trạng thái cho nhóm" podUID=778e041efc75c1983cbb59f2b3d46d09 pod="kube-system/kube- controller-manager-k8s-server-2" error="etcdserver: yêu cầu đã hết thời gian chờ"
Ngày 06 tháng 7 14:08:46 k8s-server-2 kubelet[6685]: E0706 14:08:46.986807 6685 controller.go:144] không thể đảm bảo hợp đồng thuê tồn tại, sẽ thử lại sau 200 mili giây, lỗi: etcdserver: hết thời gian yêu cầu
Ngày 06 tháng 7 14:08:46 k8s-server-2 kubelet[6685]: E0706 14:08:46.986800 6685 kubelet_node_status.go:470] "Lỗi cập nhật trạng thái nút, sẽ thử lại" err="lỗi nhận nút \"k8s-server -2\": etcdserver: hết thời gian yêu cầu"
Danh sách máy chủ:
| Tên | IP công cộng | IP riêng |
| --- | --- | --- |
| k8s-server-1 | 192.168.178.2 | 10.23.1.2 |
| k8s-server-2 | 192.168.178.3 | 10.23.1.3 |
| k8s-server-3 | 192.168.178.4 | 10.23.1.4 |
| k8s-công nhân-1 | 192.168.178.5 | 10.23.1.5 |
| k8s-công nhân-2 | 192.168.178.6 | 10.23.1.6 |
| k8s-công nhân-3 | 192.168.178.7 | 10.23.1.7 |
Ngoài ra, k8s-server-* có các quy tắc tường lửa sau được áp dụng cho chúng (chỉ áp dụng cho lưu lượng truy cập được định tuyến qua IP công cộng, không áp dụng bên trong mạng riêng):
| Hướng | Cảng | Nguồn/Đích |
| --- | --- | --- |
| Xâm nhập | 80 | bất kỳ |
| Xâm nhập | 443 | bất kỳ |
| Xâm nhập | 22 | IP công ty tĩnh |
| Xâm nhập | 6443 | IP công ty tĩnh |
| Đi ra | bất kỳ | bất kỳ |
Có một bộ cân bằng tải trong cùng một mạng định tuyến lưu lượng truy cập đến k8s-server-1. Đó là IP công cộng là 192.168.178.8 và IP riêng là 10.23.1.8.
Những gì tôi đã chạy trên cả hai nút:
cập nhật apt-get
apt-get cài đặt apt-transport-https ca-chứng chỉ curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 được ký bởi=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) ổn định" | Sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
cập nhật apt-get
apt-get cài đặt docker-ce docker-ce-cli containerd.io
systemctl kích hoạt docker.service
systemctl kích hoạt containerd.service
con mèo <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"trình điều khiển nhật ký": "tệp json",
"log-opts": {
"kích thước tối đa": "100m"
},
"trình điều khiển lưu trữ": "lớp phủ2"
}
EOF
systemctl kích hoạt docker
systemctl daemon-tải lại
docker khởi động lại systemctl
con mèo <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
con mèo <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
cập nhật apt-get
cài đặt apt-get -y apt-transport-https ca-chứng chỉ curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
cập nhật apt-get
cài đặt apt-get -y kubelet kubeadm kubectl
apt-mark giữ kubelet kubeadm kubectl
... trên máy chủ 1:
kéo hình ảnh cấu hình kubeadm
kubeadm init --apiserver-advertise-address=10.23.1.2 --control-plane-endpoint "my.kubernetes.test:6443" --upload-certs
mkdir ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
áp dụng kubectl -f "https://cloud.weave.works/k8s/net?k8s-version=$(phiên bản kubectl | base64 | tr -d '\n')"
xem kubectl get pod -n kube-system
xem kubectl nhận các nút
... trên máy chủ 2:
kéo hình ảnh cấu hình kubeadm
kubeadm tham gia my.kubernetes.test:6443 --token XXXXX.XXXXX --Discovery-token-ca-cert-hash sha256:XXXXXXXXXX --control-plane --certificate-key XXXXXXXXXX