为了学习kubernetes,我使用4个Raspberry pi构建了一个裸机集群,使用k3s进行设置:
# curl -sfL https://get.k3s.io | sh -
添加了节点等,所有的东西都出现了,我可以看到所有的节点,几乎所有的东西都按预期工作。
我想监视pi,所以我用helm安装了kube-prometheus-stack:
$ kubectl create namespace monitoring
$ helm install prometheus --namespace monitoring prometheus-community/kube-prometheus-stack
现在一切看起来都很棒:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system helm-install-traefik-crd-s8zw5 0/1 Completed 0 5d21h
kube-system helm-install-traefik-rc9f2 0/1 Completed 1 5d21h
monitoring prometheus-prometheus-node-exporter-j85rw 1/1 Running 10 28h
kube-system metrics-server-86cbb8457f-mvbkl 1/1 Running 12 5d21h
kube-system coredns-7448499f4d-t7sp8 1/1 Running 13 5d21h
monitoring prometheus-prometheus-node-exporter-mmh2q 1/1 Running 9 28h
monitoring prometheus-prometheus-node-exporter-j4k4c 1/1 Running 10 28h
monitoring alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 10 28h
kube-system svclb-traefik-zkqd6 2/2 Running 6 19h
monitoring prometheus-prometheus-node-exporter-bft5t 1/1 Running 10 28h
kube-system local-path-provisioner-5ff76fc89d-g8tm6 1/1 Running 12 5d21h
kube-system svclb-traefik-jcxd2 2/2 Running 28 5d21h
kube-system svclb-traefik-mpbjm 2/2 Running 22 5d21h
kube-system svclb-traefik-7kxtw 2/2 Running 20 5d21h
monitoring prometheus-grafana-864598fd54-9548l 2/2 Running 10 28h
kube-system traefik-65969d48c7-9lh9m 1/1 Running 3 19h
monitoring prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 10 28h
monitoring prometheus-kube-state-metrics-76f66976cb-m8k2h 1/1 Running 6 28h
monitoring prometheus-kube-prometheus-operator-5c758db547-zsv4s 1/1 Running 6 28h
服务都在那里:
$ kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 5d21h
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 5d21h
kube-system metrics-server ClusterIP 10.43.80.65 <none> 443/TCP 5d21h
kube-system prometheus-kube-prometheus-kube-proxy ClusterIP None <none> 10249/TCP 28h
kube-system prometheus-kube-prometheus-kube-scheduler ClusterIP None <none> 10251/TCP 28h
monitoring prometheus-kube-prometheus-operator ClusterIP 10.43.180.73 <none> 443/TCP 28h
kube-system prometheus-kube-prometheus-coredns ClusterIP None <none> 9153/TCP 28h
kube-system prometheus-kube-prometheus-kube-etcd ClusterIP None <none> 2379/TCP 28h
kube-system prometheus-kube-prometheus-kube-controller-manager ClusterIP None <none> 10252/TCP 28h
monitoring prometheus-kube-prometheus-alertmanager ClusterIP 10.43.195.99 <none> 9093/TCP 28h
monitoring prometheus-prometheus-node-exporter ClusterIP 10.43.171.218 <none> 9100/TCP 28h
monitoring prometheus-grafana ClusterIP 10.43.20.165 <none> 80/TCP 28h
monitoring prometheus-kube-prometheus-prometheus ClusterIP 10.43.207.29 <none> 9090/TCP 28h
monitoring prometheus-kube-state-metrics ClusterIP 10.43.229.14 <none> 8080/TCP 28h
kube-system prometheus-kube-prometheus-kubelet ClusterIP None <none> 10250/TCP,10255/TCP,4194/TCP 28h
monitoring alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 28h
monitoring prometheus-operated ClusterIP None <none> 9090/TCP 28h
kube-system traefik LoadBalancer 10.43.20.17 192.168.76.200,192.168.76.201,192.168.76.202,192.168.76.203 80:31131/TCP,443:31562/TCP 5d21h
名称空间:
$ kubectl get namespaces
NAME STATUS AGE
kube-system Active 5d21h
default Active 5d21h
kube-public Active 5d21h
kube-node-lease Active 5d21h
monitoring Active 28h
但是我无法联系到grafana服务。
很好,我想,让我们定义一个入口,但它没有工作:
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: monitoring
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: prometheus-grafana
port:
number: 80
我不知道为什么它没有得到服务,我不能真正看到问题在哪里,虽然我理解容器等(我第一次有一切在docker swarm上运行),我真的不知道在哪里,如果在任何地方,它会显示在日志中。
我在过去的几天里尝试了各种各样的东西,我终于找到了一个关于名称空间和调用服务的问题的提示,以及一个名为"type: externalname"的东西。
我从集群内的一个pod中检查了curl,它正在"监控"中传递数据。名称空间,但交通工具无法到达或甚至看不到它?
查看了Traefik文档后,我发现了关于名称空间的这一点,但我不知道从哪里开始找到提到的:
providers:
kubernetesCRD:
namespaces:
我假设k3s已经正确地将其设置为空数组,因为我在他们的网站上找不到任何东西告诉我如何处理他们的组合" klippper -lb"one_answers"traefik".
我终于尝试用外部名称定义另一个服务:
---
apiVersion: v1
kind: Service
metadata:
name: grafana-named
namespace: kube-system
spec:
type: ExternalName
externalName: prometheus-grafana.monitoring.svc.cluster.local
ports:
- name: service
protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: grafana-named
port:
number: 80
2-3天后,我尝试了我能想到的所有方法,谷歌下所有的东西,我无法从内部集群节点外部获得grafana。
我不知道如何用k3s做任何事情。我在我的主PC上安装了Lens,几乎可以看到所有东西,但我认为缺失的参数信息也需要一个入口或类似的东西。
我要做什么才能让traefk做我认为基本上是它的工作,路由传入请求到后端服务?
我在github和那里的一个人(再次感谢brandond)上提交了一个bug报告)给我指了正确的方向。
网络层使用法兰绒处理集群中的;网络。它的默认实现是"vxlan"对于虚拟以太网适配器,这似乎更复杂。
对于我的需求(阅读:使集群均匀工作),解决方案是将实现更改为"host-gw"
通过添加"——flannnel -backend=host-gw"到k3。控制器上的服务选项。
$ sudo systemctl edit k3s.service
### Editing /etc/systemd/system/k3s.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file
[Service]
ExecStart=
ExecStart=/usr/local/bin/k3s
server
'--flannel-backend=host-gw'
### Lines below this comment will be discarded
第一个"ExecStart="清除现有的默认启动命令,使其可以被第二个启动命令取代。
现在一切都如我所料,我终于可以继续学习k8了。
我可能会重新激活"vxlan"总有一天,你会明白的。