K8S笔记
k8s学习k8s功能
- k8s图谱
- k8s功能
- k8s架构
4. k8s架构部署
- 服务器准备
kubeadm 安装 kubernetes 集群要求最少2核,操作系统采用 CentOS-7.6.1810,建议采用 7.6.1810 及以上的版本
建议实验环境配置如下:4核心,8GB内存,100G硬盘空间(50G系统盘,/var/lib/docker 50G,50G用于 Ceph-RBD )
服务器 IP 地址及主机名规划如下:
master1, worker1, worker2 既是 master1 同时也是 node 节点
IP | Role | CPU | 内存 | 数据盘 |
---|---|---|---|---|
192.168.47.128 | master1 | 2 | 2G | 100G |
192.168.47.129 | worker1 | 2 | 2G | 100G |
192.168.47.130 | worker2 | 2 | 2G | 100G |
2. 用到的组建版本预览
软件 | 版本 | 发布日期 |
---|---|---|
kubernetes | v1.22.4 | 2021 |
docker-ce | 20.10.10 | 2021 |
etcd | 3.5.0-0 | 2021-06-16 |
coredns | v1.8.4 | 2021-05-28 |
calico | v3.21.0 | 2021-07-31 |
dashboard | v2.3.1 | 2021-06-16 |
ingress-nginx | v1.0.0 | 2021-08-24 |
metrics-server | v0.5.0 | 2021-05-28 |
prometheus | v2.26.0 | 2021-03-31 |
grafana | 7.5.4 | 2021-04-14 |
istio | 1.11.1 | 2021-08-25 |
3. 环境搭建 安装好vmware软件 构建虚拟机装好centos7.8系统
4. 安装之前需要对环境参数进行配置
4.1 关闭 selinux 和防火墙
关闭防火墙
systemctl stop firewalld // 关闭服务
systemctl disable firewalld //关闭开机启动服务
firewall-cmd --state//测试
关闭 selinux 重启
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config // 修改
getenforce // 测试
4.2 主机名
# master1
hostnamectl set-hostname master1
# worker1
hostnamectl set-hostname worker1
# worker2
hostnamectl set-hostname worker2
4.2 主机IP和域名配置
查询IP和子网掩码:ip a s
查询DNS1: cat /etc/resolv.conf
查询默认网关: route -n (可能要安装route命令工具 yum -y install net-tools)
配置IP:vi /etc/sysconfig/network-scripts/ifcfg-ens33
# master
...
BOOTPROTO=none
IPADDR=192.168.47.128
NETMASK=255.255.255.0
GATEWAY=192.168.47.2
DNS1=119.29.29.29
配置域名:vi /etc/hosts
192.168.47.128 master1
192.168.47.129 worker1
192.168.47.130 worker2
4.3 配置时间同步定时任务(同步阿里云时间服务器)
yum -y install ntpdate
crontab -e 0 */5 * ** netdate ntp.aliyun.com
4.4 禁用 swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
free -m // 测试是否分配虚拟内存
4.5 配置三台机器免密钥登陆(每台机器都有全部的公钥)
ssh-keygen -t rsa -b 2048 -P '' -f ~/.ssh/id_rsa
ssh-copy-id k8s-m1
ssh-copy-id k8s-m2
ssh-copy-id k8s-m3
4.6 配置内核参数 网桥过滤功能 将桥接的IPv4流量传递到iptables的链
4.7 部署ipvs 效率要比iptables高
安装ipset、ipvsadm
yum -y install ipset ipvsadm
运行脚本
#!/bin/bash
varr ='ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4'
for mod in varr
do
modprobe $mod
done
4.8 ssh 连接优化
sed -ri 's/^#(UseDNS )yes/\1no/' /etc/ssh/sshd_config
5. 使用kubeadm来部署
- 安装docker-ce 看runoot手册(一般使用清华源)
安装完后查看docker启动配置
vi /usr/lib/systemd/system/docker.service
删掉ExecStart=/usr/bin/dockerd后面有-H(包括)的数据
配置daemon.json
配置docker镜像加速以及日志相关配置
Kubernetes官方推荐使用cgroup driver
为systemd
mkdir /etc/docker
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://mciwm180.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn/",
"https://registry.docker-cn.com"
],
"log-driver": "json-file",
"log-opts": {
"max-file": "10",
"max-size": "100m"
},
"storage-driver": "overlay2",
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl enable --now docker
2.安装 kubeadm、kubelet、kubectl(这里安装之前最好也配置阿里云的镜像库,)
添加k8s的阿里源(这里可以不配置,如果安装不了再配置):
[root@master01 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
之后安装:
yum -y install kubeadm-1.22.4 kubectl-1.22.4 kubelet-1.22.4
配置 kubelet
指定使用 cgroup driver
为 systemd
tee /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
设置 kubelet
为开机启动
systemctl daemon-reload
systemctl enable kubelet
3. 拉取k8s的镜像,这里需要你有阿里云的账号,先登录,然后才能拉取(同时修改docker镜像加速器 为阿里云)
首先查看 需要的k8s镜像信息
kubeadm config images list
由于k8s默认是谷歌,国内网访问不了,所以我们用阿里
我们拉取k8s镜像时 直接改为阿里的镜像地址
拉取完成之后 再修改镜像的tag使其与kubeadm config images list结果名称保持一致
4. k8s初始化
再master1上初始化
kubeadm init --kubernetes-version=v1.22.4 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.47.128
修改拷贝文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置安装calico(配置pod-network)
网络插件有:flannel
、calico
、canal
、kube-router
、weave net
等,这里使用calico
网络插件
下载yaml
curl https://docs.projectcalico.org/manifests/calico.yaml -O
修改yaml文件 添加并修改 eth->ens
在执行calico文件执之前 最好手动下载镜像 配置好阿里云加速器并使用命令行查询calico需要的镜像:
最后执行文件 安装:
kubectl apply -f calico.yaml
初始化最后 子节点加入- 分别再worker1、worker2执行
kubeadm join 192.168.47.128:6443 --token e2qxrq.8ijfcx3muenl7sh7 \
--discovery-token-ca-cert-hash sha256:c530e95aa852fd21fd91b2b975f83d355fe5fa40b7eb8d32cc3f684c3d081b81
5. 测试查看 集群状态
kubectl get nodes
kubectl get cs
kubectl get cluster-info
kubectl get pods -n kube-system
创建一个 deployment 和 service 进行测试
kubectl create deployment nginx --image=nginx:alpine
kubectl expose deployment/nginx --name=nginx-svc --port=80 --type=NodePort
kubectl get po
Copy
输出如下
NAME READY STATUS RESTARTS AGE
nginx-565785f75c-rr8vh 0/1 Pending 0 88s
Copy
查看描述
kubectl describe po nginx-565785f75c-rr8vh
0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.
Copy
因为 master 节点同时当 node 节点用,需要把 master 标签和污点去掉,默认 master 无法调度
去除 master 标签
kubectl label node k8s-m1 node-role.kubernetes.io/master-
kubectl label node k8s-m2 node-role.kubernetes.io/master-
kubectl label node k8s-m3 node-role.kubernetes.io/master-
Copy
去除污点
kubectl taint node k8s-m1 node-role.kubernetes.io/master:NoSchedule-
kubectl taint node k8s-m2 node-role.kubernetes.io/master:NoSchedule-
kubectl taint node k8s-m3 node-role.kubernetes.io/master:NoSchedule-
Copy
再次检查,已经正常调度到 master 节点了
kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-565785f75c-rr8vh 0/1 ContainerCreating 0 3m55s
Copy
查看 pod 和 service
kubectl get svc -l app=nginx
Copy
输出如下
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc NodePort 10.110.108.4 <none> 80:31026/TCP 4m34s
Copy
访问测试
curl 10.110.108.4
Copy
输出如下
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
看到上面的,说明已经正常使用 ipvs 模式了。
5. kubectl 的运用
6. 使用yaml文件来管理k8s集群资源管理
7. namespace学习(c r d)
8. pod学习
9. Controller学习
10. Service学习
11. k8s部署完成之后 需要安装核心组件 ingress/metrics-server/dashboard/
部署 EFK 日志服务/prometheus+granfa 这其中ingress是
11-1 ingress裸机安装
1.部署metallb
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kub
2. 创建 namespace
这里要注意 raw.githubusercontent.com隔段时间就会被污染,所以需要查询新的ip在hosts中配置好 这实在是令人骂人的问题 域名解析地址:www.ipaddress.com
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml
3. 部署 metallb
这里要多试几次才行,注意一下哦
wget https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml
# 测试发现中科大的并没有加速效果
#sed -i 's@quay.io@quay.mirrors.ustc.edu.cn@g' metallb.yaml
kubectl apply -f metallb.yaml
4. 支持二层,BGP 等方式,这里简单的使用二层配置 为 matallb 创建 cm
tee metallb-config.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.147.150-192.168.47.250
EOF
kubectl apply -f metallb-config.yaml
kubectl get po -n metallb-system
5. 部署 ingress-nginx
curl -o ingress-nginx.yaml \
https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml
sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.0.0\(.*\)@willdockerhub/ingress-nginx-controller:v1.0.0@' ingress-nginx.yaml
sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0\(.*\)$@hzde0128/kube-webhook-certgen:v1.0@' \
ingress-nginx.yaml
kubectl apply -f ingress-nginx.yaml
kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create--1-k9b75 0/1 Completed 0 14s
ingress-nginx-admission-patch--1-jsrsj 0/1 Completed 0 14s
ingress-nginx-controller-79887d48bf-txxvd 0/1 Running 0 15s
// 如果出现问题可以插叙日志
kubectl describe pod ingress-nginx-controller-6b64bc6f47-294jr --namespace=ingress-nginx
6.部署了 Metallb
的可以将 NodePort
修改为 LoadBalancer
kubectl patch svc -n ingress-nginx ingress-nginx-controller -p '{"spec":{"type": "LoadBalancer"}}'
service/ingress-nginx-controller patched
检查安装情况
kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create--1-k9b75 0/1 Completed 0 72s
ingress-nginx-admission-patch--1-jsrsj 0/1 Completed 0 72s
ingress-nginx-controller-79887d48bf-txxvd 0/1 Running 1 (2s ago) 73s
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.111.114.169 192.168.100.101 80:32236/TCP,443:30083/TCP 84s
ingress-nginx-controller-admission ClusterIP 10.96.117.247 <none> 443/TCP 85s
检查版本安装情况
POD_NAMESPACE=ingress-nginx
POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=controller -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: v1.0.0
Build: 041eb167c7bfccb1d1653f194924b0c5fd885e10
Repository: https://github.com/kubernetes/ingress-nginx
nginx version: nginx/1.20.1
-------------------------------------------------------------------------------
后端 ingress
代理应用示例
创建 myapp 应用
kubectl apply -f - <<EOF
---
kind: Service
apiVersion: v1
metadata:
name: myapp
spec:
selector:
app: myapp
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx:alpine
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
EOF
service/myapp created
deployment.apps/myapp created
Copy
创建 ingress
文件
kubectl apply -f - <<EOF
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-myapp
annotations:
# 指定 Ingress Controller 的类型
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myapp.hzde.com
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
EOF
ingress.networking.k8s.io/test-myapp created
Copy
添加 hosts 并尝试访问
查看 ingress 对应节点的端口
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.101.207.65 <none> 80:30348/TCP,443:30473/TCP 9m9s
ingress-nginx-controller-admission ClusterIP 10.96.36.183 <none> 443/TCP 9m9s
Copy
echo '192.168.100.10 myapp.hzde.com' >> /etc/hosts
curl myapp.hzde.com:30348
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Copy
第二种安装方式,直接使用hostNetwork
curl -o ingress-nginx.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0-beta.3/deploy/static/provider/baremetal/deploy.yaml
sed -i 's@k8s.gcr.io/ingress-nginx/controller@willdockerhub/ingress-nginx-controller@' ingress-nginx.yaml
sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen@hzde0128/kube-webhook-certgen@' ingress-nginx.yaml
sed -i 'N;315a\ \ \ \ \ \ hostNetwork: true' ingress-nginx.yaml
kubectl apply -f ingress-nginx.yaml
Copy
kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-5dfbcfd5d9-k2fjc 1/1 Running 0 33s 192.168.100.10 k8s-m1 <none> <none>
Copy
不修改hosts访问myapp.hzde.com
在头部指定host
curl 192.168.100.10 -H "host:myapp.hzde.com"
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
ingress HTTPS 访问
参考文档TLS/HTTPS
创建自签证书文件
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginx/O=nginx"
Generating a 2048 bit RSA private key
......................................................+++
..........................+++
writing new private key to 'tls.key'
-----
Copy
创建 secret
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
secret/tls-secret created
Copy
创建 tls ingress
kubectl apply -f - <<EOF
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-myapp
annotations:
# 指定 Ingress Controller 的类型
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- myapp2.hzde.com
secretName: tls-secret
rules:
- host: myapp2.hzde.com
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
EOF
ingress.networking.k8s.io/tls-myapp created
Copy
测试
echo '192.168.100.10 myapp2.hzde.com' >> /etc/hosts
curl -sSk https://myapp2.hzde.com:30473 // 注意这个端口是443 对应的端口
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
11-2 部署 prometheus+granfa 监控服务
1. 下载 kube-prometheus(域名污染的话 域名解析后 再配置吧)
curl -o kube-prometheus_v0.9.0.tar.gz \
https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.9.0.tar.gz
tar xf kube-prometheus_v0.9.0.tar.gz
cd kube-prometheus-0.9.0
2.修改 yaml 清单文件
修改 grafana-service
cp manifests/grafana-service.yaml{,.ori}
sed -i '/spec:/a\ type: NodePort' manifests/grafana-service.yaml
sed -i '/targetPort:/a\ nodePort: 30200' manifests/grafana-service.yaml
查看修改
diff manifests/grafana-service.yaml.ori manifests/grafana-service.yaml
11a12
> type: NodePort
15a17
> nodePort: 30200
修改promethesu-service
cp manifests/prometheus-service.yaml{,.ori}
sed -i '/spec:/a\ type: NodePort' manifests/prometheus-service.yaml
sed -i '/targetPort:/a\ nodePort: 30100' manifests/prometheus-service.yaml
查看修改
diff manifests/prometheus-service.yaml.ori manifests/prometheus-service.yaml
12a13
> type: NodePort
16a18
> nodePort: 30100
3. 修改镜像库
sed -i '/image:/s@k8s.gcr.io/kube-state-metrics@willdockerhub@' $(grep -l image: manifests/*.yaml)
4. 部署 CRD
kubectl apply -f manifests/setup
namespace/monitoring created
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created
clusterrole.rbac.authorization.k8s.io/prometheus-operator created
clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created
deployment.apps/prometheus-operator created
service/prometheus-operator created
serviceaccount/prometheus-operator created
5. 部署 kube-prometheus
kubectl apply -f manifests
输入如下:
alertmanager.monitoring.coreos.com/main created
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/alertmanager-main created
prometheusrule.monitoring.coreos.com/alertmanager-main-rules created
secret/alertmanager-main created
service/alertmanager-main created
serviceaccount/alertmanager-main created
servicemonitor.monitoring.coreos.com/alertmanager created
clusterrole.rbac.authorization.k8s.io/blackbox-exporter created
clusterrolebinding.rbac.authorization.k8s.io/blackbox-exporter created
configmap/blackbox-exporter-configuration created
deployment.apps/blackbox-exporter created
service/blackbox-exporter created
serviceaccount/blackbox-exporter created
servicemonitor.monitoring.coreos.com/blackbox-exporter created
secret/grafana-datasources created
configmap/grafana-dashboard-apiserver created
configmap/grafana-dashboard-cluster-total created
configmap/grafana-dashboard-controller-manager created
configmap/grafana-dashboard-k8s-resources-cluster created
configmap/grafana-dashboard-k8s-resources-namespace created
configmap/grafana-dashboard-k8s-resources-node created
configmap/grafana-dashboard-k8s-resources-pod created
configmap/grafana-dashboard-k8s-resources-workload created
configmap/grafana-dashboard-k8s-resources-workloads-namespace created
configmap/grafana-dashboard-kubelet created
configmap/grafana-dashboard-namespace-by-pod created
configmap/grafana-dashboard-namespace-by-workload created
configmap/grafana-dashboard-node-cluster-rsrc-use created
configmap/grafana-dashboard-node-rsrc-use created
configmap/grafana-dashboard-nodes created
configmap/grafana-dashboard-persistentvolumesusage created
configmap/grafana-dashboard-pod-total created
configmap/grafana-dashboard-prometheus-remote-write created
configmap/grafana-dashboard-prometheus created
configmap/grafana-dashboard-proxy created
configmap/grafana-dashboard-scheduler created
configmap/grafana-dashboard-statefulset created
configmap/grafana-dashboard-workload-total created
configmap/grafana-dashboards created
Warning: spec.template.spec.nodeSelector[beta.kubernetes.io/os]: deprecated since v1.14; use "kubernetes.io/os" instead
deployment.apps/grafana created
service/grafana created
serviceaccount/grafana created
servicemonitor.monitoring.coreos.com/grafana created
prometheusrule.monitoring.coreos.com/kube-prometheus-rules created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
deployment.apps/kube-state-metrics created
prometheusrule.monitoring.coreos.com/kube-state-metrics-rules created
service/kube-state-metrics created
serviceaccount/kube-state-metrics created
servicemonitor.monitoring.coreos.com/kube-state-metrics created
prometheusrule.monitoring.coreos.com/kubernetes-monitoring-rules created
servicemonitor.monitoring.coreos.com/kube-apiserver created
servicemonitor.monitoring.coreos.com/coredns created
servicemonitor.monitoring.coreos.com/kube-controller-manager created
servicemonitor.monitoring.coreos.com/kube-scheduler created
servicemonitor.monitoring.coreos.com/kubelet created
clusterrole.rbac.authorization.k8s.io/node-exporter created
clusterrolebinding.rbac.authorization.k8s.io/node-exporter created
daemonset.apps/node-exporter created
prometheusrule.monitoring.coreos.com/node-exporter-rules created
service/node-exporter created
serviceaccount/node-exporter created
servicemonitor.monitoring.coreos.com/node-exporter created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io configured
clusterrole.rbac.authorization.k8s.io/prometheus-adapter created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus-adapter created
clusterrolebinding.rbac.authorization.k8s.io/resource-metrics:system:auth-delegator created
clusterrole.rbac.authorization.k8s.io/resource-metrics-server-resources created
configmap/adapter-config created
deployment.apps/prometheus-adapter created
rolebinding.rbac.authorization.k8s.io/resource-metrics-auth-reader created
service/prometheus-adapter created
serviceaccount/prometheus-adapter created
servicemonitor.monitoring.coreos.com/prometheus-adapter created
clusterrole.rbac.authorization.k8s.io/prometheus-k8s created
clusterrolebinding.rbac.authorization.k8s.io/prometheus-k8s created
prometheusrule.monitoring.coreos.com/prometheus-operator-rules created
servicemonitor.monitoring.coreos.com/prometheus-operator created
poddisruptionbudget.policy/prometheus-k8s created
prometheus.monitoring.coreos.com/k8s created
prometheusrule.monitoring.coreos.com/prometheus-k8s-prometheus-rules created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s-config created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s-config created
role.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s created
service/prometheus-k8s created
serviceaccount/prometheus-k8s created
servicemonitor.monitoring.coreos.com/prometheus-k8s created
6.检查部署情况
这里有时会发现好多pod不健康,可以查看日志,发现好多镜像pull出问题,我们改为手动拉取就可以了
有些镜像实在下载不下来 就去阿里云上找找 总有办法的 唉唉唉唉。。。。。。。。。。。。
kubectl get po -n monitoring
输出如下
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 9m2s
alertmanager-main-1 2/2 Running 0 9m2s
alertmanager-main-2 2/2 Running 0 9m2s
blackbox-exporter-567dc8c7d4-ts5rr 3/3 Running 0 11m
grafana-6dd5b5f65-vxld6 1/1 Running 0 11m
kube-state-metrics-69b5f46bb9-bjjch 3/3 Running 0 11m
node-exporter-7rpts 2/2 Running 0 11m
node-exporter-f9m77 2/2 Running 0 11m
node-exporter-xlz2t 2/2 Running 0 11m
prometheus-adapter-59df95d9f5-kglql 1/1 Running 0 11m
prometheus-adapter-59df95d9f5-n99fb 1/1 Running 0 11m
prometheus-k8s-0 2/2 Running 1 (9m ago) 9m2s
prometheus-k8s-1 2/2 Running 1 (8m59s ago) 9m2s
prometheus-operator-7775c66ccf-npmxw 2/2 Running 0 11m
kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-main ClusterIP 10.109.167.164 <none> 9093/TCP 12m
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 9m46s
blackbox-exporter ClusterIP 10.109.154.125 <none> 9115/TCP,19115/TCP 12m
grafana NodePort 10.99.112.125 <none> 3000:30200/TCP 12m
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 11m
node-exporter ClusterIP None <none> 9100/TCP 11m
prometheus-adapter ClusterIP 10.107.102.121 <none> 443/TCP 11m
prometheus-k8s NodePort 10.103.179.200 <none> 9090:30100/TCP 11m
prometheus-operated ClusterIP None <none> 9090/TCP 9m46s
prometheus-operator ClusterIP None <none> 8443/TCP 12m
如果报错的话 而且无法弄时,直接删除干净, 需要删除monitoring 操作如下
kubectl get namespace monitoring -o json > tmp.json
将spec里的内容删除干净,保存退出:
然后新开一个窗口运行kubectl proxy跑一个API代理在本地的8081端口
# kubectl proxy --port=8081
最后执行命令:
# curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8081/api/v1/namespaces/monitoring/finalize
然后再看一下命名空间,发现monitoring已经被删除了。
然后重启虚拟机 或者看看 分配内存是不是够用 reboot 结果OK
之后重新来安装 kube-prometheus
另外还有个问题 就是kube-prometheus 你下载的是kube-prometheus-0.9.0
在部署 kube-prometheus的时候 需要的镜像包为
k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.0
这个镜像你是找不到的 除非下载git源码 自己打镜像 唉唉唉 怎么办呢 直接下v0.8.4版本 然后再改一下 tag
docker pull directxman12/k8s-prometheus-adapter:v0.8.4
docker tag 9d7c9987f24e k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.0
做完再检查 完美 哈哈哈哈
7. 访问浏览器
打开浏览器,输入:http://192.168.47.128:30200/访问grafana admin lovetcj520
默认用户名和密码为:admin
,admin 要修改密码
11-3. 部署 EFK 日志服务(用户WEB端日志查看)
1.
更多推荐
所有评论(0)