集群列表
主机名 | IP地址 | 备注 |
---|---|---|
k8s1 | 192.168.18.111 | 主节点 |
k8s2 | 192.168.18.112 | node1 |
配置docker启动参数
vim /usr/lib/systemd/system/docker.service
只需要修改复制出来的这一行,其他的不要做任何改变,节点每台机器都要做该修改
ExecStart=/usr/bin/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock
初始化主节点
主节点上运行
[root@k8s1 ~]# docker swarm init --advertise-addr 192.168.18.111
Swarm initialized: current node (3gm03pwvewfrihkvqq9fqvpfq) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-60xixrsu01m0q5v0i5wq00f1klkrm058obsiltsujeujkei3z5-00vbgmqrfdaxhiahy1x5vvo96 192.168.18.111:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
从节点加入集群
复制上面命令命令,到从节点上运行,从节点可以多台机器
[root@k8s2 ~]# docker swarm join --token SWMTKN-1-60xixrsu01m0q5v0i5wq00f1klkrm058obsiltsujeujkei3z5-00vbgmqrfdaxhiahy1x5vvo96 192.168.18.111:2377
This node joined a swarm as a worker
主节点上查看节点运行情况
[root@k8s1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
3gm03pwvewfrihkvqq9fqvpfq * k8s1 Ready Active Leader 18.03.0-ce
jqf5b6kao9cnv7xv01yctpjya k8s2 Ready Active 18.03.0-ce
更多 node相关命令,使用 docker node –help
启动service
使用 docker service create 启动容器,这里那nginx作为测试
[root@k8s1 ~]# docker service create --replicas 1 --name nginx1 nginx
cu380b0g7cwcuv0kx83luehxo
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
## 命令相关说明
--replicas 启动容器个数,多少个分片(多个分片后,自动负载均衡,这一功能应该是参考k8s功能实现)
--name 指定创建服务的名称
service 一键扩容
docker service scale nginx=10
service 在指定机器上创建容器
docker service create --replicas 1 --constraint node.hostname==k8s2 --constraint node.hostname==k8s1 --name nginx nginx
--constraint 指定容器创建的位置,参数值可以是多个
service 在指定多台机器上运行
# 给节点机器新增标签
docker node update --label-add func=docker k8s2
docker node update --label-add func=docker k8s1
# 启动servcie
docker service create --replicas 2 --constraint node.labels.func==docker -p 80:80 --name nginx nginx
挂载目录
1、创建volume
docker volume create nginx #创建
docker volume ls # 查看
docker volume inspect nginx #目录详情
2、挂载容器
--mount type=volume,source=redis,target=/usr/share/nginx/html/,readonly=false
完整命令:
docker service create --replicas 2 --constraint node.labels.func==docker --mount type=volume,source=redis,target=/usr/share/nginx/html/,readonly=false -p 80:80 --name nginx nginx
3、挂载目录
--mount type=bind,source=/data,target=/data,readonly=false
完整命令:
docker service create --replicas 2 --constraint node.labels.func==docker --mount type=bind,source=/data,target=/usr/share/nginx/html/,readonly=false -p 80:80 --name nginx nginx
4、容器互联(overlay)
# 创建网络(overlay)
docker network create -d overlay dnet
# 查看网络信息
docker network inspect dnet
## 这样指定同一网络后,两个容器中可以相互ping通
docker service create --name test --network dnet nginx
容器升级
docker service update --image nginx:1.13.12 nginx
更多命令总结
# 将某个worker节点设置为manage节点
docker node promote k8s2
# 将某个manage节点设置为worker节点
docker node demote k8s2
# service 新增端口映射
docker service update --publish-add 81:81 nginx
# service 删除端口映射
docker service update --publish-rm 81:81 nginx
# 容器新增集群网络
docker service update --network-add lnet nginx
# 容器删除集群网络
docker service update --network-rm lnet nginx
# 指定容器使用的cpu和内存数量
docker service update --reserve-cpu 1 --reserve-memory 256m nginx
# 批量更惨容器,如果多余1个scale,课这样设置更新,让服务可用
docker service update --update-parallelism 2 --image nginx nginx
# 指定容器更新的间隔,单位(ns|us|ms|s|m|h)
docker service update --update-parallelism 1 --update-delay 10s --image nginx nginx
# 指定容器失败后,执行的动作("pause"|"continue"|"rollback")
-update-failure-action
docker-swarm + compose结合
docker-compose.yml文件内容
version: "3.5"
services:
mysql:
ports:
- "3306:3306"
image: mysql
volumes:
- /var/lib/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD="123456"
deploy:
replicas: 1
placement:
constraints:
- node.hostname==docker1
创建命令:(volumes挂载目录,必须存在)
docker stack deploy -c docker-compose.yml m