我正在尝试使用以下命令在 Ubuntu 20.04 TLS 上安装带有仪表板的 Kubernetes 集群:
Swapoff -a
Remove following line from /etc/fstab
/swap.img none swap sw 0 0
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo apt install apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
sudo mv ~/kubernetes.list /etc/apt/sources.list.d
sudo apt update
sudo apt install kubeadm kubelet kubectl kubernetes-cni
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
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://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
kubectl proxy --address 192.168.1.133 --accept-hosts '.*'
但当我打开http://192.168.1.133:8001/api/v1/namespaces/default/services/https:kubernetes-dashboard:https/proxy
我得到:
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "services \"kubernetes-dashboard\" not found",
"reason": "NotFound",
"details": {
"name": "kubernetes-dashboard",
"kind": "services"
},
"code": 404
}
我尝试列出这些豆荚:
root@ubuntukubernetis1:~# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-f6bwx 0/1 Error 11 (29s ago) 76m
kube-system coredns-6d4b75cb6d-rk4kq 0/1 ContainerCreating 0 77m
kube-system coredns-6d4b75cb6d-vkpcm 0/1 ContainerCreating 0 77m
kube-system etcd-ubuntukubernetis1 1/1 Running 1 (52s ago) 77m
kube-system kube-apiserver-ubuntukubernetis1 1/1 Running 1 (52s ago) 77m
kube-system kube-controller-manager-ubuntukubernetis1 1/1 Running 1 (52s ago) 77m
kube-system kube-proxy-n6ldq 1/1 Running 1 (52s ago) 77m
kube-system kube-scheduler-ubuntukubernetis1 1/1 Running 1 (52s ago) 77m
kubernetes-dashboard dashboard-metrics-scraper-7bfdf779ff-sdnc8 0/1 Pending 0 75m
kubernetes-dashboard dashboard-metrics-scraper-8c47d4b5d-2sxrb 0/1 Pending 0 59m
kubernetes-dashboard kubernetes-dashboard-5676d8b865-fws4j 0/1 Pending 0 59m
kubernetes-dashboard kubernetes-dashboard-6cdd697d84-nmpv2 0/1 Pending 0 75m
root@ubuntukubernetis1:~#
您知道我该如何解决这个问题吗?
答案1
这已得到答复这里。在此发布解决方案,以造福社区成员。
您正在查询的 URL(http://192.168.1.133:8001/api/v1/namespaces/default/services/https:kubernetes-dashboard:https/proxy) 是错的。
根据您应用的最后一个 yaml 文件(https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml),正如我们从 kubectl get pods -A 中猜测到的:kubernetes-dashboard 服务位于 kubernetes-dashboard 命名空间中。不是默认命名空间。
虽然如果你只是想连接 kubernetes 仪表板:而不是kubectl proxy
运行命令,我会选择kubectl port-forward -n kubernetes-dashboard deploy/kubernetes-dashboard 8443:8443
,然后打开我的浏览器https://localhost:8443
然后,就是您的 SDN 的情况。在您的 中kubectl get pods
,我们可以看到 kube-flannel 命名空间中的 kube-flannel pod 处于错误状态。
查看此容器的日志,并尝试找出它无法启动的原因(kubectl logs -n kube-flannel kube-flannel-ds-xxxx -p)。
我已经好几年没有设置过 Flannel 了,不过我记得除了应用它们的 RBAC 和守护进程集 yamls 之外,我还必须修补节点,为它们分配 CIDR。例如:(kubectl patch node my-node-1 -p '{ "spec": { "podCIDR": "10.32.3.0/24" } }' --type merge
每个 podCIDR 必须是唯一的,每个节点都有自己的托管 Pod 范围。
如果我没记错的话,每个 podCIDR 都必须是 flannel 的 net-conf.json 网络子网的子集——请查看安装 flannel 时创建的 ConfigMap)。
截至您上次评论时:错误告诉我们以下内容
Failed to create SubnetManager: error retrieving pod spec for 'kube-flannel/kube-flannel-ds-f6bwx': pods "kube-flannel-ds-f6bwx" is forbidden: User "system:serviceaccount:kube-flannel:flannel" cannot get resource "pods" in API group "" in the namespace "kube-flannel"
回顾您用于设置 flannel 的文件,您提到了一个在 kube-flannel 命名空间中设置工作负载的文件,然后是这个 rbac 文件,为 kube-system 中的服务帐户创建 clusterrolebinding。要修复您的 SDN,您可能需要创建以下内容:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: flannel-fix
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-flannel
需要注意的是:kube-flannel-rbac 在你的情况下不是必需的。如果你从其旧版清单中安装了 flannel,那么它就是必需的(https://github.com/flannel-io/flannel/blob/master/Documentation/k8s-manifests/kube-flannel-legacy.yml)。
在你的情况下,我们正在修复的 ClusterRoleBinding 应该已经正确创建,仅应用https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml