kubernetes+docker监控之简介

本文介绍了Docker和Kubernetes的监控方案,包括Cadvisor、Heapster与InfluxDB、Grafana的集成使用,详细解析了各组件的功能及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes+docker监控

   Docker的监控原则:根据docker官方声明,一个容器不建议跑多个进程,所以不建议在容器中使用agent进行监控(zabbix等),agent应该运行在宿主机,通过cgroup或是docker api获取监控数据。

 

1、监控分类介绍:

 

①、自行开发:

  通过调用docker的api接口,获取数据、处理、展示,这里不做介绍。

  例如:

   1)、爱奇艺参照cadvisor开发的dadvisor,数据写入graphite,等同于cadvisor+influxdb,爱奇艺的dadvisor并没有开源

②、Docker——cadvisor:

    Google的 cAdvisor 是另一个知名的开源容器监控工具。

    只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或REST服务访问当前节点和容器的性能数据(CPU、内存、网络、磁盘、文件系统等等),非常详细。

    默认cAdvisor是将数据缓存在内存中,数据展示能力有限;它也提供不同的持久化存储后端支持,可以将监控数据保存、汇总到Google BigQuery、InfluxDB或者Redis之上。

    新的Kubernetes版本里,cadvior功能已经被集成到了kubelet组件中

    需要注意的是,cadvisor的web界面,只能看到单前物理机上容器的信息,其他机器是需要访问对应ip的url,数量少时,很有效果,当数量多时,比较麻烦,所以需要把cadvisor的数据进行汇总、展示,就看【cadvisor+influxdb+grafana

 

③、Docker——Cadvisor+InfluxDB+Grafana:

    Cadvisor   :将数据,写入InfluxDB

    InfluxDB   :时序数据库,提供数据的存储,存储在指定的目录下

    Grafana   :提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展示

此组合仅是监控Docker,不含kubernetes

 

④、Kubernetes——Heapster+InfluxDB+Grafana:

    Heapster:在k8s集群中获取metrics和事件数据写入InfluxDB,heapster收集的数据比cadvisor多,却全,而且存储在influxdb的也少。

    InfluxDB:时序数据库,提供数据的存储,存储在指定的目录下。

    Grafana:提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展示

 

2、Cadvisor+Heapster+InfluxDB+Grafana的注意事项:

①、Cadvisor注意事项:

    Cadvisor,只需要在kubelet命令中,启用Cadvisor,和配置相关信息,即可。

    不需要作为pod或是命令启动

--cadvisor-port=4194 --storage-driver-db="cadvisor" --storage-driver-host="localhost:8086"

 

②、InfluxDB注意事项:

1)、Influxdb必须是0.8.8版本的,否则,Cadvisor的日志会出现:

E0704 14:29:14.163238 05655 memory.go:94] failed to write stats to influxDb - Server returned (404): 404 page not found

http://blog.youkuaiyun.com/llqkk/article/details/50555442

    说是Cadvisor不支持Influxdb的0.9版本,所以这里使用0.8.8的,【ok了】

 

不同版本的Cadvisor和Influxdb对照表(测试ok):

Cadvisor版本

Influxdb版本

0.7.1

0.8.8

0.23.2

0.9.6(以上)

Cadvisor和Influxdb的版本不对应,就可以在Cadvisor看到404的报错

2)、influxdb的数据,需要定期清理,单台Cadvisor,半天的数据就有600M

#单位:【小时:h】【天:d】

#删除一小时内:

delete from /^stats.*/ where time > now() - 1h 

#删除一小时外:

delete from /^stats.*/ where time < now() - 1h

3)、关于influxdb可用性的问题,可以写脚本,定期检查是否有相关的数据库和表,没有就出现创建

#检查是否有某个库

curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=list+databases&pretty=true'

curl -G 'http://192.168.16.100:8086/db?u=root&p=root&q=show+databases&pretty=true'

#检查某库中的表【points部分】

curl -G 'http://192.168.16.100:8086/db/cadvisor/series?u=root&p=root&q=list+series&pretty=true'

#创建库:

库名:cadvisor

curl "http://www.perofu.com:8086/db?u=root&p=root" -d "{\"name\": \"cadvisor\"}"

③、Grafana注意事项:

    Grafana的数据检索,很需要花功夫,可以查看官网相关的语句,也可以直接借用其他人的模板

    Influxdb查询语句:

https://docs.influxdata.com/influxdb/v0.8/api/query_language/

 

④、Heapster注意事项:

    对于较大规模的k8s集群,heapster目前的cache方式会吃掉大量内存

    因为要定时获取整个集群的容器信息,信息存储在内存会成为问题,再加上heaspter要支持api获取临时metrics。

    如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache,并以standalone的方式独立出k8s平台, 建议一套K8s,只运行一套heapster容器(heapster1.0版本后内部分为event和metric两个进程)。

    heapster最大的好处是其抓取的监控数据可以按pod,container,namespace等方式分组

这样就能进行监控信息的隐私化,即每个k8s的用户只能看到自己的应用的资源使用情况。

    heapster收集的数据比cadvisor多,却全,而且存储在influxdb的也少,虽是Google的,但是作用却不尽相同

    Heapster容器单独启动时,会连接influxdb,并创建k8s数据库

heapster收集的数据metric的分类有两种,【grafana搜索时,要注意】

    1)、cumulative :聚合的是【累计值】,包括cpu使用时间、网络流入流出量,

    2)、gauge :聚合的是【瞬时值】,包括内存使用量

参考:https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md

 

描述

分类

cpu/limit

cpu预设值,yaml文件可设置

瞬时值

cpu/node_reservation

kube节点的cpu预设值,类似cpu/limit

瞬时值

cpu/node_utilization

cpu利用率

瞬时值

cpu/request

cpu请求资源,yaml文件可设置

瞬时值

cpu/usage

cpu使用

累计值

cpu/usage_rate

cpu使用速率

瞬时值

filesystem/limit

文件系统限制

瞬时值

filesystem/usage

文件系统使用

瞬时值

memory/limit

内存限制,yaml文件可设置

瞬时值

memory/major_page_faults

内存主分页错误

累计值

memory/major_page_faults_rate

内存主分页错误速率

瞬时值

memory/node_reservation

节点内存预设值

瞬时值

memory/node_utilization

节点内存使用率

瞬时值

memory/page_faults

内存分页错误

瞬时值

memory/page_faults_rate

内存分页错误速率

瞬时值

memory/request

内存申请,yaml文件可设置

瞬时值

memory/usage

内存使用

瞬时值

memory/working_set

内存工作使用

瞬时值

network/rx

网络接收总流量

累计值

network/rx_errors

网络接收错误数

不确定

network/rx_errors_rate

网络接收错误数速率

瞬时值

network/rx_rate

网络接收速率

瞬时值

network/tx

网络发送总流量

累计值

network/tx_errors

网络发送错误数

不确定

network/tx_errors_rate

网络发送错误数速率

瞬时值

network/tx_rate

网络发送速率

瞬时值

uptime

容器启动时间,毫秒

瞬时值

下篇,将带来【Docker监控——Cadvisor+InfluxDB+Grafana搭建过程】,敬请期待!

    著作权归perofu所有 ,严禁转载!!!

 

转载于:https://my.oschina.net/fufangchun/blog/714530

<think>我们参考了用户提供的引用内容,特别是引用[1]中提到了使用kubeadm安装k8s-1.30版本,以及containerd作为容器运行时。同时,引用[2]和[3]提到了使用KubeKey(kk)来安装KubernetesKubeSphere。用户的需求是部署最新版本的DockerKubernetesKubeSphere。 注意:在Kubernetes 1.24版本之后,官方不再直接支持Docker作为容器运行时,而是使用containerd。但是,用户要求部署最新版的Docker,这里需要明确:Docker可以独立于Kubernetes安装,而Kubernetes集群将使用containerd(Docker的底层运行时也是containerd,但Kubernetes不再通过Docker去调用containerd)。因此,我们可以分别安装Docker(用于非Kubernetes环境或开发)和Kubernetes(使用containerd)。 考虑到KubeSphere是一个运行在Kubernetes之上的容器平台,我们可以先部署Kubernetes集群,然后安装KubeSphere。 根据用户要求,我们分步骤进行: 1. 安装最新版Docker(可选,如果用户需要Docker作为本地开发环境,但Kubernetes集群将使用containerd) 2. 使用KubeKey(推荐)或kubeadm部署最新版Kubernetes集群(使用containerd作为容器运行时) 3. 在Kubernetes集群上安装最新版KubeSphere 但是,引用[1]中提到了使用kubeadm部署,而引用[2][3]提到使用KubeKey(kk)部署。KubeKey是KubeSphere社区推出的安装工具,可以同时安装KubernetesKubeSphere,并且支持一键安装,简化流程。 因此,我们推荐使用KubeKey来安装,因为它可以自动化完成KubernetesKubeSphere的安装,并且支持最新版本。 步骤概览: 一、准备工作(所有节点) - 配置静态IP - 关闭selinux - 配置主机名和hosts文件 - 配置SSH无密码登录(可选,但KubeKey需要节点间免密) - 关闭swap - 修改内核参数 - 关闭防火墙 - 配置时间同步 - 安装依赖包 二、使用KubeKey创建集群(同时安装KubernetesKubeSphere) 注意:由于用户要求最新版,我们将安装最新稳定版本的KubernetesKubeSphere。 详细步骤: 步骤1:准备环境(以最小化安装的CentOS 7或Ubuntu 20.04为例) 假设我们有三台机器: - k8s-master: 192.168.0.100 - k8s-node1: 192.168.0.101 - k8s-node2: 192.168.0.102 1.1 修改静态IP(根据实际网络环境配置,这里略过) 1.2 关闭selinux(CentOS) ```bash setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` 1.3 配置主机名(分别在每台机器上执行) ```bash # 在master上 hostnamectl set-hostname k8s-master # 在node1上 hostnamectl set-hostname k8s-node1 # 在node2上 hostnamectl set-hostname k8s-node2 ``` 1.4 配置hosts文件(所有节点) ```bash cat >> /etc/hosts << EOF 192.168.0.100 k8s-master 192.168.0.101 k8s-node1 192.168.0.102 k8s-node2 EOF ``` 1.5 配置SSH无密码登录(在master节点上生成密钥并分发到所有节点) ```bash ssh-keygen -t rsa # 一路回车 ssh-copy-id root@k8s-master ssh-copy-id root@k8s-node1 ssh-copy-id root@k8s-node2 ``` 1.6 关闭swap(所有节点) ```bash swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab ``` 1.7 修改内核参数(所有节点) ```bash cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置所需的sysctl参数,参数在重新启动后保持不变 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 应用sysctl参数而不重新启动 sudo sysctl --system ``` 1.8 关闭防火墙(所有节点) ```bash systemctl stop firewalld systemctl disable firewalld # CentOS # 如果是Ubuntu,使用ufw disable ``` 1.9 配置时间同步(所有节点) ```bash yum install -y ntpdate # CentOS ntpdate time.windows.com # 或者使用chrony # Ubuntu: apt install -y chrony ``` 1.10 配置阿里云的repo源(CentOS) ```bash # 备份原来的repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache ``` 步骤2:安装Docker(可选,如果需要在节点上使用Docker) 注意:Kubernetes集群将使用containerd,所以这里安装Docker只是为了在节点上使用Docker命令(比如构建镜像等),不是给Kubernetes用的。 安装最新版Docker(所有节点,如果不需要可跳过): ```bash # 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 安装依赖 sudo yum install -y yum-utils # 设置仓库 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 安装最新版Docker sudo yum install docker-ce docker-ce-cli containerd.io # 启动Docker sudo systemctl start docker sudo systemctl enable docker ``` 步骤3:下载KubeKey 从KubeSphere的GitHub Release页面下载最新版KubeKey。或者直接使用以下命令(在master节点执行): ```bash # 下载KubeKey curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.10 sh - # 赋予执行权限 chmod +x kk ``` 注意:这里使用v3.0.10版本,请根据实际情况选择最新版本。 步骤4:创建集群配置文件 使用KubeKey创建配置文件,指定安装KubernetesKubeSphere的版本(最新版): ```bash ./kk create config --with-kubernetes v1.30.0 --with-kubesphere v3.4.1 ``` 注意:这里我们指定了Kubernetes版本为v1.30.0(最新稳定版),KubeSphere为v3.4.1(最新稳定版)。请根据实际情况调整。 生成的配置文件为`config-sample.yaml`,我们需要修改它,配置节点信息。 修改`config-sample.yaml`,在`spec.hosts`中配置节点信息,在`roleGroups`中指定master和worker节点。 示例: ```yaml apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Cluster metadata: name: sample spec: hosts: - {name: k8s-master, address: 192.168.0.100, internalAddress: 192.168.0.100, user: root, password: "YourPassword"} - {name: k8s-node1, address: 192.168.0.101, internalAddress: 192.168.0.101, user: root, password: "YourPassword"} - {name: k8s-node2, address: 192.168.0.102, internalAddress: 192.168.0.102, user: root, password: "YourPassword"} roleGroups: etcd: - k8s-master control-plane: - k8s-master worker: - k8s-node1 - k8s-node2 controlPlaneEndpoint: domain: lb.kubesphere.local address: "" port: 6443 kubernetes: version: v1.30.0 imageRepo: kubesphere clusterName: cluster.local network: plugin: calico kubePodsCIDR: 10.233.64.0/18 kubeServiceCIDR: 10.233.0.0/18 registry: registryMirrors: [] insecureRegistries: [] addons: [] ``` 注意:如果使用SSH密钥登录,可以不用写密码,但需要确保已经配置了免密登录。 步骤5:使用KubeKey安装集群 ```bash ./kk create cluster -f config-sample.yaml ``` 安装过程可能需要一段时间,请耐心等待。 步骤6:验证安装 安装完成后,检查Kubernetes集群状态: ```bash kubectl get nodes ``` 检查KubeSphere的安装状态(KubeSphere会以pod的形式运行): ```bash kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f ``` 安装完成后,会输出访问KubeSphere控制台的地址和默认用户密码(默认用户为admin,密码为P@88w0rd)。 注意:如果需要开启KubeSphere的其他组件(如DevOps、监控等),可以参考引用[4]中的方法,通过修改ConfigMap来开启。 总结:我们使用KubeKey同时安装了KubernetesKubeSphere,其中Kubernetes使用containerd作为容器运行时。同时,我们在节点上单独安装了Docker(可选),以便在节点上使用Docker命令。 如果用户坚持在Kubernetes中使用Docker作为容器运行时,那么需要选择Kubernetes 1.23或更早版本(因为1.24移除了dockershim)。但最新版Kubernetes不支持,所以不推荐。 因此,我们按照上述步骤部署即可满足用户需求(部署最新版DockerKubernetesKubeSphere),其中Docker是独立安装的,而Kubernetes集群使用containerd。 相关问题: 1. 如何验证Kubernetes集群和KubeSphere是否安装成功? 2. 安装过程中遇到网络问题导致镜像拉取失败怎么办? 3. 如何开启KubeSphere的可插拔组件(如DevOps、监控等)?</think>### 部署最新版 DockerKubernetesKubeSphere 的完整指南 #### 一、环境准备(所有节点执行) 1. **配置静态 IP** 修改 `/etc/sysconfig/network-scripts/ifcfg-ens*` 文件: ```bash BOOTPROTO=static IPADDR=192.168.1.100 # 替换为实际IP NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 ``` 2. **关闭 SELinux** ```bash setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` 3. **配置主机名和 hosts** ```bash hostnamectl set-hostname k8s-master # 主节点 hostnamectl set-hostname k8s-node1 # 工作节点 echo "192.168.1.100 k8s-master" >> /etc/hosts echo "192.168.1.101 k8s-node1" >> /etc/hosts ``` 4. **关闭 swap** ```bash swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab ``` 5. **配置内核参数** ```bash cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system ``` 6. **配置时间同步** ```bash yum install chrony -y systemctl enable --now chronyd chronyc sources ``` --- #### 二、安装最新版 Docker ```bash # 添加Docker官方仓库 yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装最新版Docker yum install docker-ce docker-ce-cli containerd.io -y # 启动并设置开机自启 systemctl enable --now docker docker --version # 验证安装 ``` --- #### 三、安装 Kubernetes 1.30 集群 1. **添加 Kubernetes 仓库** ```bash cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key EOF ``` 2. **安装 kubeadm/kubelet/kubectl** ```bash yum install -y kubeadm-1.30.2 kubelet-1.30.2 kubectl-1.30.2 systemctl enable kubelet ``` 3. **初始化 Master 节点** ```bash kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --image-repository=registry.k8s.io \ --kubernetes-version=v1.30.2 ``` 4. **配置 kubectl** ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 5. **安装 Calico 网络插件** ```bash kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml ``` 6. **加入工作节点** 在 Master 节点获取加入命令: ```bash kubeadm token create --print-join-command ``` 在工作节点执行输出的命令。 --- #### 四、安装最新版 KubeSphere 1. **下载 KubeKey** ```bash curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.10 sh - chmod +x kk ``` 2. **创建 KubeSphere 配置文件** ```bash ./kk create config --with-kubernetes v1.30.0 --with-kubesphere v3.4.1 ``` 3. **修改配置文件** 编辑 `config-sample.yaml`: ```yaml spec: hosts: - {name: k8s-master, address: 192.168.1.100, internalAddress: 192.168.1.100, user: root, password: "your_password"} roleGroups: etcd: [k8s-master] control-plane: [k8s-master] worker: [k8s-node1] ``` 4. **安装 KubeSphere** ```bash ./kk create cluster -f config-sample.yaml ``` 5. **验证安装** ```bash kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f kubectl get pods --all-namespaces ``` 6. **访问 KubeSphere 控制台** 安装完成后通过 `http://<Master_IP>:30880` 访问,默认账号: ``` 用户名: admin 密码: P@88w0rd ``` --- #### 五、关键注意事项 1. **版本兼容性** - Kubernetes 1.30+ 默认使用 **containerd** 而非 Docker - KubeSphere 3.4.1 已兼容 Kubernetes 1.30 [^3] 2. **资源要求** - Master 节点:≥ 4核 CPU, 8GB RAM - 工作节点:≥ 2核 CPU, 4GB RAM 3. **常见问题解决** - **镜像拉取失败**:配置国内镜像源 ```bash containerd config default > /etc/containerd/config.toml sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml systemctl restart containerd ``` - **KubeSphere 安装卡顿**:检查存储类是否就绪 ```bash kubectl get sc ``` > 提示:生产环境建议使用持久化存储(如 NFS 或云存储)并配置高可用控制平面[^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值