K8s

Docker安装和Harbor高可用部署

2021-12-30  本文已影响0人  Walker_7797

一、Namespace和cgroup介绍

1.1 Namespace

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

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

启动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添加方式一样

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
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
pull image.jpg
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
stop two pull image.jpg

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

上一篇下一篇

猜你喜欢

热点阅读