docker之二----网络

docker基础网络

四种基础网络类型

bridge 默认类型 NAT模式

 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上,所以有默认地址172.17.0.0/16的地址。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

  从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以ethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看.

D:\刘朋辉linux运维笔记\docker&K8s\Docker & K8s.assets\image-20201203180330377.png)

Host host类型,使用宿主机网络,网络性能最高

Host模式,使用参数--network host指定,Host模式不支持端口映射,且容器无法启动。

启动的容器如果指定了使用host模式,那么新创建的容器不会创建自己的虚拟网卡(Network Namespace),而是直接使用宿主机的网卡和IP地址(Network Namespace),因此在容器里面查看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器端口即可,不过容器的其他资源们必须文件系统、系统进程等还是和宿主机保持隔离。此模式的网络性能最高,但是各容器之间端口不能相同,适用于运行容器端口比较固定的业务。

container 容器类型。使用其他容器共用网络,k8s中使用

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace而不是和宿主机共享新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的两个容器的进程可以通过lo网卡设备通信

none 没有网络,上不了外网

 使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo网络接口。需要我们自己为Docker容器添加网卡、配置IP等。

 不参与网络通信,运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份、进程诊断及各种离线任务等,此模式极少使用。

创建自定义网络

docker run -it --network host alpine:latest
docker run -it --network container:id号/主机名 alpine:latest  公用网络  
nc -l -p 3000 #监听3000端口
docker run -it --network none alpine:3.9
ip addr
docker network create -d bridge --subnet 172.19.0.0/16 --gateway 172.19.0.1 oldqiang
docker run -it --network oldqiang alpine:3.9
ip addr

跨宿主机容器间的通讯之macvlan

macvlan类似于虚拟机的桥接网络

注:ping不通自己的宿主机 虚拟机桥接,容器拥有和宿主机同一网段的ip地址,不能检测ip地址,手动管理IP地址分配

macvlan创建网络

10.0.0.11
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.2 -o parent=eth0 macvlan_1     
10.0.0.12
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.2 -o parent=eth0 macvlan_1  

macvlan启动容器

10.0.0.11
docker run -it --network macvlan_1 --ip 10.0.0.3  alpine:3.9
docker run -it --network macvlan_1 --ip 10.0.0.6  centos7_sshd:v4
ping 10.0.0.4
ping 10.0.0.7
10.0.0.12
docker run -it --network macvlan_1 --ip 10.0.0.4  alpine:3.9
docker run -it --network macvlan_1 --ip 10.0.0.7  centos7_sshd:v4
ping 10.0.0.3
ping 10.0.0.6

跨宿主机容器间的通讯之overlay

搭建consul集群

docker03:

下载

wget http://192.168.15.253/docker_images/docker_progrium_consul.tar.gz

启动容器

docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
docker ps 

注:-h 主机名

基于consul的10.0.0.11配置

vim  /etc/docker/daemon.json
{
 "registry-mirrors": ["https://registry.docker-cn.com"],
 "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376"
}
systemctl restart docker

创建overlay网络

docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1  ol1

启动容器测试

docker run -d -it --network ol1 --name oldboy01 alpine:3.9
docker run -d -it --network ol1 --name oldboy02 alpine:3.9
ifconfig docker_gwbridge

overlay:

注: ip地址存储在consol,使用该网络的容器,每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网,可以实现容器之间的双向通讯

基于consul的10.0.0.12配置

 vim  /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.12:2376"
}
systemctl restart docker

创建overlay网络

docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.2  ol1

启动容器测试

docker run -d -it --network ol1 --name oldboy03 alpine:3.9
docker run -d -it --network ol1 --name oldboy04 alpine:3.9
ifconfig docker_gwbridge

每个容器有两块网卡:

  • eth0实现容器间的通讯:可以使用 --name 指定的名字作为主机名通讯
  • eth1实现容器访问外网:NAT模式
  • 登录管理页面查看

管理页面:http://10.0.0.13:8500

查看 KEY/VALUE -- docker -- nodes/ ,docker01和docker02配好后会有两个节点

image-20201203165526700

overlay实现zabbix容器安装

  • 使用overlay网络
  • --name 改为 --link 指定的名称
  • 删除--link
docker run --network ol1  --name mysql-server -it \
      -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  --network ol1 --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest 
      
docker run --network ol1 --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" \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest 
      
docker run --network ol1 --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" \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest
     
      docker exec -it zabbix-web-nginx-mysql /bin/sh 
      ping mysql-server

Docker容器监控

普罗米修斯 官网:https://prometheus.io/

监控工具

nagios:不存储历史数据

cacti:每5分钟同步一次,时间太长

zabbix : 监控传统业务,模板

openfalcon小米开发的监控工具

prometheus: 监控容器业务

prometheus 主程序 数据集中处理

prometheus.yml

监控目标

target 自带 tsdb 时间序列数据库

注:可配置外部mysql数据库

配置其他的web界面

配置报警

alterManager

邮件报警

钉钉报警

微信报警

静态普罗米修斯(prometheus)docker03

cd /opt
tar xf prometheus-2.23.0.linux-amd64.tar.gz
cd prometheus-2.23.0.linux-amd64/
cat prometheus.yml
#修改
  - job_name: 'prometheus'           
    static_configs:
    - targets: ['10.0.0.13:9090']
  - job_name: 'node-exporter'
    static_configs:
    - targets: ['10.0.0.11:9100','10.0.0.12:9100']
./prometheus --config.file="prometheus.yml" &

docker01
wget http://192.168.15.253/docker_monitor_node.tar.gz
docker load -i docker_monitor_node.tar.gz
#客户端节点
#启动node-exporter
docker run -d   -p 9100:9100   -v "/:/host:ro,rslave"   --name=node_exporter   quay.io/prometheus/node-exporter   --path.rootfs /host
#启动cadvisor
docker run --volume=/:/rootfs:ro  --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro  --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest            #--detach -d后台运行


docker02
wget http://192.168.15.253/docker_monitor_node.tar.gz
docker load -i docker_monitor_node.tar.gz

#客户端节点
#启动node-exporter
docker run -d   -p 9100:9100   -v "/:/host:ro,rslave"   --name=node_exporter   quay.io/prometheus/node-exporter   --path.rootfs /host
#启动cadvisor
docker run --volume=/:/rootfs:ro  --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro  --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest            #--detach -d后台运行

注:当时间不同步时可删除/opt/prometheus-2.23.0.linux-amd64/data目录文件重新搭建一遍

浏览器访问:http://10.0.0.13:9090/targets

image-20201204161854263

动态普罗米修斯docker03

vim /opt/prometheus-2.23.0.linux-amd64/prometheus.yml
  - job_name: 'cadvisor'
    file_sd_configs:
    - files:
      - job/server.json
      refresh_interval: 10s
mkdir job 
vi /opt/prometheus-2.23.0.linux-amd64/job/server.json
[
  {
    "targets":  ["10.0.0.11:8080","10.0.0.12:8080"]
  }
]
ps -ef|grep prome
kill 8759  #PID进程号
./prometheus --config.file="prometheus.yml" &

浏览器访问:http://10.0.0.13:9090/targets

image-20201204161955350

docker03:alter实现alterManager警报配置

wget http://192.168.15.253/alertmanager-0.21.0.linux-amd64.tar.gz
tar xf alertmanager-0.21.0.linux-amd64.tar.gz
cd alertmanager-0.21.0.linux-amd64/
vim alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_from: '2543843664@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '2543843664@qq.com'
  smtp_auth_password: 'rmcfoclmkjpgeccf'
  smtp_require_tls: false
  smtp_hello: 'qq.com'
  
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '2543843664@qq.com'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
./alertmanager --config.file="alertmanager.yml" &
netstat -tnulp

cd ../prometheus-2.23.0.linux-amd64/
vim prometheus.yml
  - 10.0.0.13:9093  #打开报警
 - "node_down.yml"  #命名规则文件名称
vi /opt/prometheus-2.23.0.linux-amd64/node_down.yml
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="node-exporter"} == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

ps -ef|grep prome     #查看进程号
kill 8586  #pid号
./prometheus --config.file=prometheus.yml &




任意停止一个测试 
docker01
docker stop node_exporter
docker02
docker stop node_exporter

浏览器访问:10.0.0.13:9093

image-20201204164851232

grafana报警监控业务 出图工具 dashboard模板

#安装grafana  
docker03
cd /opt
wget http://192.168.15.253/grafana-7.3.4-1.x86_64.rpm
yum localinstall grafana-7.3.4-1.x86_64.rpm -y
systemctl start grafana-server.service 
systemctl enable grafana-server.service
grafana:
插件:
数据源: 

注:wget https://mirror.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-7.3.4-1.x86_64.rpm #清华园

浏览器访问:10.0.0.13:3000 admin:admin

首先创建一个prometheus dashboard

新建数据源--导入dashboard模板
https://grafana.com/api/dashboards/11074/revisions/9/download #prometheous

https://grafana.com/api/dashboards/893/revisions/5/download #advistor

import导入

image-20201204172309457

posted @ 2021-03-06 14:57  上善若水~小辉  阅读(213)  评论(0编辑  收藏  举报