美文网首页K8s
Docker安装和Harbor高可用部署

Docker安装和Harbor高可用部署

作者: Walker_7797 | 来源:发表于2021-12-30 16:41 被阅读0次

    一、Namespace和cgroup介绍

    1.1 Namespace

        Namespace是linux系统的底层概念,在内核层实现,用于提供容器独立的运行空间;分为MNT Namespace、IPC Namespace、UTS Namespace、PID Namespace、Net Namespace、User Namespace。

    • MNT Namespace:提供磁盘挂载点和文件系统的隔离能力;每个容器都要有独立的根文件系统,有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是Ubuntu的服务器,可以在里边启动一个centos运行环境的容器并且在容器里面启动一个Nginx服务,此Nginx运行时使用的运行环境就是centos系统目录的运行环境,但是在容器里面不能访问宿主机的资源,宿主机是使用了chroot技术把容器锁定到一个指定的运行目录里面并作为容器的根运行环境。

    • IPC Namespace:提供进程间通信的隔离能力;允许容器内的不同进程的访问。

    • UTS Namespace:提供主机名隔离能力;用于系统标识,其中包含hostname和域名domainname,它使得一个容器拥有属于自己hostname标识,这个主机名标识独立于宿主机系统和其上的其他容器。

    • PID Namespace:提供进程隔离能力;多个容器的进程如PID编号,容器內的主进程生成与回收子进程等。

    • Net Namespace:提供网络隔离能力;docker使用network启动一个vethX接口,这样你的容器将拥有它自己的桥接ip地址,通常是docker0,而docker0实质就是Linux的虚拟网桥,网桥是在OSI七层模型的数据链路层的网络设备,通过mac地址对网络进行划分,并且在不通网络直接传递数据。

    • User Namespace:提供用户隔离能力;允许在各个宿主机的各个容器空间内创建相同的用户以及相同的用户UID和GID,会把用户的操作范围限制在每个容器内,不同容器文件系统相互独立。

    1.2 cgroup

        cgroup的主要作用就是限制一个进程能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等,还能够对进程优先级设置,以及将进程挂起和恢复等操作。

    • blkio: 块设备IO限制

    • CPU: 使用调度程序为cgroup任务提供cpu的访问

    • cpuacct:产生cgroup任务的cpu资源报告。

    • cpuset:如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。

    • devices:允许或拒绝cgroup任务对设备的访问。

    • freezer:暂停和恢复cgroup任务。

    • memory:设置每个cgroup的内存限制以及产生内存资源报告。

    • net_cls:标记每个网络包以供cgroup方便使用。

    • ns:命名空间子系统。

    • perf_event:增加了对每个cgroup的监测跟踪的能力,可以监测属于某个特定cgroup的所有线程以及运行在特定CPU上的线程。

    二、docker的安装

    环境准备

    2.1 修改主机资源配置文件:

    cat >> /etc/security/limits.conf <<EOF
    * soft    core            unlimited
    * hard    core            unlimited
    * soft    nproc           1000000
    * hard    nproc           1000000
    * soft    nofile          1000000
    * hard    nofile          1000000
    * soft    memlock         32000
    * hard    memlock         32000
    * soft    msgqueue        8192000
    * hard    msgqueue        8192000
    EOF
    
    cat >> /etc/sysctl.conf <<EOF
    net.ipv4.ip_forward=1
    vm.max_map_count=262144
    kernel.pid_max=4194303
    fs.file-max=1000000
    net.ipv4.tcp_max_tw_buckets=6000
    net.netfilter.nf_conntrack_max=2097152
    
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness=0
    EOF
    

    2.2 解压docker压缩包并设置为开机自启动

    tar xf docker-20.10.9.tgz    # 需要先上传包
    cp docker/*  /usr/bin
    cp containerd.service /lib/systemd/system/containerd.service
    cp docker.service  /lib/systemd/system/docker.service
    cp docker.socket /lib/systemd/system/docker.socket
    groupadd  -r test
    groupadd  -r docker # 如果不添加docker组,docker起不来
    useradd -r -m -g test test
    usermod test -G docker
    systemctl  enable containerd.service && systemctl  restart containerd.service
    systemctl  enable docker.service && systemctl  restart docker.service
    systemctl  enable docker.socket && systemctl  restart docker.socket 
    

    2.3 docker启动

    docker.jpg

    三、Docker常用命令介绍

    • docker image
    docker image ls    # 列出镜像,等同于docker images
    docker image history IMAGE    # 查看镜像历史信息
    docker image inspect IMAGE    # 查看镜像详细信息
    docker image load -i *.tar.gz    # 加载镜像,等同于docker load
    docker image prune    # 删除没有使用的镜像
    docker image pull IMAGE    # 拉取镜像,等同于docker pull
    docker image rm IMAGE    # 删除镜像,等同于docker rmi
    docker image save IMAGE  -o IMAGE.tar.gz    # 保存镜像为tar包,等同于docker save
    docker image tag IMAGE newIMAGE    # 为镜像打标签
    
    • docker system
    docker system df    # 查看docker使用磁盘信息
    docker system events    # 查看实时事件信息
    docker system info    # 查看docker信息,等同于docker info
    docker system prune    # 删除没有使用的镜像
    
    • docker volume
    docker volume create    # 创建docker卷
    docker volume inspect VOLUME    # 查看docker卷详细信息
    docker volume ls    # 列出docker卷
    docker volume prune    # 删除没有使用的本地卷
    docker volume rm VOLUME    # 删除docker卷
    
    • docker build
    docker build -t IMAGE .    # 指定tag打镜像
    docker build -f PATH .    # 指定Dockerfile文件的位置打镜像
    
    • docker cp
    docker cp CONTAINER:SRC_PATH DEST_PATH    # 从容器拷贝文件到宿主机
    docker cp SRC_PATH CONTAINER:DEST_PATH    # 从宿主机拷贝文件到容器
    
    • docker create
    docker create IMAGE    # 创建一个新容器不运行
    
    • docker exec
    docker exec -i -t CONTAINER bash    # 在运行中的容器执行命令
    
    • docker images
    docker images -a    # 列出镜像信息,等同于docker images
    docker images -q    # 只列出镜像id列
    
    • docker info
    docker info    # 查看docker信息
    
    • docker inspect
    docker inspect CONTAINER    # 查看容器详细信息
    docker inspect -s CONTAINER    # 比容器详细信息多文件大小信息
    
    • docker kill
    docker kill container    # 杀掉正在运行的容器
    
    • docker load
    docker load -i *.tar.gz    # 加载镜像
    
    • docker login
    docker login HARBOR_IP:PORT -uUSER -pPASSWORD    # 指定harbor地址、用户、密码,登陆harbor
    
    • docker logout
    docker logout HARBOR_IP:PORT    # 从镜像仓库中退出登陆
    
    • docker logs
    docker logs -f CONTAINER    # 实时查看容器日志
    docker logs -t CONTAINER    # 列出容器日志时间戳
    
    • docker ps
    docker ps    # 列出正在运行的容器
    docker ps -a    # 列出所有容器
    docker ps -n N    # 列出最近创建的容器(包括所有状态)
    docker ps -l    # 列出最近创建的一个容器
    docker ps -q    # 列出正在运行容器的容器id
    docker ps -s    # 多列出容器文件总大小
    
    • docker pull
    docker pull IMAGE    # 拉取镜像
    
    • docker push
    docker push IMAGE    # 推送镜像
    
    • docker restart
    docker restart CONTAINER    # 重启容器
    
    • docker rm
    docker rm CONTAINER    # 删除容器
    docker rm -f    # 强制删除容器
    
    • docker rmi
    docker rmi IMAGE    # 删除镜像
    
    • docker run
    docker run -itd IMAGE    # 后台运行容器
    
    • docker save
    docker save IMAGE -o IMAGE.tar.gz    # 保存镜像并指定压缩包名字
    
    • docker search
    docker search IMAGE    # 在Docker Hub中搜索镜像
    
    • docker start
    docker start CONTAINER    # 启动停止的容器
    
    • docker stats
    docker stats    # 列出正在运行容器的资源使用信息
    docker stats -a    # 列出所有容器的资源使用信息
    
    • docker stop
    docker stop CONTAINER    # 停止运行中的容器
    
    • docker tag
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]    # 为源镜像创建新的标签
    
    • docker top
    docker top CONTAINER    # 列出容器中运行的进程信息
    
    • docker version
    docker version    # 列出docker版本信息
    

    四、部署单机Harbor

    环境准备

    4.1 安装docker-compose

    mv docker-compose-linux-x86_64 docker-compose    # 需要先上传包
    cp docker-compose /usr/bin/
    chmod +x /usr/bin/docker-compose
    

    4.2 安装harbor

    tar xvf harbor-offline-installer-v2.4.1.tgz    # 需要先上传包
    chmod +x prepare install.sh common.sh
    docker load < harbor.v2.4.1.tar.gz
    cp harbor.yml.tmpl harbor.yml
    

    修改harbor.yml文件

    • 修改第五行 hostname 为主机ip或域名
    • 注释第13行 https
    • 注释第15行 port: 443
    • 修改第34行 harbor_admin_password,设置一个admin用户的密码
    • 修改第47行 data_volume,修改harbor的数据目录
    • 修改第120行 location,修改harbor的日志目录

    启动harbor

    bash install.sh
    docker-compose ps
    
    docker-compose ps.jpg

    4.3 修改harbor地址为可信任源

    cat >> /etc/docker/daemon.json <<EOF
    {
    "insecure-registries": ["HARBOR_IP"]
    }
    EOF
    systemctl restart docker
    docker-compose up -d
    docker login HOSTNAME -uadmin # 要等harbor的容器状态都成为running (healthy)再登陆,不然可能会登陆失败
    
    docker login.jpg

    五、部署基于负载均衡的Harbor高可用

    环境准备

    5.1 创建项目并添加复制策略

        两个harbor添加方式一样

    • 点击项目,新建项目,项目类型选择公开,点击确定


      create project.jpg
    • 点击系统管理,仓库管理,新建目标,验证远程证书去掉勾选,输入目标URL和用户名密码后,点击测试连接,显示测试连接成功,点击确定


      create registry.jpg
    • 点击系统管理,复制管理,新建规则,复制模式选择默认的Push-based,触发模式选择事件驱动,勾选删除本地资源时同时也删除远程的资源,点击确定


      add duplicate.jpg

    5.2 部署haproxy

        由于需要haproxy需要用到lua,所以要先下载lua并编译

    apt install  gcc make libreadline-dev libsystemd-dev zlib1g-dev libpcre3 libpcre3-dev libssl-dev
    curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz
    tar zxf lua-5.4.3.tar.gz
    cd lua-5.4.3
    make all test
    tar xf haproxy-2.4.10.tar.gz    # 需要先上传包
    cd haproxy-2.4.10
    make ARCH=x86_64 TARGET=linux-glibc USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 \
    USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src LUA_LIB=/usr/local/src/lua-5.4.3/src \
    prefix=/usr/local/haproxy    # 注意修改lua源码目录
    make install PREFIX=/usr/local/haproxy
    cp haproxy /usr/sbin/
    
    cat >> /lib/systemd/system/haproxy.service <<EOF
    [Unit]
    Description=HAProxy Load Balancer
    After=syslog.target network.target
    [Service]
    ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
    ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    [Install]
    WantedBy=multi-user.target
    EOF
    
    useradd haproxy -s /sbin/nologin
    mkdir -p /var/lib/haproxy/
    cat >> /etc/haproxy/haproxy.cfg <<EOF
    global
        chroot /usr/local/haproxy
        user haproxy
        group haproxy
        maxconn 5000
        daemon
        pidfile /var/lib/haproxy/haproxy.pid
        stats socket /tmp/haproxy-fe.sock mode 666 level admin
    
    defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        option  httpclose
        retries 3
        maxconn 4000
        timeout connect 5000
        timeout client  50000
        timeout server  50000
    
    listen stats
        mode http
        bind *:8001
        stats uri /
        stats admin if TRUE
        stats refresh 10s
    
    listen harbor_ha
        bind HARBOR_VIP:PORT
        mode http
        balance source
        server harbor1 HARBOR1_IP:PORT check inter 2s fall 3 rise 5
        server harbor2 HARBOR2_IP:PORT check inter 2s fall 3 rise 5
    EOF
    
    systemctl start haproxy
    vim /etc/docker/daemon.json
    {
     "insecure-registries":["HARBOR_VIP:PORT"]
    }
    systemctl restart docker
    docker-compose start
    docker login HARBOR_VIP:PORT -uadmin
    
    docker login.jpg

    5.3 测试harbor的高可用

    • 推送一个镜像
    docker pull alpine:latest
    docker tag alpine HARBOR_VIP:PORT/PROJECT/alpine:latest
    docker push HARBOR_VIP:PORT/PROJECT/alpine:latest
    
    • 拉取镜像测试
    docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
    
    pull image.jpg
    • 停掉一个harbor拉取镜像测试
    docker-compose stop
    docker-compose ps
    docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
    
    pull image.jpg
    • 停掉两个harbor拉取镜像测试
    docker-compose stop
    docker-compose ps
    docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
    
    stop two pull image.jpg
    • 起一个harbor拉取镜像测试


      start one pull image.jpg

        搭建完成,完结撒花❀❀❀!!!

    相关文章

      网友评论

        本文标题:Docker安装和Harbor高可用部署

        本文链接:https://www.haomeiwen.com/subject/zgnpqrtx.html