云原生Docker09-Docker网络详解

Posted 小肖同学..

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生Docker09-Docker网络详解相关的知识,希望对你有一定的参考价值。

【云原生|Docker】09-Docker网络详解

文章目录

前言

	当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker 同样有着很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。因此,我们有必要深入了解 Docker 的网络知识,以满足更高的网络需求。
	Docker网络也是docker学习中重要的一部分,前门我们说介绍的docker操作均是在单宿主机上安装和使用docker,然后再生产环境中单节点的使用是没有实际意义的,因此这一章节我们将详细介绍docker的网络使用,已经docker跨宿主机网络使用。

网络详解

​ 安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看。

[root@clinet ~]# docker network ls 
NETWORK ID     NAME      DRIVER    SCOPE
44ccbd74a658   bridge    bridge    local
016f4cda7f9a   host      host      local
6167ccead0c4   none      null      local

网络模式介绍:

  • 桥接网络(bridge network

桥接网络是Docker默认的网络模式,也是最常用的一种。在桥接网络中,Docker主机上的所有容器都连接到同一个虚拟网络中。Docker会为每个容器分配一个唯一的IP地址,容器之间可以相互通信。

  • 主机网络(host network)

主机网络模式让容器直接使用主机的网络栈,容器中的应用程序可以直接访问主机上的网络接口。这种模式的好处是容器的网络性能非常高,但是容器之间无法直接通信,因此这种模式一般只用于需要访问主机网络的应用程序。

  • none网络(none network)

none网络模式让容器没有网络接口,也没有IP地址。这种模式通常用于测试和调试,或者需要在容器中运行一些不需要网络连接的应用程序。

  • container模式

container模式,也称为容器网络模式。在这种模式下,容器可以共享另一个容器的网络栈,即两个容器可以使用同一个虚拟网络接口和IP地址。

  • 自定义

docker 1.9版本以后新增的特性,允许容器使用第三方的网络实现或者创建单独的bridge网络,提供网络隔离能力。可自定义的网络类型:bridge,overlay,macvlan。

bridge网络

​ 在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。

默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。

 容器安装后默认会创建一个docker0的网桥,网桥的默认ip段为172.17.0.1/16,我们可以通过docker的配置文件(/etc/docker/daemon.json)自定义网桥ip段。
 
 [root@clinet ~]# cat /etc/docker/daemon.json 

  "bip": "172.18.0.1/16",
  "registry-mirrors": ["https://mqkiky4e.mirror.aliyuncs.com"]

[root@clinet ~]#

我们通过创建一个busybox的容器,使用bridge网络,来深入了解brige网络的连接。

[root@clinet ~]# docker run -it --network bridge busybox /bin/sh
(--network  bridge是默认的,可以不指定。)

创建完容器之后,我们在宿主机上通过ip add查看的信息如下:

此时宿主机上创建了一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名。如上图所示,9表示为连接到容器内的网络连接(eth0@if9),

同时通过在宿主机上可以查看到相关网桥的信息:

综上所述,bridge网络的拓扑如下:

Bridge 桥接模式的实现步骤主要如下:

1. 启动一个容器的时候,Docker Daemon会在宿主机上创建一对虚拟网络接口,该接口相当于网线的两端,一端在宿主机上(veth pair格式),另外一端在容器内为eth0;
2.  同时Docker Daemon 会将宿主机上的 veth pair 接口桥接到 Docker Daemon 创建的 docker0 网桥上。
3.  docker0网桥同时也类似为dhcp,会给容器的eth0网卡分配相同段的ip。
  • 通过docker inspect 容器id来查看容器的详细信息,其中网络部分如下:
[root@clinet ~]# docker inspect 53a |grep -A 30 Networks

  • docker network inspect bridge查看网桥的详细信息。
[root@clinet ~]# docker network inspect bridge 
# 通过如下命令会列出bridge网络的相关信息,其中"Containers"字段的表示是信息是指当前节点上有哪些容器使用了该网络。

  • 使用–network 指定bridge网络
docker run -d --name web1 --net bridge nginx

基于bridge网络的容器访问外部网络

默认情况下,基于bridge网络容器即可访问外部网络,这是因为默认情况下,docker使用了iptables的snat转发来实现容器对外部的访问(需要内核开启net.ipv4.ip_forward=1)

外部网络访问基于bridge网络的容器

如果想让外界可以访问到基于bridge网络创建的容器提供的服务,则必须要告诉docker要使用的端口。

可以通过如下方法查看镜像会使用哪些端口:

docker inspect nginx | jq .[]."ContainerConfig"."ExposedPorts"

在创建容器的时候可以指定这个容器的端口与主机端口的映射关系:

docker run -d --name web -P nginx

-p: 可以指定主机与容器的端口关系,冒号左边是主机的端口,右边是映射到容器中的端口
-P:该参数会分配镜像中所有的会使用的端口,并映射到主机上的随机端口

这种端口映射基于iptables的dnat实现

查看容器的端口情况:

docker port  容器名称
或
docker  ps  -a  (找到对应容器)

host网络

  • host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定;
  • 采用 host 网络模式的 容器,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;
  • 使用host网络的主机,与宿主机共享网络地址,可以获得最好的数据转发性能。
  • 使用host网络的缺点是,同一个宿主机上的多个容器共享同一个ip地址,如果多容器使用相同的端口,需要自行解决端口冲突问题。(这也是host网络一般不使用的原因。)
  1. 可以通过如下方式查看host网络信息:
docker inspect host
  1. 创建一个使用host网络容器的示例:
# 可以看到该容器没有自己的IP地址,因为它直接使用宿主机IP地址
docker run -it --network host busybox

host网络拓扑

none网络

  • none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。在创建容器时通过参数 --net none 或者 --network none 指定;
  • 使用none网络的容器除了lo,没有其他任何网卡,完全隔离。用于既不需要访问外部服务,也不允许外部服务访问自己的应用场景。
  1. 查看none网络信息:
docker network inspect none
  1. 创建一个使用none网络容器的示例:
docker run -it --network none busybox

container网络

  • Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;
  • 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。
  • Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。

  1. 创建一个基础容器nginx,该容器使用bridge模式
[root@clinet ~]# docker run -d --name nginx --network bridge nginx 
5acd9628840da292a618b44499fdf4c6ac56f11b4c64390411ec41f7b59a8b9f
[root@clinet ~]#

此时基础容器的网络情况如下:

  1. 创建一个busybox容器,使用container网络模式
docker run -it --network container:nginx busybox

此时busybox容器的网络如下:

此时宿主机上的网络情况如下:

总上所述,Docker 守护进程只创建了一对对等虚拟设备接口,busybox容器完全的使用了nginx容器的网络。

  1. 当我们停止掉nginx容器的时候,网络信息如下:

此时busybox容器只剩下了lo网络接口。

自定义网络

Docker除了提供三种的默认网络模式之外,也允许用户针对一些特定的应用场景去创建一些自定义的网络。这样属于这个网络的容器就可以单独隔离出来,它们之间可以相互通信,而不在这个网络的容器就不能直接访问到它们。一个容器可以属于多个网络,同一个自定义网络下的容器可以通过各自的容器名访问到对方,因为会使用到docker内嵌的一个dns功能。

Docker提供三种自定义网络驱动:

1. bridge
2. overlay
3. macvlan

自定义bridge网络

  1. 创建一个叫作my_net的自定义网络
docker network create --driver bridge my_net    #--driver用于指定网络类型,不指定默认为bridge
  1. 通过指定子网和网关的方式创建my_net2网络:
docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2
  1. 查看网络信息

  1. 宿主机上会产生两个类似docker0的网桥。

  1. 删除自定义网络

docker network rm my_net1 (自定义网络名称)

注意:如果通过某个自定义网络模式创建了容器,则该网络模式无法删除。

示例:

  • 使用自定义的bridge网络my_net1,创建一个busybox容器
docker run -it --network my_net1 busybox

  • 使用自定义的bridge网络my_net2,创建一个busybox容器
docker run -it --network my_net2 busybox

容器的互通

  • 这里所说的容器互通是指在同一个宿主机上的容器;
  • 容器互通必须要求互通容器在同一个网络内;

两个相同的bridge网络容器互通(默认bridge)

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_test nginx

  1. 创建另一个基于默认的 bridge 网络模式的容器,并测试连通性

经过测试,从结果得知两个属于同一个网络的容器是可以进行网络通信的。

两个相同的bridge网络容器互通(自定义bridge)

  1. 创建一个基于自定义的my_net1网络模式的容器.
docker run -d --name nginx --network my_net1 nginx

  1. 创建另一个基于my_net1网络模式的容器,并测试连通
docker run -it --name busybox --network my_net1 busybox ping 172.17.0.2

	从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。
	但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

两个不同bridge网络互通

  1. 创建一个基于默认的 bridge 网络模式的容器.
docker run -d --name  nginx_1 nginx

  1. 创建一个基于自定义的my_net2网络模式的容器. 并测试互通。
docker run -it --network my_net2  busybox ping 172.18.0.3

此时网络不通。

  1. 通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式。
docker network connect my_net2 nginx_1

  1. 测试网络连通性

  1. 此时两个网络结果如下:

此时相当于nginx_1容器存在两个网卡,一个是桥接到docker0的,一个是桥接到my_net2的,因此实现原理还是两容器处于相同的ip段。

  1. 断开网络
docker network disconnect my_net2 nginx_1
1.  上述所说的容器互通均是同一宿主机上的场景;
2.  互通的根本原理是让两个容器处于同一个桥接网卡上,即:相同的ip段。

后面我们将单独说说跨主机容器互通的问题。

Docker network命令

  1. 创建一个新的Docker网络
docker network create my_network

语法如下:

docker network create [OPTIONS] NETWORK
其中,OPTIONS是一些可选参数,NETWORK是要创建的网络的名称。
下面是一些常用的OPTIONS参数:
--driver:指定网络驱动程序,默认为bridge。
--subnet:指定网络的IPv4子网。
--gateway:指定网络的IPv4网关。
--ipv6:启用IPv6支持。
--ip-range:指定网络的IPv4地址范围。
--ipam-driver:指定IP地址管理驱动程序。
--ipam-opt:指定IP地址管理驱动程序的选项。

1.1 创建一个名为my_network的桥接网络,其中IPv4子网为172.18.0.0/16,网关为172.18.0.1

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 my_network

1.2 将创建一个名为my_network的桥接网络

docker network create --driver bridge my_network
  1. 将名为my_container的容器连接到名为my_network的Docker网络
docker network connect  my_network  my_container
  1. 将名为my_container的容器从名为my_network的Docker网络中断开连接,
docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

为my_container的容器从名为my_network的Docker网络中断开连接,

docker network disconnect my_network my_container
或
## --force  强制
docker network disconnect --force  my_network my_container
  1. 查看网络的详细信息
docker  inspect  网络名称
  1. 列出所有的Docker网络
docker  network  ls
  1. 删除一个Docker网络
docker  network  rm  网络名
  1. 删除所有未使用的Docker网络
docker  network  prune

猿创征文 | 云原生领域之容器日常使用工具推荐

猿创征文 | 云原生领域之容器日常使用工具推荐

一、云原生介绍

1.云原生定义

  • 云原生计算基金会(CNCF)对云原生的官方定义:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格(Service Mesh)、微服务、不可变基础设施和声明式API。

2.容器技术简介

容器技术是云原生生态系统的核心,它通过简化开发人员的操作极大地提升了开发速度和质量。通过使用容器(例如Docker),团队可以指定其系统依赖关系,同时提供统一通用的执行层,该层使基础架构团队能够操作单个基础设施,例如容器编排工具(如Kubernetes)。

3.云原生相关工具导航

  • 以下是个人在云原生容器方面日常使用的10个主要工具

docker
Harbor
docker-compose
portainer
kubernetes
helm
kuboard
ansible
jumpserver
WebVirtMgr

二、Docker

1.Docker介绍

①Docker简介

Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器)。

②Docker特点

  • 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  • 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
  • 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
  • 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
  • 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  • 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器,无需使用模板或手动配置。
  • 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

③Docker的三个基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,可以用来保存容器运行所需要的镜像。常用的有本地私有镜像仓库和远程harbor镜像仓库。

④Docker的架构图

2.Docker的优势

  • 更高效的利用系统资源

  • 更快速的启动时间

  • 一致的运行环境

  • 持续支付和部署

  • 更轻松的迁移

  • 更轻松的维护和拓展

3.Docker的使用效果

①查看宿主机的容器列表

[root@node ~]# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS                 PORTS                                             NAMES
8408fdf0dc10   openproject/community:12     "./docker/prod/entry…"   2 hours ago   Up 2 hours             5432/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp   compose_proxy_1
0924fcec04ff   openproject/community:12     "./docker/prod/entry…"   2 hours ago   Up 2 hours             80/tcp, 5432/tcp                                  compose_worker_1
b5103772dd9c   openproject/community:12     "./docker/prod/entry…"   2 hours ago   Up 2 hours (healthy)   80/tcp, 5432/tcp                                  compose_web_1

②访问容器应用

4.Docker工具的使用心得

1.方便快捷,大量节省了部署应用的时间,方便快捷部署应用服务,以前需要几个小时部署的应用,现在只需几分钟使用Docker快速完成。
2.使用灵活,可以使用Docker快速部署测试环境,也可以运行工具类容器免去安装工具烦恼。
3.节省资源,容器是轻量级的,可以节省大量计算机资源,一台主机以前也许只能安装几个虚拟机,但是可以安装几十个容器。
4.提升效率,当部署一个服务时,有时需要多个应用支持,还有环境的配置,docker可以通过docker-compose快速将部署业务。
5.管理方便,可以通过各种容器管理平台,例如k8s,可以有效管理容器。

三、Harbor镜像仓库

1.Harbor介绍

Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器。

2.Harbor的优点

  • 基于角色的访问控制 -

用户与 Docker 镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

  • 镜像复制

镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

  • 图形化用户界面

用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。

  • AD/LDAP 支持

Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。

  • 审计管理

所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

  • 国际化 -

已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

  • RESTful API -

RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

  • 部署简单 -

提供在线和离线两种安装工具,也可以安装到 vSphere 平台(OVA 方式)虚拟设备。

3.Harbor的使用效果

①访问harbor仓库

②查看docker镜像

③上传镜像到harbor的操作

 docker tag nginx:latest 192.168.3.250:8090/library/nginx:5.0 # 将本地镜像打上标签
 docker push 192.168.3.250:8090/library/nginx:5.0   # 上传镜像到harbor服务器

4.harbor的使用心得

1.部署简单,可以使用华为云等云服务器快速部署harbor仓库。
2.界面美观,harbor界面简洁美观,使用简单易上手。
3.镜像存放,可以作为个人私有docker镜像的存放中心,方便管理。

四、docker-compose工具

1.docker-compose介绍

docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。我们可以通过docker-compose,使用 YAML文件来配置应用程序需要的所有服务。

2.docker-compose写法

[root@docker filemanager]# cat docker-compose.yaml 
version: '3.5'
services:
  filemanager:
    image: smokserwis/filemanager
    restart: always
    container_name: filemanager
    volumes:
      -  /data/filemanager/files:/var/www/mount
    ports:
      - 8011:80
    networks:
      - files
networks:
    files:
   

3.docker-compose的使用

[root@docker filemanager]# docker-compose up -d
Creating network "filemanager_files" with the default driver
Creating filemanager ... done

4.docker-compose的优点

  • Compose适用于所有环境:生产,开发,测试以及CI工作流程等工作环境中。
  • 定义和运行多个 Docker 容器的应用。
  • 安装简单,使用方便,易上手使用。

5.docker-compose的使用心得

1.docker-compose非常适合组合使用多个容器进行开发的场景,同时定义多个容器来组成一个服务,来满足测试开发需求。
2.使用方便,对于学习playbook的人来说,docker-compose易简单上手。
3.提高了效率,不用启动一个复杂的容器时,运行一段超长繁琐的命令,只需一个docker-compose.yaml就能搞定。

五、portainer

1.Portainer介绍

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,
基本能满足中小型单位对容器管理的全部需求。

2.Portainer优点

  • 支持容器管理、镜像管理。

  • 轻量级,消耗系统资源少。

  • 基于docker api,安全性高,可指定docker api端口,支持TLS证书认证。

  • 支持权限分配、集群。

  • Portainer 提供了图形化界面,用于方便地管理Docker环境

3.Portainer的使用

①登录Portainer的web界面

②查看容器列表

③查看容器负载情况

4.Portainer的使用心得

1.web界面友好,适合新手小白上手。
2.操作简单,docker命令的操作基本都可以在Portainer的web界面操作,方便快捷。
3.容器负载查看,可以查看每个容器的资源负载情况,图形化显示,这是个人最喜欢使用的功能。
4.容器日志,对于容器故障,在portainer查看日志一目了然。

六、kubernetes

1.k8s介绍

  • Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

2.k8s的日常使用

①k8s的一个service应用的yaml写法

[root@master pvc]# cat mysql.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql001
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  strategy: 
  template:
    metadata:
      labels:
        app: mysql
    spec:
      volumes:
      - name: db
        persistentVolumeClaim:
          claimName: pvc-mysql
      containers:
      - image: mysql:5.7
        name: mysql
        ports:
        - name: mysql
          containerPort: 3306
          protocol: TCP
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: root
        - name: MYSQL_DATABASE
          value: data
        resources:         
          requests:
             cpu: 0.1
             memory: 128Mi
          limits:
             cpu: 0.4
             memory:  512Mi

---
apiVersion: v1
kind: Service
#元数据
metadata:
  creationTimestamp: null
  labels:
    app: mysql
  name: mysql-svc
  #描述部分
spec:
  ports:
  - name: web-port
    port: 3306
    protocol: TCP
    targetPort: 3306
    nodePort: 30066
  selector:
    app: mysql
  type: NodePort

②查看pod状态

[root@master pvc]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS      AGE
my-tomcat9                                1/1     Running   3 (28m ago)   18d
mysql001-595bc8cb5c-snbkj                 1/1     Running   0             65s
nfs-client-provisioner-5bbb6fc745-ncdht   1/1     Running   2 (23m ago)   11h

③查看svc状态

[root@master pvc]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP          18d
mysql-svc    NodePort    10.96.1.254   <none>        3306:30066/TCP   3m16s

3.k8s的优点

  • 自动装箱:运行在容器之上,通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率。
  • 自我修复:当节点挂掉后,会对当前节点重启,如果重启失败,会将当前节点部署到另外一个节点运行,当另一个节点未完全启动,不对外开放节点服务。
  • 自动伸缩:HPA(Horizontal Pod Autoscaling) 自动更新工作负载资源(例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求。
  • 负载均衡:节点通过service来访问应用服务,service则通过连接多个pod,达到负载均衡的效果。
  • 滚动更新:当kubernates监测到新加的服务没有问题才会停止服务。
  • 版本回退:当新增加的功能由问题时,可以回退到之前的版本,按照之前的效果运行。
  • 密码配置管理:Kubernetes专门提供了Secret对象为其解耦,即便利了应用的快速开发和交付,又提供了一定程度上的安全保障。
  • 存储编排:自动实现存储系统挂载和应用,特别对有状态应用实现数据持久化非常重要,存储系统可以来自本地目录、网络存储、公共存储服务。
  • 批处理:使用jobs与cronjobs资源对象,来提供一次性服务,定时任务。

4.k8s的使用心得

1.作为云原生时代的IT人员,k8s是提升自我的重要技术,实现自我价值。
2.k8s的功能强大,生态也很完整,有着大量工具和插件支持,满足生产和测试开发环境需求。
3.通过对k8s集群的学习,可以了解到k8s的强大之处,使得以前部署复杂的生产服务架构,通过k8s部署变得更加简单。

七、helm工具

1.helm介绍

Helm是Kubernetes的包管理器,类似于Python的pip centos的yum,主要用来管理 Charts。

2.helm的基本使用

helm repo add stable https://apphub.aliyuncs.com/stable  # 添加仓库源
helm repo list   # 列出所有仓库源
helm search repo weave-scope    # 搜索chart包
helm install scope stable/weave-scope   #部署应用
helm uninstall scope    # 卸载应用
 

3.helm优点

helm包管理器用于简化操作系统中应用程序的安装、升级、恢复和删除过程。这些应用程序以包为单元定义,包含目标软件及其依赖项的元数据。

4.helm使用心得

1.将一个复杂的k8s的应用程序,通过包管理的方式,大大简化了部署流程,方便了维护和使用。
2.各种helm应用仓库中心,为我们更加方便快捷部署应用。

八、Kuboard

1.Kuboard介绍

Kuboard类似于 Kubernetes Dashboard,是一款轻量级产品,也是kubernetes 多集群管理工具。

2.Kuboard优点

  • 多种认证方式
  • 多集群管理
  • 微服务分层展示
  • 工作负载的直观展示
  • 工作负载编辑
  • 存储类型支持
  • 丰富的互操作性
  • 套件扩展
  • 告警配置
  • 操作审计

3.Kuboard的使用

①查看命名空间

②查看工作负载

③查看应用的yaml文件

4.Kuboard的使用心得

1.kuboard是一款轻量级k8s集群管理平台,部署简单,占用资源少。
2.界面简洁美观,功能强大,可以对k8s的资源对象有效管理。
3.方便对k8s集群运维,提高了工作效率。

九、Ansible

1.ansible简洁

Ansible是一个IT自动化工具。 它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。

2.ansible的优点

  • Ansible融合了众多老牌运维工具的优点,基本上pubbet和saltsatck能实现的功能,ansible都可以实现。

  • Ansible是一个轻量级的工具,无需在客户端上安装agent,更新时,只需要在操作机上进行一次更新即可。

  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行。

  • Ansible是一致性,高可靠性,安全性设计的轻量级自动化工具。

  • 使用python编写,维护更加简单。

3.ansible的使用

①使用ansible查看节点的连通性

[root@k8s-master ~]# ansible all -m ping
192.168.3.203 | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python"
    , 
    "changed": false, 
    "ping": "pong"

192.168.3.202 | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python"
    , 
    "changed": false, 
    "ping": "pong"


②ansible使用playbook批量部署服务

ansible-playbook yum_repository.yml   # 批量部署各节点的yum仓库

4.ansible的使用心得

1.高效的自动化运维工具,可以大大减轻工作量,提高工作效率。
2.易上手的playbook,有着极大的灵活性,满足日常工作需求。
3.轻量级,客户端免安装,使用方便快捷。

九、Jumpserver

1.Jumpserver简介

Jumpserver是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent,支持再次开发 实现了跳板机基本功能,认证、授权、审计 集成了Ansible。

2.Jumpserver特点

1.JumpServer 是全球首款开源的堡垒机,使用 GNU GPL v3.0 开源协议,是符合 4A 规范的运维安全审计系统。
2.JumpServer 使用 Python / Django 为主进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
3.JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。

3.Jumpserver首页

4.Jumpserver使用体会

1.Jumpserver界面美观,布局合理,日常操作非常快捷。
2.Jumpserver配合ansible使用,可以对各服务器节点进行有效管理。
3.通过web界面下发ansible命令,直观显示执行结果。

十、WebVirtMgr

1.WebVirtMgr简介

WebVirtMgr是一个基于libvirt的Web界面,用于管理虚拟机。它允许您创建和配置新域,并调整域的资源分配。

2.WebVirtMgr优点

  • WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的可视化。

  • 操作简单,易于使用 、通过libvirt的API接口对kvm进行管理、提供对虚拟机生命周期管理。

  • 宿主机管理支持以下功能、CPU利用率、内存利用率、网络资源池管理、存储资源池管理、虚拟机镜像、虚拟机克隆、快照管理、日志管理、虚机迁移、虚拟机管理支持以下功能、CPU利用率、内存利用率、光盘管理、关/开/暂停虚拟机、安装虚拟机、VNC console连接、创建快照。

3.WebVirtMgr的使用

①访问WebVirtMgr

②查看虚拟机实例

③访问KVM虚拟机

④对KVM虚拟机资源监控

4.WebVirtMgr的使用心得

1.为KVM虚拟机提供了一个简洁高效的web界面,对于KVM虚拟机的日常使用变得十分方便。
2.可以通过VNC直接连接KVM虚拟机,进行配置工作。
3.可以有效监控虚拟机资源使用情况。
4.可以作为个人开发测试的一个虚拟化平台,安装多个KVM虚拟机,部署kubernetes集群环境。
5.占用资源少,节省机器资源,提高运行效率。

以上是关于云原生Docker09-Docker网络详解的主要内容,如果未能解决你的问题,请参考以下文章

云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)

云计算与云原生 — Docker 容器技术完全解析

云原生|Docker系列7Docker Machine 使用详解

云原生生态圈:服务快速上云--Docker部署SpringBoot案例详解

云原生&Docker基础篇第3篇详解Docker如何启动终止导入导出容器等操作

云原生存储详解:容器存储与 K8s 存储卷