link一下 就知道容器的ip地址css
每作一次link 就会hosts解析html
# 启动第一个容器 [root@docker01 ~]# docker run -d xiaoniao:v v1 v3 v4 v5 v6 v7 v8 [root@docker01 ~]# docker run -d xiaoniao:v4 b8d7b1f7e1f9d69e76d9af4b4ef5a06902244770c1293ccab0c1a87591f18e6f # 在第一个容器的基础上 启动第二个容器 [root@docker01 ~]# docker run -it --link sweet_chandrasekhar:xiaoniao xiaoniao:v1 /bin/bash # 看看网站状态 [root@a227b9c0f449 /]# curl -I http://xiaoniao HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Tue, 31 Dec 2019 02:16:56 GMT Content-Type: text/html Content-Length: 3049 Last-Modified: Sat, 02 Aug 2014 07:55:12 GMT Connection: keep-alive ETag: "53dc9960-be9" Accept-Ranges: bytes # 查看hosts解析 [root@a227b9c0f449 /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 xiaoniao b8d7b1f7e1f9 sweet_chandrasekhar 172.17.0.3 a227b9c0f449
# 启动第一个容器 [root@docker01 ~]# docker run -d mysql mysql mysql:v1 mysql:v2 mysql:v3 [root@docker01 ~]# docker run -d mysql:v3 7566567f3b28cf28d75f656007efb2697d38d1788d2909a5378a681499ab9f86 # 改个名 [root@docker01 ~]# docker run --name mysql -d mysql:v3 0e780acbda7e2e596bc3d43d41eea9671fd6cf6afd43928b7f44a93eaea28385 # 在第一个容器的基础上 启动第二个容器 [root@docker01 ~]# docker run -it --link mysql:mysql xiaoniao:v1 /bin/bash [root@d42da268737b /]# ping mysql PING mysql (172.17.0.4) 56(84) bytes of data. 64 bytes from mysql (172.17.0.4): icmp_seq=1 ttl=64 time=0.065 ms 64 bytes from mysql (172.17.0.4): icmp_seq=2 ttl=64 time=0.041 ms # 查看hosts解析 [root@d42da268737b /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.4 mysql 0e780acbda7e 172.17.0.5 d42da268737b
1)拖四个包java
[root@docker01 /srv]# ll -rw-r--r-- 1 root root 392823296 Aug 15 09:36 docker-mysql-5.7.tar.gz -rw-r--r-- 1 root root 153172992 Aug 15 09:36 zabbix-java-gateway.tar.gz -rw-r--r-- 1 root root 110936576 Aug 15 09:35 zabbix-server-mysql.tar.gz -rw-r--r-- 1 root root 179232768 Aug 15 09:35 zabbix-web-nginx-mysql.tar.gz
2)写个循环 导入node
[root@docker01 /srv]# for n in `ls *.tar.gz`;do docker load -i $n;done
3)命令mysql
docker run --name mysql-server -t \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ -d mysql:5.7 \ --character-set-server=utf8 --collation-server=utf8_bin docker run --name zabbix-java-gateway -t \ -d zabbix/zabbix-java-gateway:latest docker run --name zabbix-server-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \ --link mysql-server:mysql \ --link zabbix-java-gateway:zabbix-java-gateway \ -p 10051:10051 \ -d zabbix/zabbix-server-mysql:latest docker run --name zabbix-web-nginx-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix_pwd" \ -e MYSQL_ROOT_PASSWORD="root_pwd" \ --link mysql-server:mysql \ --link zabbix-server-mysql:zabbix-server \ -p 80:80 \ -d zabbix/zabbix-web-nginx-mysql:latest
4)访问10.0.0.5nginx
宿主机太多 镜像太多 本地没有 去官方拉 可是一群都拉 慢的很git
私有仓库 只拉一次 每次都去仓库拉 节省带宽github
1)拖个包web
[root@docker01 /srv]# ll -rw-r--r-- 1 root root 35771392 Aug 15 09:35 registry.tar.gz
2)上传镜像sql
[root@docker01 /srv]# docker load -i registry.tar.gz
3)启动私有仓库
[root@docker01 /srv]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry 03b40960c4226efc526c21d64f1e95a442c7daa6094ec39228805cbfabd68bfd --restart=always 当我docker服务起来时 自动把我这个容器起来
4)上传镜像到私有仓库
# 给镜像打标签 [root@docker02 ~]# docker image tag test:v1 10.0.0.5:5000/test:v1 # 上传镜像 [root@docker02 ~]# docker push 10.0.0.5:5000/test:v1 # 查看私有仓库有没有镜像 [root@docker01 ~]# ls /opt/myregistry/docker/registry/v2/repositories/ test
5)对上面命令的解释
# 查看镜像 [root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test v1 0ffdc2348521 3 hours ago 1.89MB # 把镜像上传到私有仓库 [root@docker02 ~]# docker image tag test:v1 10.0.0.5:5000/test:v1 # 查看镜像 多了一个 [root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.0.0.5:5000/test v1 0ffdc2348521 3 hours ago 1.89MB test v1 0ffdc2348521 3 hours ago 1.89MB # 删掉镜像 移除的是标签 [root@docker02 ~]# docker rmi test:v1 # 查看镜像 [root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.0.0.5:5000/test v1 0ffdc2348521 3 hours ago 1.89
[root@docker02 ~]# docker push 10.0.0.5:5000/test:v1 The push refers to repository [10.0.0.5:5000/test] Get https://10.0.0.5:5000/v2/: http: server gave HTTP response to HTTPS client [root@docker02 ~]# cat /etc/docker/daemon.json { "insecure-registries": ["10.0.0.5:5000"], "registry-mirrors": ["https://registry.docker-cn.com"] } [root@docker02 ~]# systemctl restart docker [root@docker02 ~]# docker push 10.0.0.5:5000/test:v1 The push refers to repository [10.0.0.5:5000/test] 254fbd52eeb8: Pushed 195be5f8be1d: Pushed v1: digest: sha256:10e10960acc278f44fcad76299fa3c87071647086f4728cb674b68bba6fab6ee size: 737
全部人均可以在私有仓库上传镜像 若是名字相同 以前的镜像就会被覆盖掉
官方仓库带认证 私有仓库也能够带认证
[root@docker01 ~]# yum install httpd-tools -y [root@docker01 ~]# mkdir /opt/registry-var/auth/ -p [root@docker01 ~]# htpasswd -Bbn mst 123456 >> /opt/registry-var/auth/htpasswd [root@docker01 ~]# docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
# 再推一次镜像 被拒绝 [root@docker01 ~]# docker push 10.0.0.5:5000/xiaoniao:v1 The push refers to repository [10.0.0.5:5000/xiaoniao] 50c9181be7e8: Preparing dc3717969f3a: Preparing 7a11b788a6b7: Preparing c71feb1f04e6: Preparing f59aa8ef2875: Preparing b5e11aae8a8e: Preparing no basic auth credentials # 登陆docker 输入帐号密码 [root@docker01 ~]# docker login 10.0.0.5:5000 Username: mst Password: Login Succeeded # 再次推镜像 成功了 [root@docker01 ~]# docker push 10.0.0.5:5000/xiaoniao:v1 The push refers to repository [10.0.0.5:5000/xiaoniao] 50c9181be7e8: Layer already exists dc3717969f3a: Layer already exists 7a11b788a6b7: Layer already exists c71feb1f04e6: Layer already exists f59aa8ef2875: Layer already exists b5e11aae8a8e: Layer already exists v1: digest: sha256:1c606a09ba312d5d43c53d083b1a2c2ebd719b95f076617df97538dc4aa95cac
上传要登陆 下载也要登录 删除私有仓库镜像不容易 权限控制不太好
查看镜像列表
使用浏览器访问:
http://10.0.0.11:5000/v2/_catalog
查看镜像的版本
http://10.0.0.11:5000/v2/nginx/tags/list
# 删除镜像 1)进入docker registry的容器中 docker exec -it registry /bin/sh 2) 删除repo rm -fr /var/lib/registry/docker/registry/v2/repositories/nginx 3) 清理掉blobs registry garbage-collect /etc/docker/registry/config.yml
wordpress
以前都是一次启动一个容器 借助这个工具一次能够启多个容器
像ansible剧本
# 下载工具(须要epel源) [root@docker01 ~]# yum install -y docker-compose [root@docker01 ~]# docker-compose -v docker-compose version 1.18.0, build 8dd22a9 # 进目录编辑文件 [root@docker01 ~]# mkdir /opt/docker-compose [root@docker01 ~]# cd /opt/docker-compose/ [root@docker01 /opt/docker-compose]# mkdir wordpress [root@docker01 /opt/docker-compose]# cd wordpress/
# 编写配置文件 [root@docker01 /opt/docker-compose/wordpress]# vim docker-compose.yml[必须叫这个名] version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - web_data:/var/www/html ports: - "80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: db_data: web_data:
# 拖个wordpress的包 由于你配置它 本地没有会很慢 [root@docker01 /srv]# ll -rw-r--r-- 1 root root 417304064 Aug 15 09:36 wordpress-latest.tar.gz # 导入镜像 [root@docker01 /srv]# docker load -i wordpress-latest.tar.gz # 启动 [root@docker01 /opt/docker-compose/wordpress]# docker-compose up #后台启动 docker-compose up -d
# 方法一: docker run --restart=always # 方法二:[这个很坑 最好忘掉] docker server配置文件/etc/docker/daemon.json { "registry-mirrors": ["http://b7a9017d.m.daocloud.io"], "insecure-registries":["10.0.0.11:5000"], "live-restore": true }
基本上不用了
功能是帮你在宿主机上安装docker
服务。
None:不为容器配置任何网络功能,--net=none Container:与另外一个运行中的容器共享Network Namespace,--net=container:containerID(K8S) Host:与宿主机共享Network Namespace,--network=host 性能最高 端口先到先得 Bridge:Docker设计的NAT网络模型
[root@docker01 ~]# docker run -d --network=HOST -it 10.0.0.5:5000/test:v1 --network= 就是指定网络类型的 不写默认bridge
默认一个物理网卡,只有一个物理mac地址,但虚拟多个mac地址就等效多个物理网卡
# 查看网络 [root@docker01 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 369f3f070370 bridge bridge local 5410a95eb8da host host local b17e3901fdcd none null local # 建立macvlan网络 [root@docker01 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 # 查看网络 多了一个刚建立的 [root@docker01 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 369f3f070370 bridge bridge local 5410a95eb8da host host local 1ec91b78a1b7 macvlan_1 macvlan local b17e3901fdcd none null local
# 另外一台服务器也建立 [root@docker02 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 [root@docker02 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE d38e976c914c bridge bridge local 23918a601f04 host host local bc13a798a6a6 macvlan_1 macvlan local
# 启动容器 [root@docker01 ~]# docker run -it --network macvlan_1 --ip 10.0.0.33 xiaoniao:v5 /bin/bash # 查看ip [root@3327f80d8e38 /]# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:21 inet addr:10.0.0.33 Bcast:10.0.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) # ping一下 [g:\~]$ ping 10.0.0.33 正在 Ping 10.0.0.33 具备 32 字节的数据: 来自 10.0.0.33 的回复: 字节=32 时间<1ms TTL=64 来自 10.0.0.33 的回复: 字节=32 时间<1ms TTL=64 # 在容器里启动nginx [root@3327f80d8e38 /]# service nginx start 直连 不须要端口映射
# 再启动一个容器 [要注意私有仓库容器开没开] [root@docker02 ~]# docker run -it --network macvlan_1 --ip 10.0.0.34 10.0.0.5:5000/xiaoniao:v1 # 查看ip 10.0.0.34 # ping ping 10.0.0.33 互通
解决了ip地址冲突问题 若是用macvlan须要手动指定ip地址
用overlay不须要手动指定 他会把ip存在仓库里 每次建立时都会读仓库 若是有了 就自动给你日后拍ip
# 准备三台服务器 # 能够再第三台服务器上面装通讯容器 docker03: docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
这里我选择装在docker01上
先修改配置文件 再启动通讯容器 由于重启服务会退出
# 修改配置文件 [root@docker01 ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["10.0.0.5:5000"], "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "cluster-store": "consul://10.0.0.5:8500", "cluster-advertise": "10.0.0.5:2376" } 【重启 会失败 查看日志是由于配置文件和system管理配置文件冲突 因此修改sys文件】 # 修改systemctl配置文件 [root@docker01 ~]# vim /usr/lib/systemd/system/docker.service 把 -H fd:// 参数删掉 # 重载 [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl restart docker
# docker02 作相同操做 [root@docker02 ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "insecure-registries": ["10.0.0.5:5000"], "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "cluster-store": "consul://10.0.0.5:8500", "cluster-advertise": "10.0.0.6:2376" } [root@docker02 ~]# vim /usr/lib/systemd/system/docker.service 把 -H fd:// 参数删掉 [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl restart docker
由于没有镜像要在线pu 浪费时间 因此我托个包上传
root@docker01 ~]# ll -rw-r--r-- 1 root root 70327296 Nov 10 2018 docker_progrium_consul.tar.gz [root@docker01 ~]# docker load -i docker_progrium_consul.tar.gz
[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
[root@docker01 ~]# docker network create -d overlay --subnet 172.16.2.0/24 --gateway 172.16.2.254 ol1 避免网段冲突 因此改为.2了 # 查看网络 出现global类型的 [root@docker01 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE b7b7a68209d0 bridge bridge local 5410a95eb8da host host local 1ec91b78a1b7 macvlan_1 macvlan local b17e3901fdcd none null local 9ff4a5d78a4a ol1 overlay global # 另外一台服务器查看 也有 由于docker开了一个远程控制的工具 [root@docker02 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 1569e3d54ae4 bridge bridge local 23918a601f04 host host local bc13a798a6a6 macvlan_1 macvlan local 05173a1abc09 none null local 9ff4a5d78a4a ol1 overlay global
# 远程链接查看docker01的服务 [root@docker02 ~]# docker -H 10.0.0.5:2376 ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d296b93e72b progrium/consul "/bin/start -server …" 7 minutes ago Up 7 minutes 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp consul # docker02本身的服务 [root@docker02 ~]# docker ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 两边都准备好busybox镜像 # 启动容器 主机名oldboy01 [root@docker01 ~]# docker run -it --network ol1 --name oldboy01 busybox:latest /bin/sh / # ping oldboy02 PING oldboy02 (172.16.2.2): 56 data bytes 64 bytes from 172.16.2.2: seq=0 ttl=64 time=0.485 ms 64 bytes from 172.16.2.2: seq=1 ttl=64 time=0.320 ms 【ping对方主机名 就能知道对方的ip】 # 启动容器 主机名oldboy02 [root@docker02 ~]# docker run -it --network ol1 --name oldboy02 busybox:latest /bin/sh / # ping oldboy01 PING oldboy01 (172.16.2.1): 56 data bytes 64 bytes from 172.16.2.1: seq=0 ttl=64 time=14.043 ms 64 bytes from 172.16.2.1: seq=1 ttl=64 time=0.664 ms 64 bytes from 172.16.2.1: seq=2 ttl=64 time=0.410 ms
ip地址不会冲突
[root@docker01 ~]# docker run --network ol1 --name web01 -p 80:80 xiaoniao:v8 /bin/bash [root@2cbd20d33f82 /]# ifconfig [root@2cbd20d33f82 /]# ping oldboy02 PING oldboy02 (172.16.2.2) 56(84) bytes of data. 64 bytes from oldboy02.ol1 (172.16.2.2): icmp_seq=1 ttl=64 time=8.70 ms 64 bytes from oldboy02.ol1 (172.16.2.2): icmp_seq=2 ttl=64 time=0.538 ms [root@2cbd20d33f82 /]# ping 223.5.5.5 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=127 time=9.25 ms 64 bytes from 223.5.5.5: icmp_seq=2 ttl=127 time=40.6 ms
docker registry(私有仓库):功能弱 权限简单 删除镜像麻烦
docker harbor:重量级
第一步:安装docker和docker-compose 第二步:下载harbor-offline-installer-v1.x.0.tgz 第三步:上传到/opt,并解压 第四步:修改harbor.cfg配置文件 hostname = 10.0.0.5 harbor_admin_password = 123456 第五步:执行install.sh
# 下载docker-compose [root@docker01 ~]# yum install -y docker-compose # 拖个包 [root@docker01 /opt]# ll -rw-r--r-- 1 root root 864933610 Aug 15 09:36 harbor-offline-installer-v1.5.1.tgz # 解压 [root@docker01 /opt]# tar xf harbor-offline-installer-v1.5.1.tgz # 进目录修改文件 [root@docker01 /opt/harbor]# vim harbor.cfg hostname = 10.0.0.5 harbor_admin_password = 123456 # 执行脚本 [root@docker01 /opt/harbor]# ./install.sh
# 根据格式推镜像到仓库 [root@docker02 ~]# docker tag busybox:latest 10.0.0.5/library/busybox:latest [root@docker02 ~]# docker push 10.0.0.5/library/busybox:latest The push refers to repository [10.0.0.5/library/busybox] Get https://10.0.0.5/v2/: dial tcp 10.0.0.5:443: connect: connection refused 【报错了 仍是以前http和https的缘由】 # 修改配置文件 以前有端口映射5000 如今没有 [root@docker02 ~]# vim /etc/docker/daemon.json { "insecure-registries": ["10.0.0.5"], "registry-mirrors": ["https://registry.docker-cn.com"], "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "cluster-store": "consul://10.0.0.5:8500", "cluster-advertise": "10.0.0.6:2376" } [root@docker02 ~]# systemctl restart docker # 修改完配置文件与可能harbor起不来 [root@docker01 ~]# docker-compose restart
# 推镜像到仓库 自带登陆 因此先登陆 [root@docker02 ~]# docker login 10.0.0.5 Username: admin Password: (123456) [root@docker02 ~]# docker push 10.0.0.5/library/busybox:latest
为了解决docker stats的问题(存储、展现),谷歌开源的cadvisor诞生了,cadvisor不只能够搜集一台机器上全部运行的容器信息,还提供基础查询界面和http接口,方便其余组件如Prometheus进行数据抓取,或者cadvisor + influxdb + grafna搭配使用。
cAdvisor能够对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用状况、内存使用状况、网络吞吐量及文件系统使用状况。
Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里做为默认启动项,官方标配。
下载二进制:https://github.com/google/cadvisor/releases/latest 本地运行:./cadvisor -port=8080 &>>/var/log/cadvisor.log
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:latest
#注意: 在Ret Hat,CentOS, Fedora 等发行版上须要传递以下参数,由于 SELinux 增强了安全策略: --privileged=true (慎用 共用一个内核) #启动后访问:http://127.0.0.1:8080查看页面,/metric查看指标
Daemonset部署: https://github.com/google/cadvisor/tree/master/deploy/kubernetes kubelet自带cadvisor监控全部节点,能够设置--cadvisor-port=8080指定端口(默认为4194) kubernetes 在2015-03-10 这个提交(Run cAdvisor inside the Kubelet. Victor Marmol 2015/3/10 13:39)中cAdvisor开始集成在kubelet中,目前的1.6及之后均存在
#注意: 从 v1.7 开始,Kubelet metrics API 再也不包含 cadvisor metrics,而是提供了一个独立的 API 接口: Kubelet metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics Cadvisor metrics: http://127.0.0.1:8001/api/v1/proxy/nodes/<node-name>/metrics/cadvisor cadvisor 监听的端口将在 v1.12 中删除,建议全部外部工具使用 Kubelet Metrics API 替代。
# 1.拖个包 [root@docker01 ~]# ll -rw-r--r-- 1 root root 628516864 Aug 16 12:34 docker_monitor.tar.gz # 2.导入镜像 [root@docker01 ~]# docker load -i docker_monitor.tar.gz # 3.启动第一个容器 [root@docker01 ~]# docker run -itd -p 8083:8083 -p 8086:8086 --name influxdb tutum/influxdb
在界面上建立库 后面使用
# 启动第二个容器 (docker 1.7以上版本) [root@docker01 ~]# docker run -itd --name cadvisor -p 8080:8080 --link influxdb:influxdb --mount type=bind,src=/,dst=/rootfs,ro --mount type=bind,src=/var/run,dst=/var/run --mount type=bind,src=/sys,dst=/sys,ro --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=root -storage_driver_host=influxdb:8086
# 启动第三个容器 [root@docker01 ~]# docker run -itd --name grafana -p 3000:3000 grafana/grafana
登陆
添加数据源
建立监控
Prometheus 是一个很是优秀的监控工具。提供了监控数据搜集,存储,处理,可视化和告警一系列完 整的解决方案。
#包含组件: Node Exporter :负责收集 host 硬件和操做系统数据,以容器的形式运行在全部 host 上 cAdvisor :负责收集容器数据,以容器的形式运行在全部 host 上
#部署 #地址规划: 10.0.0.5 cAdvisor+ Node Exporter +prometheus+ grafana 10.0.0.6 cAdvisor+ Node Exporter
# 拖安装包到两台服务器 [root@docker01 ~]# ll -rw-r--r-- 1 root root 70389760 Jan 9 16:34 cadvisor.tar -rw-r--r-- 1 root root 898 Jan 9 16:34 docker-compose.yml -rw-r--r-- 1 root root 42315 Jan 9 16:34 docker-host-container-overview_rev1.json -rw-r--r-- 1 root root 232943616 Jan 9 16:34 grafana.tar -rw-r--r-- 1 root root 24351232 Jan 9 16:34 node-exporter.tar -rw-r--r-- 1 root root 134138368 Jan 9 16:34 prometheus.tar -rw-r--r-- 1 root root 354 Jan 9 16:34 prometheus.yml
# 导入镜像 docker load -i cadvisor.tar docker load -i grafana.tar docker load -i prometheus.tar docker load -i node-exporter.tar
# 修改配置文件 #docker01的配置文件: cat >docker-compose.yml<<EOF version: '3.2' services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 command: - --config.file=/etc/prometheus/prometheus.yml volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro depends_on: - cadvisor node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - 9100:9100 cadvisor: image: google/cadvisor:latest container_name: cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro grafana: image: grafana/grafana:latest container_name: grafana ports: - 3000:3000 EOF #prometheus配置文件 cat >prometheus.yml <<EOF scrape_configs: - job_name: cadvisor scrape_interval: 5s static_configs: - targets: - 10.0.0.5:8080 - 10.0.0.6:8080 - job_name: prometheus scrape_interval: 5s static_configs: - targets: - 10.0.0.5:9090 - job_name: node_exporter scrape_interval: 5s static_configs: - targets: - 10.0.0.5:9100 - 10.0.0.6:9100 EOF
#docker02配置文件 cat >docker-compose.yml<<EOF version: '3.2' services: node-exporter: image: prom/node-exporter:latest container_name: node_exporter ports: - 9100:9100 cadvisor: image: google/cadvisor:latest container_name: cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro EOF
# 运行 yum install docker-compose -y ntpdate time1.aliyun.com docker-compose -f docker-compose.yml up -d
# 检查 http://10.0.0.5:8080/metrics http://10.0.0.5:9100/metrics http://10.0.0.5:9090 http://10.0.0.5:3000
打开 grafana:
10.0.0.5:3000
admin admin
**添加数据源 **
下载并加载监控面板
https://grafana.com/api/dashboards/10619/revisions/1/download
#能够拖个下载好的 docker-host-container-overview_rev1.json