docker的swarm和kubernetes

什么是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

docker的swarm和kubernetes_第1张图片


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

docker的swarm和kubernetes_第2张图片
###如果虚拟机能上网,则从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个服务

docker的swarm和kubernetes_第3张图片
只在leader上面做,slave不用做
docker service ls  ##显示服务
docker service ps web #####显示开启的所有服务
docker  network ls   ##显示运行的网络,发现他为service增加了新的桥接

docker的swarm和kubernetes_第4张图片

docker的swarm和kubernetes_第5张图片
####在物理机中做
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  ##发现轮询

docker的swarm和kubernetes_第6张图片
###得到一个监控页面的脚本visualizer.tar,在主leader上面做
docker load -i  visualizer.tar
docker images
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

docker的swarm和kubernetes_第7张图片
docker ps  ##看跑的服务有哪些,发现新增了服务,在leader里面看。有没有新的进程

docker的swarm和kubernetes_第8张图片
###在浏览器
http://172.25.17.11:8080  ##进入到监控页面,###填写有监控的ip

docker的swarm和kubernetes_第9张图片
在主leader上面做
docker service scale web=6  #扩展服务,在浏览器上发现多了服务
docker  ps  ##在三个虚拟机中都做,看6个服务是咋分配的

docker的swarm和kubernetes_第10张图片
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  ##发现轮询

docker的swarm和kubernetes_第11张图片
docker service scale web=9  #扩展服务,在浏览器上发现多了服务,当缩减时,不是按顺序缩减的,而是随机缩减的,留下指定的数字即可
docker service ps web  #######显示开启的所有服务
###在某一个虚拟机中做,让他停掉服务,看到他上面的服务均衡到其他两个好的上面,
systemctl  stop  docker在开启服务之时,systemct  start  docker ,发现服务并不会票,在新增服务之时,系统会自动为停掉的虚拟机分配任务,使3个节点达到平衡

docker的swarm和kubernetes_第12张图片
docker service scale web=12   ##进行扩增服务,发现原来停掉的会有服务上线

docker的swarm和kubernetes_第13张图片

 

 

#####给服务跟新版本,但是一般不一次性更新完成,滚动更新,防止节点出现问题,
因为真机原来我们封装过镜像,所以我们就用封装过的镜像代替
首先开启真机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


##在删除master下的节点,因为他时主master,所以要加-f
docker   swarm   leave  -f
##在3个节点都进行测试
docker  node  ls   ##应该告诉你没有节点,则为正确


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 <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF


sysctl --system

docker的swarm和kubernetes_第14张图片
###在主leader上面做
kubeadm config images  list  ##发现了好多包,网上拉取肯定找不到

docker的swarm和kubernetes_第15张图片
本地就有包在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分区,这是为了验证

docker的swarm和kubernetes_第16张图片
free  -m   ##查看内存大小,发现swap分区为0,则为正确
vim  /etc/fstab
##注释关于swap的
vim     /etc/sysctl.d/k8s.conf
vm.swappiness=0

docker的swarm和kubernetes_第17张图片
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  ##从初始化命令得到

docker的swarm和kubernetes_第18张图片
kubectl  get  cs
kubectl   get  nodes  ##查看节点,发现为NOTREADY
kubectl apply  -f kube-flannel.yml的路径,####下载插件的位置,我们一般把它放在普通用户下,

docker的swarm和kubernetes_第19张图片
kubectl  get  nodes  ##查看节点,发现节点是准备好的
scp  flannel.tar  kube-proxy.tar  pause.tar  [email protected]:
scp  flannel.tar  kube-proxy.tar  pause.tar  [email protected]: ##将这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,则为正确


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

 

 

你可能感兴趣的:(docker的swarm和kubernetes)