Docker-swarmクラスタの導入とjenkins-CICDの使用


一.Docker配備

yum  install -y yum-utils  device-mapper-persistent-data  lvm2


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


yum makecache fast


yum install docker-ce


service docker start

vim /usr/lib/systemd/system/docker.service
#  
--graph /data/docker --storage-driver=overlay
systemctl daemon-reload
service docker restart

二.Docker-swarmクラスタの構築
1.管理ノードとしてノードを選択

[root@jenkins-master ~]#docker swarm init --advertise-addr 192.168.0.46

docker swarm join-token worker           token          
[root@jenkins-master ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5vzw37ummd0h863jddbig798pbq3jpgoepf95g4uenodwhtc7v-543arzx838nj0pgo2yujyfko4 \
    192.168.0.46:2377
  • ノードをswarmクラスタに追加する(各ノードマシンで実行する)
  • .
    [root@jenkins47~]# docker swarm join --token SWMTKN-1-5vzw37ummd0h863jddbig798pbq3jpgoepf95g4uenodwhtc7v-543arzx838nj0pgo2yujyfko4 192.168.0.46:2377
  • クラスタノード情報を表示する
  • [root@jenkins-master ~]# docker node ls
    ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
    5s0spx5wonjgsl8k63vfybq1v    zabbix.xxxx    Ready   Active        
    ttfs9upr4bmhyt9ssfxfixkwm    jenkins47       Ready   Active        
    uc40c8karvu3pq2eupllyicz8 *  jenkins-master  Ready   Active        Leader

    三.Docker-swarm内部network,nginxなどの構成
    1.ミラーウェアハウスの作成
  • ミラーウェアハウスの作成(ドメイン名証明書は省略)
  • 
    docker run -d --name basic-registry --net=skong -p 5000 -v /data/registry:/var/lib/registry -v /data/web/certs:/certs  registry:latest
    

    2.network作成
  • クラスタのnetwork
  • を作成
    docker network create -d overlay --subnet=10.0.1.0/24 --attachable sk-net
    3.swarmクラスタ内部nginxコンテナ作成
  • コンテナのnetworkにおけるnginxコンテナ
  • を作成する
    docker run -d --name nginx --net=sk-net -p 80:80 -p 443:443 -v /data/web/xxxx:/data/conf -v /data/web/certs:/data/ssl basic-registry.xxxx.com/xxx/nginx
    

    nginxのプロファイルを外にマウントして、いつでも変更が有効になるようにする必要があります.
    四.swarmクラスタでのサービス作成使用
    1.サービス作成
  • サービス作成
  • docker service create --name sk_resource --hostname sk_resource --network sk-net registry.xxxx.com/sk_runtime:master
    
    

    swarmではserviceの概念はnginxのupstreamに似ており、複数のコンテナを構成しながら高可用性の機能を持つことができ、service nameはswarmのnetworkでホスト名/ipと理解できる.
    
    server {
        listen 80;
        server_name dev-test.xxxx.com;
        access_log /data/nginx/logs/ll.log main;
        
        location / {
        proxy_pass http://sk_resource;    
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffer_size 16k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_buffering on;
        proxy_busy_buffers_size 64k;
        proxy_max_temp_file_size 1024m;
        }
    }
    
    

    五.Jenkinsはコンテナクラスタの更新サービスに協力する
    1.サービス作成
  • ansibleリモートdocker master更新サービスミラー
  • 
    ansible 192.168.2.10 -m shell -a 'docker service update --image registry.xxxx.com/sk_runtime:beta1.0  sk_resource'