namespace和cgroup

  • Namespace是 Linux 内核的一个特性,支持对内核资源进行分区,让一组进程只能看到一组资源,而另一组进程能看到另一组不同的资源。

namespace

隔离内容

详解

UTS

主机名或域名

允许单个系统对不同的进程显示不同的主机名和域名。

IPC

信号量、消息队列和共享内存

Ipc namespace的作用是使划分到不同ipc namespace的进程组通信上隔离,无法通过消息队列、共享内存、信号量方式通信,但没有对所述所有IPC通信方式隔离。

PID

进程编号

将一组 PID 分配给独立于其他 namespace 中的一组 PID 的进程。在新的 namespace 中创建的第一个进程分得 PID 1,子进程被分配给后续的 PID。如果子进程使用自己的 PID namespace 创建,则它在该 namespace 中使用 PID 1,在父进程的 namespace 中使用自己的 PID。

Network

网络设备、网络战、端口等

拥有独立的网络栈:自己的专用路由表、IP 地址集、套接字列表、连接跟踪表、防火墙及其他网络相关资源。

Mount

挂载点(文件系统)

拥有一个独立的挂载点列表,并对该 namespace 中的进程可见。这意味着您可以在 mount namespace 中挂载和卸载文件系统,而不会影响主机文件系统。

User

用户组和用户组

拥有自己的一组用户 ID 和组 ID,用于分配给进程。这意味着进程可以在其 user namespace 中拥有 root 权限,而不需要在其他 user namespace 中获得。

  • cgroup是 Linux 内核的一个特性,用于限制、记录和隔离一组进程的资源使用(CPU、内存、磁盘 I/O、网络等)。

cgroup 的作用基本上就是控制一个进程或一组进程可以访问或使用给定关键资源(CPU、内存、网络和磁盘 I/O)的量。一个容器中通常运行了多个进程,并且您需要对这些进程实施统一控制,因此 cgroup 是容器的关键组件。Kubernetes 环境使用cgroup 在 pod 级别上部署​​资源请求和限制​​以及对应的 QoS 类。

docker常用命令

docker system prune -a #  命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

harbor单机部署

基础环境准备

#安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#下载harbor安装包
https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz

#安装docker
yum install docker-ce -y

具体要求参照harbor官方文档
https://goharbor.io/docs/2.4.0/install-config/installation-prereqs/
cat /etc/docker/daemon.json
{
"live-restore": true,
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"],
"insecure-registries":["http://harbor.registry.com"],
"exec-opts": [
"native.cgroupdriver=cgroupfs"
],
"graph":"/data1/docker",
"storage-driver": "overlay2"
}

安装harbor

生成证书

可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。本文将介绍如何使用 OpenSSL创建CA,以及如何使用CA对服务器证书和客户端证书进行签名,证书请求文件字段解析为下:

字段

含义

示例

C

Country国家

CN

ST

State or Province 省份

Beijing

L

Location or City 城市

Beijing

O

Organization 组织或企业

example

OU

Organization Unit 部门

Personal

CN

Common Name 域名或IP

yourdomain.com

mkdir /data1/harbor/ssl

openssl genrsa -out ca.key 4096

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor.registry.com
DNS.2=harbor.registry
DNS.3=docker
EOF

openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/CN=harbor.registry.com" -key ca.key -out ca.crt

openssl genrsa -out server.key 4096

openssl req -new -sha512 -subj "/CN=harbor.registry.com" -key server.key -out server.csr

openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

配置harbor证书

vim harbor.yml 
hostname: harbor.registry.com
https:
port: 443
certificate: /data1/harbor/ssl/server.crt
private_key: /data1/harbor/ssl/server.key

执行安装脚本后没有报错,安装完成

./prepare
./install.sh --with-notary --with-trivy --with-chartmuseum

项目设置为公开,可以免登录直接拉取,根据需求取舍

高可用harbor集群配置

一般有三种方式,harbor主从模式,harbor双主模式,harbor共享存储集群模式;

主从和双主模式存在比较大的问题,就是一个挂了之后,可能还有没有同步完成的镜像造成丢失,几遍恢复之后也不会自动同步了,所以比较推荐第三种模式。