置顶文章

274k4:09

# Prometheus 监控 Kubernetes # 1、监控 Kubernetes 环境准备 [root@k8s-master01 ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONk8s-master01 Ready <none> 46d v1.27.10k8s-master02 Ready <none> 46d v1.27.10k8s-master03 Ready <none> 46d v1.27.10k8s-n
17k15 分钟

# Prometheus 服务发现与 Relabel # 一. Prometheus 服务发现 # 1.1 为什么需要服务发现 Prometheus 采⽤ Pull 模型来抓取⽬标主机的指标数据,这就意味着 Prometheus 必须事先知道每个要监控的⽬标的端点地址。然后才能从对应的 Exporter 或 Instrumentation 进⾏数据抓取。对于规模较⼩,且监控的⽬标不会频繁的发⽣变动,直接使⽤ static_configs 静态配置来监控它们,就⾮常简便。 但是,当我们⾯对容器应⽤的场景时,会发现监控的这些⽬标端点可能会频繁的发⽣变化。因此使⽤静态配置⽅法可能不太适⽤了。那么 P
51k46 分钟

# Prometheus 告警服务 # 一。什么是 AleartManager # 1.1 什么是 AleartManager 由于 Prometheus 本身⽆法实现告警,因此需要借助 AlertManager 来实现告警的推送。 Prometheus Server 会对已经设定好的 “告警规则” 进⾏定期评估,当检测到问题时,会⽣成相应的告警通知并发送给 AlertManager。AlertManager 则会根据告警消息所携带的 “标签” 和事先配置的 “路由规则(Routes)”,将告警消息分发⾄不同的接收器 / 接收⼈(receivers)。例如,带有 "syst
93k1:24

# Prometheus 监控实战(三) # 一. Promtheus 节点监控 # 1.1 配置 Prometheus [root@prom-node01 ~]# cat /etc/prometheus/prometheus.yml# 全局段定义global: scrape_interval: 15s # 设置 Prometheus 抓取指标数据的间隔,默认为 15 秒。# rules 配置文件路径rule_files: - "/etc/prometheus/rules/*.yml" # 抓取指定
34k31 分钟

# PromQL 快速入门(二) # 一. PromQL 基础概念 # 1.1 什么是 PromeQL Prometheus 内置了⼀种强⼤的查询语⾔:PromQL,即 PrometheusQuery Language。PromQL 允许⽤户实时查询监控数据,并对这些数据执⾏复杂的聚合和计算操作。 在 PromQL 中,查询的结果被称为 “向量(vector)”,分为两种类型: 1、即时向量(Instant vector):即时向量查询返回的是⼀组时间序列数据,但每个时间序列中只包含单个的最新数据点。例如:查询当前时刻服务器 1 分钟的负载,所得到的结果就是⼀个即时向量。 2、范围向量(Ra
26k24 分钟

# Prometheus 监控实战(一) # 一、Prometheus 介绍 # 1.1 Prometheus 是什么 Prometheus 是由 SoundCloud 使⽤ Go 语⾔开发的时序数据库(简称 TSDB)但它的功能并⾮局限于 TSDB,因为它还⽀持对⽬标(如服务器、应⽤程序等)进⾏监控; 因此,我们也可以理解 Prometheus 是⼀款开源的 “监控系统”,但仅仅依托 Prometheus 不⾜以⽀撑整个监控系统,它需要结合⽣态内其他的组件来构建⼀个完整的 IT 监控系统。例如: AleartManager、Grafana、PushGateway 等等。 # 1.2 什么是时
20k18 分钟

# 负载均衡 LVS 入门与实践 # 一、 安装 MySQL5.7 #1、下载 MySQL 官方扩展源[root@db01 ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm #2、安装 mysql5.7,文件过大可能会导致下载缓慢[root@db01 ~]# yum install mysql-community-server -y#3、
15k13 分钟

# Samba 服务实践 # 一、Samba 概述 SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机 / 服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。如图: 1. ftp 的优缺点: 优点:文件传输、应用层协议、可跨平台 缺点:只能实现文件传输,无法实现文件系统挂载;无法直接修改服务器端文件 2. Samba 的特性: 使用 smb/cifs 协议、可跨平台、可实现文件系统挂载、可实
23k21 分钟

# Vsftp 服务实践 # 一、VSFTP 概述 FTP 是 File Transfer Protocol(文件传输协议)的英文简称,用于 Internet 上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式。 VSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,它的全称是 Very Secure FTP,从名称定义上基本可以看出,这是为了解决 ftp 传输安全性问题的。 # 二、VSFTP 工作模式 # 2.1 Port 模式 FTP 客户端首先和服务器的 TCP 21 端口建立连接,
7.8k7 分钟

# 100 个运维相关技术官网大汇总 # 1. 操作系统官网 名称 官网链接 Ubuntu https://ubuntu.com Debian https://www.debian.org RHEL https://www.redhat.com Rocky Linux https://rockylinux.org AlmaLinux https://almalinux.org Arch Wiki https://wiki.archlinux.
85k1:18

# K8S 基于 Jenkins 实现微服务应用 CICD 实践(四) CI 阶段:开发人员 -> 提交代码 ->gitlab 仓库 ->Jenkins/CI 抓取代码 -> 漏洞扫描 -> 编译 -> 构建镜像 -> 推送 Harbor-> 部署应用至 K8S 测试环境; CD 阶段:Jenkins/CD-> 拉取 Harbor 仓库对应项目镜像 -> 部署应用至 K8S 测试环境; # 一、环境准备 准备好 Java 代码、Dockerfile、deploy.yaml 资源清单文件 提交到 Gitlab 服
104k1:34

# K8S 基于 Jenkins 实现 SpringCloud 微服务 CI 与 CD 实践(三) CI 阶段:开发人员 -> 提交代码 ->gitlab 仓库 ->Jenkins/CI 抓取代码 -> 漏洞扫描 -> 编译 -> 构建镜像 -> 推送 Harbor-> 部署应用至 K8S 测试环境; CD 阶段:Jenkins/CD-> 拉取 Harbor 仓库对应项目镜像 -> 部署应用至 K8S 测试环境; # 一、环境准备 准备好 Java 代码、Dockerfile、deploy.yaml 资源清单文件
39k35 分钟

# K8S 基于 Jenkins 实现 Java 项目 CI 与 CD 实践(二) CI 阶段:开发人员 -> 提交代码 ->Gitlab 仓库 ->Jenkins/CI 抓取代码 -> 漏洞扫描 -> 编译 -> 构建镜像 -> 推送 Harbor-> 部署应用至 K8S 测试环境; CD 阶段:Jenkins/CD-> 拉取 Harbor 仓库对应项目镜像 -> 部署应用至 K8S 生产环境; # 一、提交代码 准备好 Java 代码、Dockerfile、deploy.yaml 资源清单文件 提交到 Gi
29k27 分钟

# K8S 基于 Jenkins 实现 SpringCloud 微服务 CI 与 CD 实践(一) CI 阶段:开发人员 -> 提交代码 ->gitlab 仓库 ->Jenkins/CI 抓取代码 -> 漏洞扫描 -> 编译 -> 构建镜像 -> 推送 Harbor-> 部署应用至 K8S 测试环境; CD 阶段:Jenkins/CD-> 拉取 Harbor 仓库对应项目镜像 -> 部署应用至 K8S 测试环境 # 一、部署 Harbor # 1.1 安装基础环境 [root@harbor ~]# yum rem
35k32 分钟

# Tomcat JVM 调优实践 # 一、JVM 基础架构 # 1.1 Jvm 执行过程 使用 java 编程语言开发 java 源代码,然后通过编译器把 java 编译为 java 类文件也叫字节码; 通过类加载器 ClassLoader 将字节码加载到内存中,将其放在运行时数据区中的方法区内; 然后调用执行引擎在 JVM 虚拟机中运行,然后将字节码编译成底层系统指令,在交由 CPU 执行; 同时我们在编写程序时,不可能从头到尾去实现所有代码功能,可以通过 Java API 调用本地库接口(Native Interface)当中已经有的 java 代码来实现其他的功能(比如图形库、语言等
20k18 分钟

# Tomcat 配置管理实践 # 一、OracleJdk 安装 OracleJdk 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 [root@web01 ~]# tar xf jdk-8u451-linux-x64.tar.gz -C /usr/local[root@web01 ~]# ln -s /usr/local/jdk1.8.0_451/ /usr/local
4.1k4 分钟

# Linux—Centos7 修改网卡名称 首先我们先了解不同网卡名称对应的内核参数: biosdevname=0 net.ifnames=1:网卡名 “enps” 此内核参数一般为默认 biosdevname=1 net.ifnames=0:网卡名 “em*” biosdevname=0 net.ifnames=0:网卡名 “eth*” 本次以将网卡名命名为 eth * 格式作示例 # 1. 查看当前网卡的信息 [root@manager ~]# ifconfigens33: flags=4163<UP,
29k26 分钟

# 虚拟隧道网络 Openvpn # 一、什么是 VPN VPN(Virtual Private Network) 翻译过来就是虚拟专⽤⽹络,那虚拟专⽤⽹提供什么功能 将两个或多个 “不同地域 “的⽹络通过⼀条虚拟隧道的⽅式连接起来,实现互通; 在不安全的线路上提供安全的数据传输; # 二、VPN 应⽤场景 # 2.1 点对点连接 Peer-to-Peer VPN (点对点连接),将 Internet 两台机器(公⽹地址)使⽤ VPN 连接起来,⽐如上海服务器和北京服务器的之间的数据需要相互调⽤,但是数据⼜⽐较敏感,直接通过 http 公共⽹络传输,容易被窃取。如果拉⼀条专线成本⼜太⾼。所
46k41 分钟

# ELK 收集 Kubernetes 组件日志分析与实践 # 一、ELK 创建 Namespace 和 Secrets # kubectl create ns logging# kubectl create secret docker-registry harbor-admin -n logging --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=xyapples@163.com --docker-password=passwd# 二、交付 Zookeeper 集群至 K8
12k11 分钟

# Kubenetes 部署 Rabbitmq 集群 # 1. 创建 RBAC 权限 # cat 01-rabbitmq-rbac.yaml apiVersion: v1kind: ServiceAccountmetadata: name: rabbitmq-cluster namespace: prod---apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: rabbitmq-cluster namespace: prodrules:- apiGroups: [""] re
5.7k5 分钟

# Rabbitmq 集群部署 # 一、环境配置 # 1.1 关闭防火墙、Selinux systemctl disable --now firewalld setenforce 0sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinuxsed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config# 1.2
64k58 分钟

# 消费租赁项目 Kubernetes 基于 ELK 日志分析与实践 # 一、ELK 创建 Namespace 和 Secrets # kubectl create ns logging# kubectl create secret docker-registry harbor-admin -n logging --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=xyapples@163.com --docker-password=passwd# 二、交付 Zookeeper 集
82k1:15

# 消费租赁系统微服务应用交付实践 # 一、部署中间件 # 1.1 部署 MySQL # 1.1.1 MySQL-ConfigMap [root@k8s-master01 01-nf-flms-mysql]# cat 01-mysql-cm.yaml apiVersion: v1kind: ConfigMapmetadata: name: mysql-cm namespace: proddata: my.cnf: |- [mysqld] #performance setttings lock_wait_timeout = 3600 open_files_
5.8k5 分钟

# Containerd 常用命令 # 1. 安装 Containerd 1.1 配置安装源 yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -yyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1.2 安装 docker-ce、containerd yu
17k15 分钟

# Redis Cluster 集群部署 # 1、环境配置 # 1.1 关闭防火墙、Selinux systemctl disable --now firewalld setenforce 0sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinuxsed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config#
36k33 分钟

# 1. Ingress Nginx Controller 安装 Supported Ingress-NGINX version k8s supported version Alpine Version Nginx Version Helm Chart Version 🔄 v1.12.1 1.32, 1.31, 1.30, 1.29, 1.28 3.21.3 1.25.5 4.12.1 🔄 v1.12.0 1.32, 1.31, 1.30, 1.29, 1.28 3.21.0 1.25.5 4.12.0 🔄 v1.12.0-beta.0 1.32, 1.31, 1.
2.3k2 分钟

# 阿里云 + github 构建镜像仓库解决 k8s.gcr.io 访问 由于 k8s.gcr.io/ 镜像仓库位于国外,国内使用 kubeadm 构建 docker 集群时无法访问相应的 docker 镜像。 # 1. 登录 Github 创建仓库 # 2. 创建 Dockerfile 仓库下面创建一个 Dockerfile,以 ingress-nginx-controller 为例下的 dockerfile 内容如下: [root@manager ~]# mkdir ingress-nginx-controller[root@manager ~]# cd ingress-n
35k32 分钟

# K8S 云原生存储 Rook-Ceph # 1. StorageClass 动态存储 StorageClass:存储类,由 K8s 管理员创建,用于动态 PV 的管理,可以链接至不同的后端存储,比如 Ceph、GlusterFS 等。之后对存储的请求可以指向 StorageClass,然后 StorageClass 会自动的创建、删除 PV。 实现方式: in-tree: 内置于 K8s 核心代码,对于存储的管理,都需要编写相应的代码。 out-of-tree:由存储厂商提供一个驱动(CSI 或 Flex Volume),安装到 K8s 集群,然后 StorageClass 只需要配置该
5.9k5 分钟

# K8S 持久化存储 NFS+StorageClass # 1. 搭建 NFS 服务器 #所有 K8S 节点安装 nfs-utils[root@k8s-node02 ~]# yum install nfs-utils -y #K8S-node02 节点配置 nfs 服务[root@k8s-node02 ~]# mkdir /data/nfs -p[root@k8s-node02 ~]# cat /etc/exports/data/nfs 192.168.1.0/24(rw,no_root_squash)[root@k
5k5 分钟

# K8s 细粒度权限控制 RBAC # 1. 创建不同权限的 clusterrole # 1.1 命令空间只读 namespace-readonly $ cat namespace-readonly.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: namespace-readonlyrules:- apiGroups: - "" resources: - namespaces verbs: - get - list - watch- api
12k11 分钟

# K8s 准入控制 ResourceQuota、LimitRange、QoS 服务质量 # 1. ResourceQuota 配置解析 ResourceQuotas 实现资源配额,避免过度创建资源,针对 namespace 进行限制。cpu 内存则是根据 pod 配置的 resources 总额进行限制,如果没有配置 resources 参数则无法限制。 apiVersion: v1kind: ResourceQuotametadata: name: resourcequota-test namespace: test labels: app: resourcequotaspec
19k17 分钟

# K8s 亲和力 Affinity Pod 和节点之间的关系: 某些 Pod 优先选择有 ssd=true 标签的节点,如果没有在考虑部署到其它节点; 某些 Pod 需要部署在 ssd=true 和 type=physical 的节点上,但是优先部署在 ssd=true 的节点上。 Pod 和 Pod 之间的关系: 同一个应用的 Pod 不同的副本或者同一个项目的应用尽量或必须不部署在同一个节点或者符合某个标签的一类节点上或者不同的区域; 相互依赖的两个 Pod 尽量或必须部署在同一个节点上或者同一个域内。 # 1. Affinity 分类
3.8k3 分钟

# K8s 容忍和污点 Taint 指定服务器上打上污点,让不能容忍这个污点的 Pod 不能部署在打了污点的服务器上。Toleration 是让 Pod 容忍节点上配置的污点,可以让一些需要特殊配置的 Pod 能够调用到具有污点和特殊配置的节点上。 # 1. Taint 配置解析 #1.Taint 语法# kubectl taint nodes NODE_NAME TAINT_KEY=TAINT_VALUE:EFFECT#2. 创建 Taint 示例# kubectl taint nodes k8s-node01 ssd=true:PreferNoSchedule#3. 查
3k3 分钟

# K8s 初始化容器、临时容器 # 1. 初始化容器 # 1. 1 初始化容器的用途 初始化容器主要是在主应用启动之前,做一些初始化的操作,比如创建文件、修改内核参数、等待依赖程序启动或其他需要在主程序启动之前需要做的工作。 Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码; Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低; Init 容器可以以 root 身份运行,执行一些高权限命令; Init 容器相关操作执行完成以后即退出,不会给业务容器带来安全隐患。 # 1.2 初始化容器和 PostStart 区别 PostStart:依赖
3k3 分钟

# K8s 计划任务 Job、Cronjob # 1. Job 配置参数详解 # cat job.yaml apiVersion: batch/v1kind: Jobmetadata: labels: job-name: echo name: echo namespace: defaultspec: #suspend: true # 1.21+ #ttlSecondsAfterFinished: 100 backoffLimit: 4 completions: 1 parallelism: 1 template: spec: container
10k9 分钟

# K8s 持久化存储 # 1. Volume Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet 会重新启动容器,Container 会以最干净的状态启动,最初的文件将丢失。另外,当一个 Pod 运行多个 Container 时,各个容器可能需要共享一些文件。Kubernetes Volume 可以解决这两个问题。 一些需要持久化数据的程序才会用到 Volumes,或者一些需要共享数据的容器需要 volumes。 日志收集的需求需要在应用程序的容器里面加一个 sidecar,这个容器是一个收集日志的容器,比如 filebeat,它通过 volumes 共享应用程序
11k10 分钟

# K8s 配置管理 Configmap # 1. Configmap # 1. 1 基于 from-env-file 创建 Configmap # cat cm_env.conf podname=nf-flms-systempodip=192.168.1.100env=prodnacosaddr=nacos.svc.cluster.local#kubectl create cm cmenv --from-env-file=./cm_env.conf# 1.2 基于 from-literal 创建 Configmap # kubect
2.5k2 分钟

# K8s 服务发布 Service # 1. Service 类型 Kubernetes Service Type(服务类型)主要包括以下几种: ClusterIP:在集群内部使用,默认值,只能从集群中访问。 NodePort:在所有安装了 Kube-Proxy 的节点上打开一个端口,此端口可以代理至后端 Pod,可以通过 NodePort 从集群外部访问集群内的服务,格式为 NodeIP:NodePort。 LoadBalancer:使用云提供商的负载均衡器公开服务,成本较高。 ExternalName:通过返回定义的 CNAME 别名,没有设置任何类型的代理,需要 1.7 或更高版本
19k17 分钟

# K8s 资源调度 deployment、statefulset、daemonset # 1. 无状态应用管理 Deployment [root@k8s-master01 ~]# cat nginx-deploy.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploy labels: app: nginx-deploy annotations: app: nginx-deploy namespace: defaultspec: selector: matchLabels:
6.9k6 分钟

# K8s 零宕机服务发布 - 探针 # 1. Pod 状态及 Pod 故障排查命令 状态 说明 Pending(挂起) Pod 已被 Kubernetes 系统接收,但仍有一个或多个容器未被创建,可以通过 kubectl describe 查看处于 Pending 状态的原因 Running(运行中) Pod 已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个是运行状态,或者是正在启动或者重启,可以通过 kubectl logs 查看 Pod 的日志 Succeeded(成功) 所有容器执行成功并终止,并且不会再次重启,可以通过 kubectl logs
5041 分钟

# 一键永久激活 Window、office 教程 1、按下 Win 键 + R,调出运行对话框,输入 powershell 并回车,启动命令提示符窗口。接着输入以下指令执行激活: irm https://get.activated.win | iex 该脚本包含四个功能:首个命令用于 Windows 系统永久激活,第二个用于 Office 永久激活,第三个将系统有效期延长至 2038 年,第四个则实现每 180 天自动循环激活。 2. 我们再次使用 Windows 徽标 + R 快捷键打开运行框,输入 slmgr.vbs/xpr 就可以看到系统已经永久激活了。
55k50 分钟

# 二进制高可用安装 K8s 集群 # 1. 基本配置 # 1.1 基本环境配置 主机名 IP 地址 说明 k8s-master01 ~ 03 192.168.1.71 ~ 73 master 节点 * 3 / 192.168.1.70 keepalived 虚拟 IP(不占用机器) k8s-node01 ~ 02 192.168.1.74/75 worker 节点 * 2 请统一替换这些网段,Pod 网段和 service 和宿主机网段不要重复!!! * 配置信息 * 备注 系统版本 Rocky Linux 8/9
55k50 分钟

# MySQL 运维 DBA 应用与实践 # 1. 日志 在任何一种数据库中,都会有各种各样的日志,这些日志记录了数据库运行的各个方面。可以帮助数据库管理员追踪数据库曾经发生的一些事情。 对于 MySQL 数据库,提供了四种不同的日志帮助我们追踪。 错误日志 二进制日志 查询日志 慢查询日志 # 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld (MySQL 服务) 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认存放目录 /
18k16 分钟

# Redis 集群(主从 + 哨兵)模式 # 一、什么是 redis 主从复制? 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点 (master),后者称为从节点 (slave), 数据的复制是单向的,只能由主节点到从节点。master 以写为主,slave 以读为主。 # 二、主从复制的作用 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供
33k30 分钟

# Kubeadm 高可用安装 K8s 集群 # 1. 基本配置 # 1.1 基本环境配置 主机名 IP 地址 说明 k8s-master01 ~ 03 192.168.1.71 ~ 73 master 节点 * 3 / 192.168.1.70 keepalived 虚拟 IP(不占用机器) k8s-node01 ~ 02 192.168.1.74/75 worker 节点 * 2 请统一替换这些网段,Pod 网段和 service 和宿主机网段不要重复!!! * 配置信息 * 备注 系统版本 Rocky Linux 8/
16k14 分钟

# Rsync 服务实践 环境准备 主机名 IP 角色 server 192.168.40.101 rsync 服务端 client 192.168.40.102 rsync 客户 # 1.rsync 服务端 # 1.1 关闭防火墙、selinux [root@localhost ~]# hostnamectl set-hostname backup[root@localhost ~]# bash[root@backup ~]# hostnamectl set-hostname aizj_lb01[root@backup ~]# systemctl stop firew
4k4 分钟

# 企业级私有仓库 Harbor 企业部署 Kuberetes 集群环境之后,我们就可以将原来在传统虚拟机上运行的业务,迁移到 kubernetes 上,让 Kubernetes 通过容器的方式来管理。而一旦我们需要将传统业务使用容器的方式运行起来,就需要构建很多镜像,那么这些镜像就需要有一个专门的位置存储起来,为我们提供镜像上传和镜像下载等功能。但我们不能使用阿里云或者 Dockerhub 等仓库,首先拉取速度比较慢,其次镜像的安全性无法保证,所以就需要部署一个私有的镜像仓库来管理这些容器镜像。同时该仓库还需要提供高可用功能,确保随时都能上传和下载可用的容器镜像。 # 1、关闭防火墙、Sel