使用 Vagrant + VirtualBox 构建 Kubernetes 多节点集群环境
集群由 3 个节点组成,每个节点分别运行 Kubernetes Master 和 Kubernetes Node。 etcd、flannel 和 docker-ce 使用 yum 包直接安装,etcd 由 3 个实例组成的静态集群。 Kubernetes 使用二进制包安装,组件进程通过 systemd 管理(service 文件及相关配置文件参考 kubernetes-1.5.2 yum 安装包)。 kube-apiserver 连接 etcd 集群,使用 Keepalived 配置 kube-apiserver 浮动 IP,kubelet、kube-proxy、kube-controller-manager、kube-scheduler 通过浮动 IP 连接 kube-apiserver。 kubectl 通过浮动 IP 访问 kube-apiserver 操作 Kubernetes 集群。
- macOS High Sierra
- Virtualbox 5.2.6 r120293
- Vagrant 2.0.2
- centos/7 1801.02
- etcd 3.2.11+
- flannel 0.7.1+
- docker-ce 17.12.0-ce+
- Kubernetes 1.10.0+
参考资料
参考资料
kubernetes/cluster/addons/dns/kube-dns/
参考资料
CoreDNS for Kubernetes Service Discovery
CoreDNS for Kubernetes Service Discovery, Take 2
Custom DNS Entries For Kubernetes
Heapster 提供 RESTful API 接口用于查询汇聚的性能数据,默认缓存最近 15 分钟的数据。
curl -u "admin:admin" -k https://172.17.0.100:6443/api/v1/proxy/namespaces/kube-system/services/heapster\
/api/v1/model/namespaces/kube-system/metrics/memory/usage
通过 Kubernetes Proxy API 访问 Grafana UI
https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy/
注意问题
Grafana 的 GF_SERVER_ROOT_URL 参数需要与服务访问方式保持一致,否则页面跳转可能会出错。
参考资料
Resource Usage Monitoring in Kubernetes
提供 kubectl top node/top
所需的指标数据。
注意问题
Error: cluster doesn't provide requestheader-client-ca-file
参考资料
Note: The API requires metrics server to be deployed in the cluster. Otherwise it will be not available.
参考资料
Prometheus 监控包括 采集指标(白盒监控) 和 探测服务(黑盒监控)。 基于 Kubernetes 资源的监控似乎比较复杂,目前做了一些约定,详见这里。
-
job: prometheus -- 使用 static_configs
- prometheus
-
job: kubernetes-apiserver -- 使用 <kubernetes_sd_configs> role: endpoints
- kube-apiserver
-
job: kubernetes-node -- 使用 <kubernetes_sd_configs> role: node
- node 节点
-
job: kubernetes-endpoints -- 使用 <kubernetes_sd_configs> role: endpoints
-
metrics-server
-
blackbox-exporter
-
kube-state-metrics
-
kube-dns(端口 9153)
-
kubernetes-dashboard
-
node-exporter
-
-
job: kubernetes-pod -- 使用 <kubernetes_sd_configs> role: pod
- 暂无
-
job: kubernetes-service-dns
- kube-dns (udp 53)
-
job: kubernetes-service-http
-
kube-state-metrics (http)
-
kubernetes-dashboard (https)
-
metrics-server (https)
-
kubernetes-client-linux-amd64.tar.gz
kubernetes-server-linux-amd64.tar.gz
vagrant up
vagrant ssh node-01
使用 CA 认证:
kubectl --server=https://127.0.0.1:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt \
--client-certificate=/etc/kubernetes/ssl/kubectl.crt \
--client-key=/etc/kubernetes/ssl/kubectl.key get node
使用用户名和口令认证:
kubectl --server=https://127.0.0.1:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt \
--username=admin --password=admin get node
curl --cacert /etc/kubernetes/ssl/ca.crt -u "admin:admin" https://127.0.0.1:6443/version
https://<ClusterIP>:443
https://127.0.0.1:30443
https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/