容器编排
什么是容器编排
容器编排是指容器的集群化管理和容器调度。常有的功能有启动容器,根据资源调动容器所在的位置,会跟踪和监控容器的状态,如果一个容器异常故障,编排系统会重启容器。在部署和更新容器时,如果出现问题,还可以回滚。常用的容器编排系统有Docker swarm 、Kuberbetes等。
Docker swarm简介
Docker swarm架构图
docker 节点(node)
-
manager节点维持集群状态,调动任务,集群服务。manager节点采用raft一致性协议,所以建议至少的2n+1,这个集群会通过raft选举出一位leader。
-
worker节点是真正执行docker容器的节点。manager节点本身也可以是worker节点,当然可以配置成不作为worker节点。worke之间的状态使用gossip分布式是一致性协议,gossip的特性是最终一致性和幂等性,相比于raft,gossip的时效性差一点,但是raft集群数(基于log的状态机复制)是有限制的。
任务(task), 服务(service),容器
例如上图,我们定义了一个http server服务,我们在三个http服务三个实例之间实现负载平衡。上图图显示了具有三个副本的http服务,这三个实例中的每个实例都是集群中的任务。容器是一个孤立的进程。在群体模式模型中,每个任务仅调用一个容器。容器处于活动状态后,调度程序将识别出该任务处于运行状态。
Docker swarm使用
-
初始化集群
#manager docker swarm init -advertise-addr 192.168.99.100 #worker docker swarm join --token XXXX #查看集群 docker node ls $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION itbo6pz5lm94vg21huw22lyxn * ulucu-develop-008.int.uops.cn Ready Active Leader 18.06.1-ce h3gvgyslfg0pxpu5l57s5pn56 wida Ready Active 18.03.1-ce
-
新建服务
#分布式运用部署 #swarm 下面的overlay 网络创建 docker network create -d overlay demo #在使用后才可以在node节点可见 docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network=demo --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql:5.7 docker service create --name wordpress -p 80:80 --network=demo --replicas 3 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql wordpress #查看service 列表 docker service ls #查看某个服务的容器分布情况 docker service ps wordpress #来查看某个服务的日志 docker service logs wordpress
-
更新服务
#service服务伸缩 docker service scale wordpress=5 #拓展到5台 #service 无中断更新 docker service update --image=xxx:2.0 wordpress #service 更新端口 docker service update --public-rm 8080:80 --public-add 8088:80 wordpress
-
删除服务
docker service rm wordpress
-
使用docker stack 我们用一个配置文件描述一组服务,然后docker stack 相关命令管理管理这一组服务。
我们创建问文件docker-compose.yaml
version: "3" services: wordpress: image: wordpress ports: - 80:80 networks: - overlay environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpressdocker stack replicas: 3 db: image: mysql command: --default-authentication-plugin=mysql_native_password networks: - overlay volumes: - db-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress deploy: placement: constraints: [node.role == manager] visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] volumes: db-data: networks: overlay:
stack 管理
#部署服务 docker stack deploy -c docker-compose.yml wordpress #查看stack docker stack ls #docer stack 更新 修改docker-compose.yaml文件 然后直接docker stack deploy -c docker-compose.yaml wordpress #删除stack docker stack down wordpress
Kuberbetes简介
coming soon
Kuberbetes使用
coming soon