什么是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 node ls ##在主leader里面查看节点,可以发现谁是leader
###如果虚拟机能上网,则从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个服务
只在leader上面做,slave不用做
docker service ls ##显示服务
docker service ps web #####显示开启的所有服务
docker network ls ##显示运行的网络,发现他为service增加了新的桥接
####在物理机中做
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 ##发现轮询
###得到一个监控页面的脚本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 ps ##看跑的服务有哪些,发现新增了服务,在leader里面看。有没有新的进程
###在浏览器
http://172.25.17.11:8080 ##进入到监控页面,###填写有监控的ip
在主leader上面做
docker service scale web=6 #扩展服务,在浏览器上发现多了服务
docker ps ##在三个虚拟机中都做,看6个服务是咋分配的
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 service scale web=9 #扩展服务,在浏览器上发现多了服务,当缩减时,不是按顺序缩减的,而是随机缩减的,留下指定的数字即可
docker service ps web #######显示开启的所有服务
###在某一个虚拟机中做,让他停掉服务,看到他上面的服务均衡到其他两个好的上面,
systemctl stop docker在开启服务之时,systemct start docker ,发现服务并不会票,在新增服务之时,系统会自动为停掉的虚拟机分配任务,使3个节点达到平衡
docker service scale web=12 ##进行扩增服务,发现原来停掉的会有服务上线
#####给服务跟新版本,但是一般不一次性更新完成,滚动更新,防止节点出现问题,
因为真机原来我们封装过镜像,所以我们就用封装过的镜像代替
首先开启真机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 <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
###在主leader上面做
kubeadm config images list ##发现了好多包,网上拉取肯定找不到
本地就有包在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分区,这是为了验证
free -m ##查看内存大小,发现swap分区为0,则为正确
vim /etc/fstab
##注释关于swap的
vim /etc/sysctl.d/k8s.conf
vm.swappiness=0
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 ##从初始化命令得到
kubectl get cs
kubectl get nodes ##查看节点,发现为NOTREADY
kubectl apply -f kube-flannel.yml的路径,####下载插件的位置,我们一般把它放在普通用户下,
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就能补全命令了