中国没有自己的互连网吗

中国没有自己的互连网吗,第1张

中国真的没有互联网根服务器吗?

目前在中国部署的都是镜像根服务器,全世界目前只有13台根服务器,1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。

根服务器镜像的扩展大幅提升了互联网基础设施的访问性能和安全冗余性。这相当于,当我们想获取某个后缀(即域名,比如“国务院政务”)的网站服务时,能够提供此服务的根服务器和镜像变得多了,可以获取服务的途径增多了,互联网这个网络的规模因此扩大了;同时,若是镜像服务器离得近了,往返服务器所需时间和获取服务存在的风险也会随之大为降低。因而,根和大量镜像服务器构成的分布式网络,一方面提高了DNS的安全冗余性,分流攻击流量,增强整体抗攻击能力,使得DNS整体架构更富有d性;另一方面,镜像服务器为部署地区用户提供就近的根解析服务能力,提升了区域用户的根解析响应时间和解析成功率。

然而,我国引入根镜像数量仍显不足。据统计,目前美国根服务器及镜像约占全球总量六分之一左右,我国只引入四个根(F、I、J、L)镜像节点,总数量位居全球第19位,不及美国十分之一。

由于递归服务器对根服务器的访问策略采用“初始轮询,性能择优”的原则,目前我国根域名解析中,约六成可实现对国内已引入根镜像服务器的就近访问。

随着互联网业务的蓬勃发展,根服务器运营机构以设置镜像方式形成全球分布式架构,为部署地区用户提供就近的根解析服务能力,全球根镜像服务器数量涨势明显。截至2016年6月,全球根服务器及其镜像服务器(含节点)数量已达到599个,较2009年(189个)增长约2169%。

我们开发环境Jenkins构建项目时报服务器磁盘空间不足,导致项目自动化构建部署失败,

Docker镜像服务器磁盘空间清理我们做了多次了,之前在清理Docker镜像服务器时走了不少弯路,查了不少Docker镜像服务器空间清理,都大同小异,都是一些如何清理历史镜像文件的文章,而实际按照清理镜像文件进行一顿 *** 作,释放的内存了了,最近一次磁盘空间报警事件,镜像文件清理也就才清理了40M,完全达不到清理磁盘空间的效果。
事实上我们的镜像执行sh脚本本身包含清理垃圾镜像文件的步骤:

因此,重要事情说三遍: 当Docker镜像服务器磁盘空间不足时,首先要考虑的时服务器的日志文件、大文件等等,最后才考虑Docker镜像本身占用的磁盘内存

df命令用于查看磁盘分区的使用情况,了解磁盘总量及用量,默认单位为KB。
当磁盘空间报警时,我们可以使用df命令查看磁盘分区使用情况:

注意,使用df -h命令会看到Docker镜像的/var/lib/docker 目录占很多空间,其实这是假象,许多同事初次看到这个接口首先应该就是去考虑如何清理/var/lib/docker,我也不例外。
不要受/var/lib/docker 目录影响,继续分析空间占用情况。

前面通过df命名我们大致了解了我们磁盘分区内存使用情况,使用du命令可以当前目录下文件、目录在磁盘中占用的空间的大小。
来到服务器顶层目录,执行命令:

找到内存使用异常的文件夹,进入其目录依次执行du -sh ,最终找到占用内存的大文件或日志,进行清理。
分享下我在情况过程找到的大文件

通过前面df 和du配合分析清理空间后,基本就能释放服务器磁盘空间,就简单提下Docker镜像清理咯,毕竟网上一大堆。
镜像清理。

批量清除无用的镜像

Nodejs 项目可以借助 Docker 技术生成容器镜像,并可以在离线环境中使用。以下是具体 *** 作步骤:
1 在离线环境中安装 Docker
在离线环境中需要手动安装 Docker。可以先在有网络的环境中下载 Docker 安装包和依赖文件,然后通过离线方式进行安装。具体 *** 作可以参考 Docker 官方文档。
2 编写 Dockerfile 文件
Dockerfile 文件是 Docker 镜像的构建脚本,通过编写 Dockerfile 可以定义容器的基础镜像、依赖环境、运行命令等信息。例如在 Nodejs 项目中可以使用以下 Dockerfile 文件来构建镜像:
```
FROM node:latest
WORKDIR /app
# 将整个项目目录拷贝到容器中
COPY /app
# 安装项目依赖
RUN npm install
# 容器运行时默认执行的命令
CMD npm start
```
3 构建 Docker 镜像
使用以下命令在离线环境中构建 Docker 镜像:
```
docker build -t your-image-name
```
其中 `your-image-name` 为自定义的镜像名称,`` 表示当前目录(Dockerfile 所在目录)。
4 导出和导入 Docker 镜像
生成 Docker 镜像后,可以通过以下命令将镜像保存为文件并导出到离线环境中:
```
docker save -o your-image-nametar your-image-name
```
其中 `-o` 参数可以指定导出的文件路径和名称。
在离线环境中可以使用以下命令将导出的镜像文件导入到 Docker 中:
```
docker load -i your-image-nametar
```
其中 `-i` 参数可以指定需要导入的镜像文件路径和名称。
5 运行容器
在离线环境中使用以下命令启动容器:
```
docker run -p your-port:your-port -d your-image-name
```
其中 `-p` 参数可以指定容器内部的端口和本地端口之间的映射关系,`-d` 参数表示容器以后台进程方式运行。
至此,Nodejs 项目的容器镜像就可以在离线环境中生成和部署了。

什么是docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 20 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 *** 作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 07 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 111 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

下面的比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整 *** 作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统虚拟化

Docker

为什么要用docker

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个

基本概念

我们都知道, *** 作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:1804 就包含了完整的一套 Ubuntu 1804 最小系统的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入 *** 作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Centos安装docker18

常用的docker命令

常用的docker镜像

redis

mysql

docker私有镜像仓库一般用来存放公司内部的镜像,比如微服务中会有很多的服务需要放到自己公司内部的镜像仓库上,发布的时候直接从私有镜像仓库拉取。比如我公司的微服务部署在k8s环境上,微服务技术依然选择熟悉的 Spring Cloud ,这样每一个服务其实就是一个 Spring Boot 项目,我们通过Maven的插件会在项目编译、打包之后推送到我们的私有镜像仓库,之后CI工具使用kubelet部署的时候会从私有镜像仓库拉取镜像,最后完成部署,可以说私有镜像仓库是非常重要的一个环节。
接下来我会主要讲述一下私有镜像仓库的搭建以及镜像的管理,包括一些自己遇到的问题。
首先要保证自己的服务器已经安装了 docker 。具体的安装教程可以看 官网 ,这里就不在赘述了。

首先我们需要创建一个自己的CA证书,

比如下图是我自己创建时输入的相关内容:

做好镜像存储目录和证书目录的挂载,运行即可

这一步需要在所有需要拉取镜像的服务器上执行。上月底我在部署正式环境时我就遇到了这个问题,k8s的节点上一直显示拉取镜像失败,后来才发现忘了在k8s服务器上配置证书。

hostname 即生成CA证书的时候最后输入的 hostname , port 镜像仓库对外暴露的端口号。

如果是在镜像仓库所在的服务器上,执行:

如果不是同一台服务器,同样需要存放创建证书目录,执行:

之后将证书上传到目标服务器,且放在证书目录下,名称为 cacrt 。

为了测试,我拉取一个 redis 镜像,然后给它重新打一个 tag 。

推送到私有镜像仓库:
浏览器显示:

表示刚才推送到私有镜像仓库是成功的。接下来我们测试从另一台服务器拉取刚才的镜像。当然这台服务器一定要按照之前的描述配置好CA证书,还要修改服务器 hosts 文件,配置好 ip 和 hostname 。
拉取镜像:

拉取镜像如下图所示:

根据显示可以看出拉取镜像是成功的。
到这里镜像仓库的搭建、推送和拉取都讲完了,接下来就看看怎么删除镜像。

这里说的删除镜像是指从仓库中删除,即从服务器上删除。在构建仓库的时候我们将镜像的仓库容器内的目录挂载到了服务器的目录。镜像仓库内其实是没有镜像文件,都在服务器对应的目录下。在开发的时候我就遇到过这样一个问题,因为是开发环境项目编译、打包、镜像构建和推送都非常频繁,虽然新的镜像会覆盖老的镜像,但是原有的镜像文件本身并没有被覆盖,这样的结果就是虽然镜像仓库上看镜像只有一个,但是本地服务上存储的是很多个镜像文件(而且基本是没啥用的),最终导致了服务磁盘空间不足的情况。

我们依然以 Redis 举例,我将多不同版本的 Redis 多次像私有仓库推送,不管是 Redis 40、50、60,最终我向仓库推送的版本号都是 redis:v4 (过程省略),最终我们在镜像仓库目录( /home/registry/ )下可以看到有多个 sha256 的值,详细目录:
/home/registry/docker/registry/v2/repositories/redis/_manifests/revisions/sha256

如下图:
如果要删除镜像首先需要修改配置文件,进入到docker容器内:

保存之后退出容器。
我们进入到存放镜像的目录下,删除一个镜像的 sha256 的值

上面只是删除了镜像的 sha256 值,并没有删除镜像本身,我们需要调用垃圾回收的命令:

这时候会看到一些输出,比如:

这时候我们在查看下对应目录的磁盘使用情况:

但是变化不明显,那就在删除一个试试。

除了手动删除之外还可以通过API来删除,这个方法我没有测试,感兴趣的小伙伴可以测试一下。在实际过程中我也是使用上述方法删除的,因为我一般都是磁盘使用率到一定比例才进行批量删除的,另外网上也有人通过脚本,感兴趣的小伙伴都可以尝试一下。

删除可以使用使用官方API删除:

查询镜像的 sha256 的值:

今天关于docker私有镜像仓库的内容就讲到这里,如果对上面内容有什么疑问欢迎大家交流探讨,也欢迎大家多多点赞、分享、转发,谢谢大家~~~​

本文主要记录Jenkins+Rancher+k8s自动化部署相关配置说明,不涉及rancher和jenkins安装部署,包含java server项目、WAR项目、前端VUE项目部署配置介绍。
服务器环境信息:

需要在安装jenkins服务上部署下面相应的软件,请注意软件版本,如已经安装相关软件,可跳过此章节。

需要安装rancher-cli,并且使用jenkins用户预先登录rancher平台:命令参考:

--token:这个用户的token建议设置为永不过期,在rancher管理端 -> api&key > 添加。

建议安装阿里镜像,提高编译速度:

jenkins启动用户需要添加到docker组中:
项目主要是java和vue开发的,所以需要安装Maven Integration plugin插件。
spring boot或者spring cloud自带容器,以及其它服务类型的java后端应用部署。

1、填写项目名称,选择"构建一个maven项目"
点击下面"OK"按钮

2、填写项目描述信息
3、输入项目地址,并选择用户凭证
本文通过condingnet作为代码管理平台,点击"Add"添加自己账号凭证(输入codingnet平台登陆账号密码即可)。

4、配置maven编译脚本
5、编写rancher部署脚本
Dockerfile参数说明:FROM:选择基础镜像包,该项目是用java语言开发需要jdk18所以选择openjdk:8ADD:将bRule-deploy-100targz文件解压并上传到镜像的brule目录EXPOSE:容器内部启动2002端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签ENTRYPOINT:容器启动时执行的命令,执行多条命令使用&&拼接,命令行中带&需要加上转移符\&,使用tail -fn监听应用日志,以便容器日志查看。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的 *** 作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址brule:latest:应用名称,根据自身项目名称修改

利用上面创建好的 *** 作系统镜像启动一个vmware虚拟机,创建k8s容器。

参数说明:brule:应用名称,根据自身项目名称修改,应用名称规范()image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:brule:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。

1、进入刚才创建好的jenkins任务,点击立即构建
2、点击左下角构建任务,选择"Console Output",查看构建日志
3、登录rancher管理平台,查看构建好的应用
基于J2EE项目的war包部署,前面 *** 作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。

Dockerfile参数说明:FROM:选择基础镜像包,war统一使用tomcat容器部署,tomcat:85-jre8-slimADD:将operationwar文件解压并上传到镜像的/usr/local/tomcat/webapps/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签

这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的 *** 作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改

利用上面创建好的 *** 作系统镜像启动一个vmware虚拟机,创建k8s容器。

参数说明:operation:应用名称,根据自身项目名称修改image:刚才创建的docker镜像containerPort:容器启动端口,多个端口使用多行containerPort标签声明,端口限制在30000-32000

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:operation:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。

基于webpack构建的VUE项目部署,前面 *** 作都一致,只是shell部署脚本稍有不同,这里主要详细说明rancher部署脚本。

Dockerfile参数说明:FROM:选择基础镜像包,前端统一使用tomcat容器部署,tomcat:85-jre8-slimCOPY:将/dist目录上传到镜像的/usr/local/tomcat/webapps/fastquery/目录EXPOSE:容器内部启动8080端口,根据自身项目填写指定端口,多个端口填写多行EXPOSE标签

这里不需要配置ENTRYPOINT标签,因为tomcat镜像包中已经有了。

用于创建docker镜像,就好比创建一个已经安装并且配置好了应用程序的 *** 作系统镜像。

参数说明:19216810021:5000:为本地docker镜像服务器地址operation:latest:应用名称,根据自身项目名称修改

利用上面创建好的 *** 作系统镜像启动一个vmware虚拟机,创建k8s容器。

前面vmware虚拟机创建好后,怎么能让别人访问?这个时候就需要创建一个网络服务,用于打通路由器与vmware本地虚拟机的网络。

参数说明:shutcm-fastquery-web:应用名称,根据自身项目名称修改port:容器启动端口nodePort:对外提供服务端口,外部机器访问

将上面配置好的shell脚本复制到Post Steps -> 执行shell文本域中,并点击"保存" -> "立即构建"即可部署。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13489799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存