ITPub博客

首页 > 云计算 > > 问答-Docker 的应用场景在哪里?-5

问答-Docker 的应用场景在哪里?-5

作者:浪花小雨滴 时间:2020-05-08 12:15:51 0 删除 编辑
作者:猜丁壳
链接:https://www.zhihu.com/question/22969309/answer/122484056
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在我学习Docker过程中遇到各种各样问题,把一些在实践中遇到的经典问题分享,希望对真实的应用场景有帮助!
1. redis,elasticsearch k8s配置service的域名报主机找不到,配置ip可以?是否是代码封装有问题?

需要运行kubernetes的DNS插件或kube-dns服务。

顺便介绍一下K8s的DNS

SkyDNS:
SkyDNS本来是和Kubernetes没有任何关系的项目,只不过Kubernetes 1.3版本以前的域名服务用的插件是基于SkyDNS的。
Kube-dns:
Kubernetes 1.3之后新增的服务,用来替代过去的域名服务插件。

- 介绍SkyDNS的文章
etcd 和 skydns|木洛七
这是一篇很老的文章,里面提到的Etcd和Etcd-fs的内容随便看一下就好,已经全部过时,不过Skydns的使用部分还适用,并且整体概念介绍还是比较清楚。

- Skydns详细说明还是看官方文档吧
GitHub - skynetservices/skydns: DNS service discovery for etcd

介绍Kube-dns的文章:
kubernetes DNS——kube-dns命令
这篇文章认为kube-dns在kube的功能已完胜skydns,不过skydns可以用『-nameservers』指定一个外部DNS,当搜索的域名不是内网服务的时候,会到这个外部DNS查询,在kube-dns里我没发现等效的参数。有发现这个功能如何实现的同学麻烦告知~


2. 在docker环境跑会出现同步配置文件或者jar冲突,但是在物理机上不报错?想知道大概出现这种情况的原理是怎么样的?

镜像可能存在有多余的jar包,但是怎么进去的需要具体分析


3. k8s集群怎么样监控node是否正常?

Node是属于IaaS层的资源,在k8s管理的范围之外。
可以采用普通的IaaS层监控工具解决,比如:Zabbix Nagios Prometheus …
K8s本身提供了PaaS层以上的监控能力,比如检查容器健康状态的Probe功能


4. docker 网络怎么样固定IP?

单节点的情况 docker run 命令可以用『--ip』参数指定容器IP
跨节点的情况,是否能够指定IP以及如何指定IP与选择的跨节点通信方案有关,比如Weave是可以指定容器IP地址的,Flannel则不行。


5. 如何让docker 容器启动的时候,启动tomcat 服务?

在Dockerfile中通过CMD或ENTRYPOINT指定,比如:
CMD [“bin/catalina run”]
ENTRYPOINT [“bin/catalina run”]

这篇文章对Dockerfile的写法介绍还比较好:
Docker学习笔记(3)-- 如何使用Dockerfile构建镜像

6. 希望视频中利用一个完整的小项目来延时整个流程(比如:wordpress等)

很难找到一个能够覆盖k8s全面功能但是又不至于太复杂的例子
比如wordpress搭建的例子在之后介绍k8s的volume部分会用到,但是它其实只会用到k8s当中很小的一部分功能。


7. 希望搭建一个mysql集群的例子

官方的mysql镜像『https://hub.docker.com/r/_/mysql』可以挂载自定义配置文件,因此实现mysql的方式和主机上差不多,主要就是配置正确。
把数据库放到docker运行一般只会在测试的时候用到,实际的运用中一般不会用docker作mysql的生产环境,也不会用于做集群。


8. 在win7下配vagrant总是报错,在cygwin那一步,能给一个在win7下准备环境的说明文档么?

Win7使用Vagrant时候Cygwin不是必须的,甚至可以说是完全没必要的。
找了一篇比较简单的Vagrant安装的文章:
http://jingyan.baidu.com/article/f0e83a25a8fdb022e591012d.html
在网上找文章时候发现了一篇比较有意思的Vagrant用法,也推荐给大家:
https://codefalling.com/2016/01/24/unix-env-in-windows-with-vagrant/


9. etcd 集群基于 dns 方式时,首先要有个 dns 服务器;而 k8s 服务发现机制也会用到 dns,如何能使两者共用 dns 服务器?dns 服务器单点如何解决?

可以共用。
在 /etc/resolv.conf 配置多个DNS就可以了。
如果非要在DNS服务端做高可用,可以考虑:
- HAProxy负载均衡
- 虚拟IP


10. k8s初学者,对提到的2本参考书,如何与课程相互渗透?

《Kubernetes权威指南》使用的Kuberentes版本比较旧,其中内容很多已经不适用了。建议直接看《Kubernetes实战》,这本书的大部分内容在课程的kubernetes视频部分都会讲到,可以先看视频得到一个k8s的直观印象,对理解书里的命令会有帮助。或者先看书了解概念再通过视频观看这些概念的演示。


11. 有哪些主流PaaS?

Swarmkit
Kuberenetes -> Openshift
Mesos + Marathon
Rancher


12. 从对外服务视角来看,k8s完成一次服务调度的具体流程?

HTTP API -> kubeapiserver -> Etcd
-> kubeschedule (Pod)
-> kubecontroller (Pod/Deployment/Job/Service)
-> kubelet -> docker


13. Docker需要学到什么程度(指容器基础,不包括swarm)?

如果不是对Docker有定制化或者二次开发的需求。将市面上任意一本Docker入门书籍学习完就足够日常使用了。


14. 如何进一步学习CoreOS?

《CoreOS实践之路》书中的大部分内容现在还是适用的,除了Rkt的部分已经发生了很大的变化,Kubernetes部分针对的是1.0版本与当前版本有到一定差异,以及书中Etcd采用的是2.x版本(最新3.x版本的使用方法与2.x完全兼容,只是额外提供了新版本的API)。

Rkt <- nsspawn <- ns/cg
<- phone <- kvm
<- …
Docker <- RunC <- ns/cg
<- RunV <- hpyer <- kvm/xen
Etcd 2.x(HTTP) <- 3.x(Probuf)


15. 我司准备使用docker, 我现在的任务是要将传统的流程改造为docker化的流程,目前我的想法还是先跑单个docker应用,在逐步转换成集群应用。我个人是这么想的,不知能否改进
1)开发人员 push代码到gitlab上
2)jenkins从docker私服(harbor)上pull我定制好的基础镜像。进入容器,然后从gitlab上pull代码到容器中,我们是java应用,在容器中进行编译,最终会编译为一个单独fatjar, 使用jetty运行. 这样代码也在容器里面了。
3)将构建好的镜像推送到远程的机器上,移除以前的容器,启动新的容器。

我的问题是:
1)不知道我设想的流程是否符合docker的最佳实践
2)假设我的流程无大的问题。我从 harbor 上pull了基础镜像,在容器中打包编译后可能文件就有个10多M(200M=150M+10M+20M),然后我将这个镜像推送到各个服务器。总感觉镜像有点大,这样速度很慢。
3)我们现在有多套环境,dev test preprod prod,是否要针对不同的环境构造出不同的镜像。有无更好的多环境方案。

1.符合Docker推荐的构建和发布方式。
2.内网情况拉取镜像基本可以达到几MB/s,每次拉取几十MB一般是可以接受的
采用虚拟机方式部署同样要传这么大一个包到服务器上去,这个是绕不过的。
3.
不同的环境构造出不同的镜像
在一个包中包含所有环境配置,通过启动参数选择(比如springboot的工程)
采用中心化的配置管理(例如spring-configure)


16. kubenetes master节点有什么高可用的方案?

这个目前确实还没做过,查了一下官方文档这方面的内容,发现解释得比较含糊,推荐一篇相对比较靠谱的文章:
Kubernetes高级实践:Master高可用方案设计和踩过的那些坑
这篇是基于HAProxy和Keeplived实现Kubeapiserver的高可用和负载均衡本身高可用的,考虑比较完备,关键还是在这两个服务的配置。


17. kubernetes有什么服务自动发现的框架?

Kubernete本身只用Etcd作存储,和服务自发现无关。
如果是K8s上运行的其他服务需要自发现优先推荐 Etcd / Consul,其次是 Zookeeper


18. 相对来说calico和flannel相比那个更适合使用到beta或者生产环境中?

两个方案目前都已经比较稳定,都可以用于生产环境。
Flannel配置比较简单,出错时候也相对比较容易定位。
Calico的传输效率更高,配置和维护相对复杂。


19. docker0的地址必须要和flannel0的地址在同一个地址段内么?为什么?

需要在同一网段,因为docker0到flannel0的路由是通过路由表的默认网关方式实现的。
eth0(in-container) - docker0 - flannel0 <-> flannel0 - docker0 - eth0(in-container)
参考这篇文章:
DockOne技术分享(十八):一篇文章带你了解Flannel

这个问题欢迎大家提供更详细的解释,网络原理方面我不是特别熟悉。


20. 能不能介绍一下flannel,calio,weave等各网络模型的特点与区别?生产中建议用哪种?

建议是Flannel或Calico,除非在需要固定每个容器IP的时候可以用Weave。
这方面同样希望有对网络比较了解的同学能补充。

我对Weave只使用早期版本,当前情况不太了解了,不过从最近看到过的一些测试数据,Weave依然是各种Overlay工具中效率很低的一种。


21. K8S和Mesos能集成在一起使用吗?

可以,有这个官方项目:
Kubernetes - Kubernetes on Mesos
这个效果以前我的同事测过,可以用,但是在压力测试中的表现比单独使用kubernetes的集群差距很大。这种用法在实际生产上使用的应该不多,Kubernetes文档的介绍仅有这篇,Mesos的文档里完全没提这回事。

22. docker和openstack集成,有没有什么要注意的?

OpenStack之前尝试和docker集成的几个项目(nova-docker/magnum/...)最后似乎都没有做起来,目前比较热门的消息是OpenStack的核心贡献者正在将OpenStack与Kubernetes更好的集成起来:
OpenStack 宣布用 Kubernetes 重写底层编排引擎
这次看起来比较靠谱。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3128969/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 2019SACC讲师申请
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39933