Docker swarm集群部署

本文详细介绍了Docker Swarm和Kubernetes的集群搭建过程,包括Swarm集群的创建、服务部署、滚动更新、高可用测试以及Kubernetes的环境配置、节点管理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker swarm

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
Swarm优点:
1).任何规模都有高性能表现
2)灵活的容器调度
3)服务的持续可用性
4)和 Docker API 及整合支持的兼容性
5)Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持

创建 Swarm 集群

环境:
foundation24 172.25.24.250 swarm manager
Server1 172.25.24.1 swarm agent
Server2 172.25.24.2 swarm agent
三台主机安装docker

Manage节点创建集群

docker swarm init --advertise-addr 172.25.24.250  #如果你的 Docker 有多个 IP,必须使用 --advertise-addr 指定 IP

在这里插入图片描述

docker swarm join-token worker       #查看加入集群命令

在这里插入图片描述

Server1与server2加入集群

docker swarm join --token SWMTKN-1-0miktplc6qkpa51bi0bv2ni2z8vzby3sjfu8i0jwlg2os4o242-3jlkoxy0p09wthkor6g5i5xve 172.25.24.250:2377

在这里插入图片描述在这里插入图片描述

在manage节点查看集群节点信息

docker node ls

在这里插入图片描述

在集群中部署nginx
因为虚拟机没有网,所以我们使用manage节点的私有仓库

manage节点创建私有仓库

docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2.3.1
创建并上传镜像
docker tag nginx:latest 172.25.24.250:5000/nginx
docker push 172.25.24.250:5000/nginx

在这里插入图片描述

在server1与server2节点指定私有仓库

vim /etc/docker/daemon.json
{
  "insecure-registries": ["172.25.24.250:5000"]
}

systemctl restart docker.service

在这里插入图片描述
在这里插入图片描述

docker service create --name nginx --publish 80:80 --replicas 3 172.25.24.250:5000/nginx       #部署服务
docker service ps nginx    #查看各节点信息

在这里插入图片描述
给每个容器写一个发布页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试:
可以发现自带负载均衡

for i in {1..10}; do curl 172.25.24.250;done

在这里插入图片描述

添加图形监控页面
docker load -i visualizer.tar

在这里插入图片描述

docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer

在这里插入图片描述

浏览器访问foundation24 的ip:8080
在这里插入图片描述

集群中容器可以拉神或缩减

拉伸

docker service scale nginx=6         

可以发现新增的三个容器被分到了不同的节点
在这里插入图片描述

查看监控页面
在这里插入图片描述

给新加的三个容器写一个发布页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试:
可以发现新加的容器也实现了负载均衡
在这里插入图片描述

缩减

docker service scale nginx=3

在这里插入图片描述

查看监控页面:
在这里插入图片描述

高可用测试:

关闭server2上的docker
在这里插入图片描述
查看监控页面可以发现之前server2上的容器已被其他节点接管
在这里插入图片描述

再次启动server2,server2不会主动加入集群
在这里插入图片描述
在这里插入图片描述
再次拉伸集群

docker service scale nginx=9

在这里插入图片描述
查看监控页面可以发现server2与其他节点各接管三个容器
在这里插入图片描述

Swarm集群滚动更新
vim Dockerfile

FROM nginx as base

# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base

COPY --from=base /opt /

EXPOSE 80
COPY index.html /usr/share/nginx/html
ENTRYPOINT ["nginx", "-g", "daemon off;"]

cat index.html 
www.westos.org

docker build -t nginx:v1 .

在这里插入图片描述

在私有仓库中上传nginx:v1

docker tag nginx:v1 172.25.24.250:5000/nginx:v1
docker push 172.25.24.250:5000/nginx:v1

在这里插入图片描述

更新

docker service scale nginx=30    #拉伸集群以便观察效果

在这里插入图片描述

docker service update --image 172.25.24.250:5000/nginx:v1 --update-delay 3s --update-parallelism 3 nginx        #更新,--update-delay 更新间隔时间 ,--update-parallelism 每次更新的容器数量

在这里插入图片描述

查看监控页面,红点的容器表示正在更新
在这里插入图片描述

Swarm集群服务删除及退出
docker service rm nginx 
docker service rm  viz

在这里插入图片描述

其他节点

docker swarm leave

在这里插入图片描述
在这里插入图片描述

Swarm leader节点

docker swarm leave --force 

在这里插入图片描述

各个节点删除创建服务时新建的网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubernetes

环境:
Server1 172.25.24.1
Server2 172.25.24.2
Server3 172.25.24.3

各节点安装软件包
在这里插入图片描述

opsx.alibaba.com 阿里镜像站
注:将/etc/yum.conf中的keepcache修改为1,我们在安装软件包时会保留缓存,可在/var/cache/yum/x86_64/7Server中查看

systemctl enable kubelet && systemctl start kubelet

创建/etc/sysctl.d/k8s.conf

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

在这里插入图片描述

kubeadm config images list       #查看各镜像版本

在这里插入图片描述

导入以下镜像
在这里插入图片描述
在这里插入图片描述

禁掉swap分区

swapoff -a
tail -n 1 /etc/fstab    #注释掉swap自动挂载

在这里插入图片描述

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0

在这里插入图片描述

集群初始化

kubeadm init --apiserver-advertise-address=172.25.24.1 --pod-network-cidr=10.244.0.0/16     #--apiserver-advertise-address指定ip  ,--pod-network-cidr 此地址是固定的

在这里插入图片描述

vim /etc/sudoers

在这里插入图片描述

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get cs

在这里插入图片描述

source <(kubectl completion bash) > .bashrc    #添加环境变量,方便使用

在这里插入图片描述

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #需要机器可以上网
在这里插入图片描述

查看节点信息

kubectl get nodes  

在这里插入图片描述

Server2

systemctl enable kubelet.service 
systemctl start kubelet.service 

导入镜像
在这里插入图片描述

禁掉swap分区

swapoff -a
tail -n 1 /etc/fstab    #注释掉swap自动挂载

在这里插入图片描述

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0

sysctl --system

在这里插入图片描述
导入模块

modprobe ip_vs_sh
modprobe ip_vs_wrr

在这里插入图片描述

加入集群
kubeadm join 172.25.24.1:6443 --token zcshn2.q0uzqibfjdqbb85o --discovery-token-ca-cert-hash sha256:d0cd898f60d937bfbe63cd17380c56140a23e9461d6ec0d2078871bccd7cf4a4

若出现此报错,需要添加网关
在这里插入图片描述
在这里插入图片描述

在master节点查看

kubectl get nodes

在这里插入图片描述

Server3配置同server2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值