docker-学习总结(docker-machine与k8s引发的问题学习)

文章目录

  • 引发的问题
    • 问题由来
    • 问题解决过程
  • 问题后学习
    • 罪魁祸首哪里来的
    • docker-machine的学习总结

引发的问题

问题由来

  • 在使用docker-machine的方式给虚拟服务器安装docker环境后,希望在虚拟服务器上安装k8s软件,进行k8s学习,但是安装准备环节,报错了提示docker无法运行,在查看报错提示后,查看报错内容
Feb 20 03:35:40 node3 dockerd: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: storage-driver: (from flag: devicemapper, from file: overlay2)

  • 报错提示在指示storage-driver在标识和文件中出来了2次,也就是docker运行中一个指标出现了2个标识,当然不能运行-可为什么现冲突呢,又在什么地方冲突的呢,damon.json文件中的标识是我加入的
  • 为什么是daemon.json配置,因为k8s需要在使用前需要修改docker运行配置,而修改内容为官方提供的,是在daemon.json中添加一段代码
"exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",							#此处为报错冲突的地方
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
  • 而flag标识又是哪里出现的呢,问题来了

问题解决过程

  • 问题冲突的配置文件:
/etc/systemd/system/docker.service.d/10-machine.conf
  • 文件中的内容,存在一个--storage-driver
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
Environment=
  • 所以出现在两个配置信息,删除一个,保留deamon.json中的,毕竟我是要做k8s练习,同时devicemapper也是不合适的驱动
  • 再次重启服务,可以了,可以继续安装k8s了

问题后学习

罪魁祸首哪里来的

  • 这个/etc/systemd/system/docker.service.d/10-machine.conf文件哪里来的
  • 在网上学习过程中,发现10-machine.conf是docker-machine配置给节点的,这个就引发了对docker-machine的深入学习

docker-machine的学习总结

  1. docker-machine结构
    • docker-machine是通过 Docker 客户端要和 Docker daemon 通过 REST API 通信,所以在通信时,一端发送,而另一段需要监听,但是如何让另一端监听信息呢,于是就有了10-machine.conf,这个配置文件,让systemd在启动进程dockerd的时候,添加具体监听信息
  2. 分析10-machine.conf文件中的内容
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
Environment=
#systemd格式就不阐述了,说下其中相关参数
#/usr/bin/dockerd 运行一个指定的docekr daemon,覆盖 Docker 默认安装时的配置文件,从而以 Docker Machine 指定的方式启动 Docker daemon。通过这种方式拥有一个可以被远程访问的 Docker daemon进程
#-H tcp://0.0.0.0:2376	-H 监听 指定监听的端口和ip地址范围,使用的是tcp协议
#-H unix:///var/run/docker.sock	-H监听 指定监听的unix socket文件
#--storage-driver devicemapper	添加了驱动方式
#--tlsverify	选择tls加密方式
#--tlscacert /etc/docker/ca.pem	tls加密ca证书
#--tlscert /etc/docker/server.pem	tls加密公钥
#--tlskey /etc/docker/server-key.pem	tls加密私钥
#--label provider=generic 标签通用驱动,这个是在docker-machine建立节点时,我们添加的信息
  1. 管理节点中的密钥存放
[root@node1 node2]# pwd
/root/.docker/machine/machines/node2
#docker 会在运行用户下建立存放密钥的目录文件,文件地址层级如上显示
[root@node1 node2]# ls
ca.pem  cert.pem  config.json  key.pem  server-key.pem  server.pem
#包括了所有的密钥以及配置文件
  1. 管理节点创建远程登录管理的环境变量
[root@node1 node2]# docker-machine env repository 
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.27.11:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/node2"
export DOCKER_MACHINE_NAME="node2"
# Run this command to configure your shell: 
# eval $(docker-machine env node2)
#同时可以看出配置的环境变量的具体参数的原因了
  1. 可以看出docker-machine create创建节点的关键点:
    • 管理节点
      • 建立密钥存放以及密钥
      • 创建访问管理的env参数
    • 被管理节点:
      • 创建可以远程访问的dockerd进程

你可能感兴趣的:(Linux运维-企业实战,Docker)