k8s学习 — (运维)第十章 k8s 集群监控_kubernetes 应用,服务验活监控(1)

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

删除 pod

kubectl delete pods <pod name>

查看 pod 状态

kubectl get pods

重新访问 ui 界面

2.1.5 系统时间同步

查看系统时间

date

同步网络时间

ntpdate cn.pool.ntp.org

2.1.6 监控 k8s 集群
# 往 prometheus-config.yml 中追加如下配置
      - job\_name: 'kubernetes-kubelet'
        scheme: https
        tls\_config:
          ca\_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer\_token\_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes\_sd\_configs:
        - role: node
        relabel\_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - target\_label: __address__
          replacement: kubernetes.default.svc:443
        - source\_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target\_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics

升级资源

kubectl apply -f prometheus-config.yml

重新构建应用

kubectl delete pods <pod name>

利用指标获取当前节点中 pod 的启动时间

kubelet_pod_start_latency_microseconds{quantile="0.99"}

计算平均时间

kubelet_pod_start_latency_microseconds_sum / kubelet_pod_start_latency_microseconds_count

2.1.6.1 从 kubelet 获取节点容器资源使用情况
# 修改配置文件,增加如下内容,并更新服务
        - job\_name: 'kubernetes-cadvisor'
          scheme: https
          tls\_config:
            ca\_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          bearer\_token\_file: /var/run/secrets/kubernetes.io/serviceaccount/token
          kubernetes\_sd\_configs:
          - role: node
          relabel\_configs:
          - target\_label: __address__
            replacement: kubernetes.default.svc:443
          - source\_labels: [__meta_kubernetes_node_name]
            regex: (.+)
            target\_label: __metrics_path__
            replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
          - action: labelmap
            regex: __meta_kubernetes_node_label_(.+)

2.1.6.2 Exporter 监控资源使用情况
# 创建 node-exporter-daemonset.yml 文件
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '9100'
        prometheus.io/path: 'metrics'
      labels:
        app: node-exporter
      name: node-exporter
    spec:
      containers:
      - image: prom/node-exporter
        imagePullPolicy: IfNotPresent
        name: node-exporter
        ports:
        - containerPort: 9100
          hostPort: 9100
          name: scrape
      hostNetwork: true
      hostPID: true

创建 daemonset

kubectl create -f node-exporter-daemonset.yml

查看 daemonset 运行状态

kubectl get daemonsets -l app=node-exporter

查看 pod 状态

kubectl get pods -l app=node-exporter

# 修改配置文件,增加监控采集任务
      - job\_name: 'kubernetes-pods'
        kubernetes\_sd\_configs:
        - role: pod
        relabel\_configs:
        - source\_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source\_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
          action: replace
          target\_label: __metrics_path__
          regex: (.+)
        - source\_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
          target\_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source\_labels: [__meta_kubernetes_namespace]
          action: replace
          target\_label: kubernetes_namespace
        - source\_labels: [__meta_kubernetes_pod_name]
          action: replace
          target\_label: kubernetes_pod_name

# 通过监控 apiserver 来监控所有对应的入口请求,增加 api-server 监控配置
      - job\_name: 'kubernetes-apiservers'
        kubernetes\_sd\_configs:
        - role: endpoints
        scheme: https
        tls\_config:
          ca\_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer\_token\_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel\_configs:
        - source\_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: default;kubernetes;https
        - target\_label: __address__
          replacement: kubernetes.default.svc:443

2.1.6.3 对 Ingress 和 Service 进行网络探测
# 创建 blackbox-exporter.yaml 进行网络探测
apiVersion: v1
kind: Service
metadata:
  labels:
    app: blackbox-exporter
  name: blackbox-exporter
spec:
  ports:
  - name: blackbox
    port: 9115
    protocol: TCP
  selector:
    app: blackbox-exporter
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: blackbox-exporter
  name: blackbox-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blackbox-exporter
  template:
    metadata:
      labels:
        app: blackbox-exporter
    spec:
      containers:
      - image: prom/blackbox-exporter
        imagePullPolicy: IfNotPresent
        name: blackbox-exporter

创建资源对象

kubectl -f blackbox-exporter.yaml

# 配置监控采集所有 service/ingress 信息,加入配置到配置文件
    - job\_name: 'kubernetes-services'
      metrics\_path: /probe
      params:
        module: [http_2xx]
      kubernetes\_sd\_configs:
      - role: service
      relabel\_configs:
      - source\_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
        action: keep
        regex: true
      - source\_labels: [__address__]
        target\_label: __param_target
      - target\_label: __address__
        replacement: blackbox-exporter.default.svc.cluster.local:9115
      - source\_labels: [__param_target]
        target\_label: instance
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source\_labels: [__meta_kubernetes_namespace]
        target\_label: kubernetes_namespace
      - source\_labels: [__meta_kubernetes_service_name]
        target\_label: kubernetes_name

      - job\_name: 'kubernetes-ingresses'
        metrics\_path: /probe
        params:
          module: [http_2xx]
        kubernetes\_sd\_configs:
        - role: ingress
        relabel\_configs:
        - source\_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
          action: keep
          regex: true
        - source\_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
          regex: (.+);(.+);(.+)
          replacement: ${1}://${2}${3}
          target\_label: __param_target
        - target\_label: __address__
          replacement: blackbox-exporter.default.svc.cluster.local:9115
        - source\_labels: [__param_target]
          target\_label: instance
        - action: labelmap
          regex: __meta_kubernetes_ingress_label_(.+)
        - source\_labels: [__meta_kubernetes_namespace]
          target\_label: kubernetes_namespace
        - source\_labels: [__meta_kubernetes_ingress_name]
          target\_label: kubernetes_name

2.1.7 Grafana 可视化

Grafana 是一个通用的可视化工具。‘通用’意味着 Grafana 不仅仅适用于展示 Prometheus 下的监控数据,也同样适用于一些其他的数据可视化需求。在开始使用Grafana之前,我们首先需要明确一些 Grafana下的基本概念,以帮助用户能够快速理解Grafana。

2.1.7.1 基本概念

数据源(Data Source)
对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作。


仪表盘(Dashboard)
官方 Dashboard 模板

通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在Grafana中,我们通过Dashboard来组织和管理我们的数据可视化图表:


组织和用户
作为一个通用可视化工具,Grafana除了提供灵活的可视化定制能力以外,还提供了面向企业的组织级管理能力。在Grafana中Dashboard是属于一个Organization(组织),通过Organization,可以在更大规模上使用Grafana,例如对于一个企业而言,我们可以创建多个Organization,其中**User(用户)**可以属于一个或多个不同的Organization。 并且在不同的Organization下,可以为User赋予不同的权限。 从而可以有效的根据企业的组织架构定义整个管理模型。

2.1.7.2 集成 Grafana

部署 Grafana

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana-core
  namespace: kube-system
  labels:
    app: grafana
    component: core
spec:
  selector:
    matchLabels:
      app: grafana
  replicas: 1
  template:
    metadata:
      labels:
        app: grafana
        component: core
    spec:
      containers:
      - image: grafana/grafana:6.5.3
        name: grafana-core
        imagePullPolicy: IfNotPresent
        env:
          # The following env variables set up basic auth twith the default admin user and admin password.
          - name: GF_AUTH_BASIC_ENABLED
            value: "true"
          - name: GF_AUTH_ANONYMOUS_ENABLED
            value: "false"
          # - name: GF\_AUTH\_ANONYMOUS\_ORG\_ROLE
          # value: Admin
          # does not really work, because of template variables in exported dashboards:
          # - name: GF\_DASHBOARDS\_JSON\_ENABLED
          # value: "true"
        readinessProbe:
          httpGet:
            path: /login
            port: 3000
          # initialDelaySeconds: 30
          # timeoutSeconds: 1
        volumeMounts:
        - name: grafana-persistent-storage
          mountPath: /var
      volumes:
      - name: grafana-persistent-storage
        hostPath:
          path: /data/devops/grafana
          type: Directory


服务发现

apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: kube-system
  labels:
    app: grafana
    component: core
spec:
  type: NodePort
  ports:
    - port: 3000
      nodePort: 30011
  selector:
    app: grafana
    component: core


配置 Grafana 面板
添加 Prometheus 数据源

下载 k8s 面板,导入该面板

2.2 kube-prometheus

2.2.1 替换国内镜像
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheusOperator-deployment.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheus-prometheus.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' alertmanager-alertmanager.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' kubeStateMetrics-deployment.yaml
sed -i 's/k8s.gcr.io/lank8s.cn/g' kubeStateMetrics-deployment.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' nodeExporter-daemonset.yaml
sed -i 's/quay.io/quay.mirrors.ustc.edu.cn/g' prometheusAdapter-deployment.yaml
sed -i 's/k8s.gcr.io/lank8s.cn/g' prometheusAdapter-deployment.yaml

# 查看是否还有国外镜像
grep "image: " * -r

2.2.2 修改访问入口

分别修改 prometheus、alertmanager、grafana 中的 spec.type 为 NodePort 方便测试访问。

2.2.3 安装
kubectl apply --server-side -f manifests/setup
kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
kubectl apply -f manifests/

2.2.4 配置 Ingress
# 通过域名访问(没有域名可以在主机配置 hosts)
192.168.113.121 grafana.wolfcode.cn
192.168.113.121 prometheus.wolfcode.cn
192.168.113.121 alertmanager.wolfcode.cn

# 创建 prometheus-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: monitoring
  name: prometheus-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: grafana.wolfcode.cn  # 访问 Grafana 域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: grafana
            port:
              number: 3000
  - host: prometheus.wolfcode.cn  # 访问 Prometheus 域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: prometheus-k8s 
            port:
              number: 9090
  - host: alertmanager.wolfcode.cn  # 访问 alertmanager 域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: alertmanager-main
            port:
              number: 9093

创建 ingress

kubectl apply -f prometheus-ingress.yaml

2.2.5 卸载

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

 name: alertmanager-main
        port:
          number: 9093

创建 ingress



kubectl apply -f prometheus-ingress.yaml


#### 2.2.5 卸载





### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

[外链图片转存中...(img-FCDB8CSa-1714850759443)]

给大家整理的电子书资料:

  

[外链图片转存中...(img-aJCyfcFV-1714850759443)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值