什么是docker swarm :
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
###知识点补充
docker  service  rm   web    ##删除服务web
当删除服务时,删除不了别名称,可以删除他的ip号
docker  rmi  ip号码
kubernetes的下载地址
https://mirror.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 同步时间的操作
vim   /etc/chrony.conf
server 172.25.17.250 iburst    ##同步时间
allow 172.25.17.0/16  ##允许谁来更新
systemctl   restart  chronyd
在企业7中,改主机名为/etc/hostname  在这里改主机名
iptables -t nat -nL   ##可以看见网络是怎么走的
iptables -t nat  -I POSTROUTING -s 172.25.17.0/24  -j MASQUERADE ##iptables可以通网络
在虚拟机增加网关,route add  default  gw 172.25.17.250
在虚拟机删除网关,route del   default  gw 172.25.17.250
在联网的情况下,列出安装包
yum  list  docker-ce  ##只显示最新安装包
yum  list docker-ce --showduplicates  ##列出所有版本的安装包
yum  list docker-ce --showduplicates  | sort -r ##列出所有版本的安装包,且排序
yum  install  -y  yum-utils  ##为了下载yumdownloader这条命令
yumdownloader  docker-ce-18.06.1.ce-3.el7  ##从网上下载安装包,并没有安装
##首先开启3个虚拟机,在3个虚拟机都做
关闭firewalld ,  selinux,查看解析/etc/hosts/,时间同步
从250的docker里面下载所有,并且删除版本号比较低的
rm -fr docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
yum  install  -y  *.rpm  ##所有下载,解决依赖性
systemctl  start  docker
systemctl  enable docker
docker version /docker -v #查看版本
docker info ##查看宿主信息
yum  install  -y  bash-*  ##下载这个包,可以让命令补齐,但是一定要退出,再进去,就可以补齐了
docker  swarm init  ####开启docker的swarm,让其初始化,在这条命令执行完成之后,会有所显示一条命令,在将他复制到另外两个虚拟机中,则另外两个虚拟机为slave,执行docker swarm init 的为leader

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_02


docker node  ls  ##在主leader里面查看节点,可以发现谁是leader

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_03


###如果虚拟机能上网,则从aliyun下载nginx

cd   /etc/docker

vim  daemon.json

#aliyun给你分配的ip

systemctl  daemon-reload

systemctl   restart  docker##一定要先重启slave,在重启master,否则回报错

yum   search  nginx

yum  pull nginx  ##三个节点都下

或者从真机直接scp,

docker  load  -i  nginx.tar

docker images  #查看有的镜像 ##三个虚拟机都要有nginx

docker service  create --name web -p 80:80 --replicas  3 nginx ##开启3个服务

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_04


只在leader上面做,slave不用做

docker service ls  ##显示服务

docker service ps web #####显示开启的所有服务

docker  network ls   ##显示运行的网络,发现他为service增加了新的桥接

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_05

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_06


####在物理机中做

curl 172.25.17.11   ##因为有端口映射,所以可以写物理机的ip

curl 172.25.17.12

curl 172.25.17.13

##在3个虚拟机中做

docker ps ###可以显示web几在这个虚拟机中开

vim   index.html  ##写测试网页

docker cp  index.html  PORTS:/usr/share/nginx/html ##这里的PORTS可以由docker ps得到

#####在物理机中做

for i in {1..10};do curl 172.25.17.11;done  ##发现轮询

for i in {1..10};do curl 172.25.17.12;done  ##发现轮询

for i in {1..10};do curl 172.25.17.13;done  ##发现轮询

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_07


###得到一个监控页面的脚本visualizer.tar,在主leader上面做

docker load -i  visualizer.tar

docker images

docker service create \

  --name=viz \

  --publish=8080:8080/tcp \

  --cnotallow=node.role==manager \

  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \

  dockersamples/visualizer

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_08


docker ps  ##看跑的服务有哪些,发现新增了服务,在leader里面看。有没有新的进程

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_09


###在浏览器

http://172.25.17.11:8080  ##进入到监控页面,###填写有监控的ip

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_10


在主leader上面做

docker service scale web=6  #扩展服务,在浏览器上发现多了服务

docker  ps  ##在三个虚拟机中都做,看6个服务是咋分配的

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_11


vim   index.html  ##写测试网页

docker cp  index.html  PORTS:/usr/share/nginx/html ##这里的PORTS可以由docker ps得到

#####在物理机中做

for i in {1..10};do curl 172.25.17.11;done  ##发现轮询

for i in {1..10};do curl 172.25.17.12;done  ##发现轮询

for i in {1..10};do curl 172.25.17.13;done  ##发现轮询

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_12


docker service scale web=9  #扩展服务,在浏览器上发现多了服务,当缩减时,不是按顺序缩减的,而是随机缩减的,留下指定的数字即可

docker service ps web  #######显示开启的所有服务

###在某一个虚拟机中做,让他停掉服务,看到他上面的服务均衡到其他两个好的上面,

systemctl  stop  docker在开启服务之时,systemct  start  docker ,发现服务并不会票,在新增服务之时,系统会自动为停掉的虚拟机分配任务,使3个节点达到平衡

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_13


docker service scale web=12   ##进行扩增服务,发现原来停掉的会有服务上线

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_14

 

 

#####给服务跟新版本,但是一般不一次性更新完成,滚动更新,防止节点出现问题,
因为真机原来我们封装过镜像,所以我们就用封装过的镜像代替
首先开启真机docker
systemctl   start   docker
docker  images
docker  run  -d  --name  vm1  nginx:v1  ##这是在测试v1好着每
docker  ps   ##他应该在跑,没有跑说明报错
docker  inspect   vm1   ##产看他的ip
curl   ip号码####能看见nginx/httpd的页面就是好的
docker  rm -f  vm1   ##删除刚才建立的
docker save  nginx:v1  -o  nginx1.tar
ll  nginx1.tar
scp   nginx1.tar   172.25.17.11:/root
scp   nginx1.tar   172.25.17.12:/root
scp   nginx1.tar   172.25.17.13:/root
###在新开的三个虚拟机中都做
docker  load  -i  nginx1.tar
docker  images   ###看到新加的脚本
docker  service  update  --image nginx:v1  --update-delay 2s  --update-parallelism  3 web  ##允许更新镜像为nginx:v1,更新时间为2秒,一次性更新3个
###然后我们去浏览器里面看,发现他每3个3个更新

####kubnet的搭建
因为先前用swarm搭建的,所以我们要对他进行清除
docker   service  rm  web
docker   service   rm  viz  ##进入浏览器发现全部都没有了
docker  node   ls   ##发现节点都在
###在每一个相应的服务下删除对应的节点
##先在slave下删除节点
docker  swarm   leave

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_15


##在删除master下的节点,因为他时主master,所以要加-f

docker   swarm   leave  -f

##在3个节点都进行测试

docker  node  ls   ##应该告诉你没有节点,则为正确

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_16


systemctl   restart  docker

docker   network  ls   ##我们要删除系统为她自动加的网桥

docker   network  rm  docker_gwbridge

yum  install  -y  kubelet  kubeadm  kubectl  -y ##因为下载之后系统会自动删除,我们要他的缓存,所以我们要改正下列的文件,此时一定要改yum源

vim  /etc/yum.conf

##将keepcache=1改正

cd   /var/cache/yum/x86_64/7server/k8s/packages/

ls  ##显现的东西就是下载的包,我们把他放在k8s目录下

我们在3个虚拟机都做

mirror   k8s

yum  install    *.rpm

systemctl    enable  kubelet

systemctl   start   kubelet

cat <<EOF >  /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_17


sysctl --system

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_18


###在主leader上面做

kubeadm config images  list  ##发现了好多包,网上拉取肯定找不到

Kubernetes service 和 ingress区别 kubernetes和docker swarm_docker_19


本地就有包在k8s里面

docker  load  -i kube-controller-manager.tar

docker  load  -i kube-proxy.tar

docker  load  -i kube-scheduler.tar

docker  load   -i  etcd.tar

docker  load  -i  flannel.tar

docker  load  -i  pause.tar

docker  load  -i  coredns.tar

docker  load  -i   kube-apiserver.tar

swapoff  -a   ##关闭swap分区

swapon  -s  ##刷新会不会出现swap分区,这是为了验证

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_20


free  -m   ##查看内存大小,发现swap分区为0,则为正确

vim  /etc/fstab

##注释关于swap的

vim     /etc/sysctl.d/k8s.conf

vm.swappiness=0

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_21


sysctl --system

kubeadm  init --apiserver-advertise-address=172.25.17.11  --pod-network-cidr=10.244.0.0/16  ##地址填你主leader的地址,network就按写的填,只执行一次初始化就行,不要反复执行,

##另外开一个shell,连接主leader

useradd k8s

vim   /etc/sudoers   ##给他做授权

##在root授权下面写

k8s  ALL=(ALL)    NOPASSWD: ALL

su  - k8s

mkdir  -p  $HOME/.kube

sudo  cp -i  /etc/kubernetes/admin.conf   $HOME/.kube/config

sudo  chown $(id -u):(id -g) $HOME/.kube/config  ##从初始化命令得到

Kubernetes service 和 ingress区别 kubernetes和docker swarm_vim_22


kubectl  get  cs

kubectl   get  nodes  ##查看节点,发现为NOTREADY

kubectl apply  -f kube-flannel.yml的路径,####下载插件的位置,我们一般把它放在普通用户下,

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_23


kubectl  get  nodes  ##查看节点,发现节点是准备好的

scp  flannel.tar  kube-proxy.tar  pause.tar  root@172.25.17.12:

scp  flannel.tar  kube-proxy.tar  pause.tar  root@172.25.17.13: ##将这3个软件包发送到其他节点

##现在做的是让其他节点也准备好

在server12里面做

swapoff  -a

swapon  -s

vim  /etc/fstab

##注释swap的

vim   /etc/sysctl.d/k8s.conf

vm.swappiness=0

sysctl --system

docker  load  -i  flannel.tar

docker  load  -i   kube-proxy.tar

docker  load  -i   pause.tar

modprobe  ip_vs_sh

modprobe   ip_vs_wrr

yum  install   ipvsadm

kubeadm  join  172.25.17.14:6443  --token  35oj3e.y7.......###从主leader里面得到的命令,加入节点

####在server13中做

docker  load  -i  flannel.tar

docker  load  -i   kube-proxy.tar

docker  load  -i   pause.tar

vim   /etc/sysctl.d/k8s.conf

vm.swappiness=0

sysctl --system

swapoff  -a

swapon  -s

vim  /etc/fstab

##注释swap的

modprobe  ip_vs_sh

modprobe   ip_vs_wrr

yum  install   ipvsadm

kubeadm  join  172.25.17.14:6443  --token  35oj3e.y7.......###从主leader里面得到的命令,加入节点###如果报错,则可能要下载网关,yum  install    net-tools  -y    route  add  default  gw   172.25.17.250,则就好了,物理机网关

###在主leader上面做

kubectl  get  nodes    ##一定要在普通用户下做,看到的节点为ready,则为正确

Kubernetes service 和 ingress区别 kubernetes和docker swarm_nginx_24


kubectl   get  pod  --all-namespaces   

source  <(kubectl  completion  bash) > .bashrc  #导入环境变量,kubnetets就能补全命令了