Files
CategoryResourceRepost/极客时间专栏/左耳听风/程序员练级攻略/85 | 程序员练级攻略:容器化和自动化运维.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

231 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="85 | 程序员练级攻略:容器化和自动化运维" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a9/f2/a915e847909a38033be1a3251713cef2.mp3"></audio>
这篇文章我们来重点学习 Docker 和 Kubernetes它们已经是分布式架构和自动化运维的必备工具了。对于这两个东西你千万不要害怕因为技术方面都不算复杂只是它们的玩法和传统运维不一样所以你不用担心只要你花上一点时间一定可以学好的。
# Docker
<li>
你可以先看一下Docker的官方介绍 [Docker Overview](https://docs.docker.com/engine/docker-overview/) 。
</li>
<li>
然后再去一个Web在线的Playground上体验一下 [Katacoda Docker Playground](https://www.katacoda.com/courses/docker/playground) 或者是 [Play With Docker](https://training.play-with-docker.com/) 。
</li>
<li>
接下来,跟着 [Learn Docker](https://github.com/dwyl/learn-docker) 这个文档中的教程自己安装一个Docker的环境实操一把。
</li>
<li>
然后跟着 [Docker Curriculum](https://docker-curriculum.com/) 这个超详细的教程玩一下Docker。
</li>
有了上述的一些感性体会之后你就可以阅读Docker官方文档 [Docker Documentation](https://docs.docker.com/) 了这是学习Docker最好的方式。
如果你想了解一下Docker的底层技术细节你可以参看我的文章。
- [Docker 基础技术Linux Namespace](https://coolshell.cn/articles/17010.html)
- [Docker 基础技术Linux Namespace](https://coolshell.cn/articles/17029.html)
- [Docker 基础技术Cgroup](https://coolshell.cn/articles/17049.html)
- [Docker 基础技术AUFS](https://coolshell.cn/articles/17061.html)
- [Docker 基础技术DeviceMapper](https://coolshell.cn/articles/17200.html)
还有一些不错的与Docker网络有关的文章你需要阅读及实践一下。
- [A container networking overview](https://jvns.ca/blog/2016/12/22/container-networking/)
- [Docker networking 101 - User defined networks](http://www.dasblinkenlichten.com/docker-networking-101-user-defined-networks/)
- [Understanding CNI (Container Networking Interface)](http://www.dasblinkenlichten.com/understanding-cni-container-networking-interface/)
- [Using CNI with Docker](http://www.dasblinkenlichten.com/using-cni-docker/)
Docker有下面几种网络解决方案[Calico](https://www.projectcalico.org/getting-started/docker/) 、[Flannel](https://github.com/coreos/flannel/) 和 [Weave](https://github.com/weaveworks/weave) ,你需要学习一下。另外,还需要学习一下 [netshoot](https://github.com/nicolaka/netshoot) 这是一个很不错的用来诊断Docker网络问题的工具集。
关于这几个容器网络解决方案的性能对比,你可以看一下下面这几篇文章或报告。
<li>
[Battlefield: Calico, Flannel, Weave and Docker Overlay Network](http://chunqi.li/2015/11/15/Battlefield-Calico-Flannel-Weave-and-Docker-Overlay-Network/)
</li>
<li>
[Comparison of Networking Solutions for Kubernetes](http://machinezone.github.io/research/networking-solutions-for-kubernetes/)
</li>
<li>
[Docker Overlay Networks: Performance analysis in high-latency enviroments](http://www.delaat.net/rp/2015-2016/p50/report.pdf)
</li>
如果你对Docker的性能有什么问题的话你可以看一下下面这些文章。
<li>
[IBM Research Report: An Updated Performance Comparison of Virtual Machines and Linux Containers](https://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf)
</li>
<li>
[An Introduction to Docker and Analysis of its Performance](http://paper.ijcsns.org/07_book/201703/20170327.pdf)
</li>
下面是一些和存储相关的文章。
<li>
[Storage Concepts in Docker: Network and Cloud Storage](http://cloud-mechanic.blogspot.de/2014/10/storage-concepts-in-docker-network-and.html)
</li>
<li>
[Storage Concepts in Docker: Persistent Storage](http://cloud-mechanic.blogspot.de/2014/10/storage-concepts-in-docker-persistent.html)
</li>
<li>
[Storage Concepts in Docker: Shared Storage and the VOLUME directive](http://cloud-mechanic.blogspot.de/2014/10/storage-concepts-in-docker.html)
</li>
然后是跟运维相关的文章。
- [Docker Monitoring with the ELK Stack: A Step-by-Step Guide](https://logz.io/learn/docker-monitoring-elk-stack/)
最后,推荐看看 [Valuable Docker Links](http://www.nkode.io/2014/08/24/valuable-docker-links.html) ,其中收集并罗列了一系列非常不错的 Docker 文章。
**最佳实践**
下面分享一些与Docker相关的最佳实践。
<li>
[Best Practices for Dockerfile](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) Docker官方文档里的Dockerfile的最佳实践。
</li>
<li>
[Docker Best Practices](https://github.com/FuriKuri/docker-best-practices) 这里收集汇总了存在于各个地方的使用Docker的建议和实践。
</li>
<li>
[Container Best Practices](http://docs.projectatomic.io/container-best-practices/) 来自Atomic项目是一个介绍容器化应用程序的架构、创建和管理的协作型文档项目。
</li>
<li>
[Eight Docker Development Patterns](http://hokstad.com/docker/patterns) 八个Docker的开发模式共享基础容器、共享同一个卷的多个开发容器、开发工具专用容器、测试环境容器、编译构建容器、防手误的安装容器、默认服务容器、胶黏容器如英文链接不能访问可阅读[中文版本](https://www.infoq.cn/article/2014/10/seven-docker-develop-pattern))。
</li>
# Kubernetes
Kubernetes 是Google开源的容器集群管理系统是Google多年大规模容器管理技术Borg的开源版本也是CNCF最重要的项目之一主要功能包括
- 基于容器的应用部署、维护和滚动升级;
- 负载均衡和服务发现;
- 跨机器和跨地区的集群调度;
- 自动伸缩;
- 无状态服务和有状态服务;
- 广泛的Volume支持
- 插件机制保证扩展性。
Kubernetes发展非常迅速已经成为容器编排领域的领导者。
首先我推荐你阅读Kubernetes前世今生的一篇论文。
- [Borg, Omega, and Kubernetes](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/44843.pdf) 看看Google这十几年来从这三个容器管理系统中得到的经验教训。
学习Kubernetes有两个免费的开源电子书。
<li>
《[Kubernetes Handbook](https://jimmysong.io/kubernetes-handbook/)》这本书记录了作者从零开始学习和使用Kubernetes的心路历程着重于经验分享和总结同时也会有相关的概念解析。希望能够帮助你少踩坑少走弯路还会指引你关注kubernetes生态周边如微服务构建、DevOps、大数据应用、Service Mesh、Cloud Native等领域。
</li>
<li>
《[Kubernetes指南](https://kubernetes.feisky.xyz/zh/)》这本书旨在整理平时在开发和使用Kubernetes时的参考指南和实践总结形成一个系统化的参考指南以方便查阅。
</li>
这两本电子书都不错前者更像是一本学习教程而且面明显广一些还包括Cloud Natvie、Service Mesh以及微服务相关的东西。而后者聚焦于Kubernetes本身更像一本参考书。
**另外我这两天也读完了《Kubernetes in Action》一书感觉写的非常好一本很完美的教科书抽丝剥茧图文并茂。如果你只想读一本有关Kubernetes的书来学习Kubernetes那么我推荐你就选这本。**
但是也别忘了Kubernetes的官方网站[Kubernetes.io](https://kubernetes.io/),上面不但有[全面的文档](https://kubernetes.io/docs/home/) ,也包括一个很不错的 [官方教程](https://kubernetes.io/docs/tutorials/kubernetes-basics/) 。
此外,还有一些交互式教程,帮助你理解掌握,以及一些很不错的文章推荐你阅读。
**一些交互式教程**
- [Katacoda](https://www.katacoda.com/courses/kubernetes)
- [Kubernetes Bootcamp](https://kubernetesbootcamp.github.io/kubernetes-bootcamp/)
**一些文章**
这里还有一些不错的文档,你应该去读一下。
- [Kubernetes tips &amp; tricks](https://opsnotice.xyz/kubernetes-tips-tricks/)
- [Achieving CI/CD with Kubernetes](http://theremotelab.com/blog/achieving-ci-cd-with-k8s/)
- [How to Set Up Scalable Jenkins on Top of a Kubernetes Cluster](https://dzone.com/articles/how-to-setup-scalable-jenkins-on-top-of-a-kubernet)
- 10 Most Common Reasons Kubernetes Deployments Fail [Part I](https://kukulinski.com/10-most-common-reasons-kubernetes-deployments-fail-part-1/) 和 [Part II](https://kukulinski.com/10-most-common-reasons-kubernetes-deployments-fail-part-2/)
- [How to Monitor Kubernetes](http://sysdig.com/blog/monitoring-kubernetes-with-sysdig-cloud/) 一共有4个篇章
- [Logging in Kubernetes with Fluentd and Elasticsearch](http://www.dasblinkenlichten.com/logging-in-kubernetes-with-fluentd-and-elasticsearch/)
- [Kubernetes Monitoring: Best Practices, Methods, and Existing Solutions](https://dzone.com/articles/kubernetes-monitoring-best-practices-methods-and-e)
**网络相关的文章**
要学习Kubernetes你只需要读一下下面这个Kubernetes 101系列的文章。
- [Kubernetes 101 - Networking](http://www.dasblinkenlichten.com/kubernetes-101-networking/)
- [Kubernetes networking 101 - Pods](http://www.dasblinkenlichten.com/kubernetes-networking-101-pods/)
- [Kubernetes networking 101 - Services](http://www.dasblinkenlichten.com/kubernetes-networking-101-services/)
- [Kubernetes networking 101 - (Basic) External access into the cluster](http://www.dasblinkenlichten.com/kubernetes-networking-101-basic-external-access-into-the-cluster/)
- [Kubernetes Networking 101 - Ingress resources](http://www.dasblinkenlichten.com/kubernetes-networking-101-ingress-resources/)
- [Getting started with Calico on Kubernetes](http://www.dasblinkenlichten.com/getting-started-with-calico-on-kubernetes/)
**CI/CD相关的文章**
- [Automated Image Builds with Jenkins, Packer, and Kubernetes](https://cloud.google.com/solutions/automated-build-images-with-jenkins-kubernetes#kubernetes_architecture)
- [Jenkins setups for Kubernetes and Docker Workflow](http://iocanel.blogspot.in/2015/09/jenkins-setups-for-kubernetes-and.html)
- [Lab: Build a Continuous Deployment Pipeline with Jenkins and Kubernetes](https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes)
**最佳实践**
- [Kubernetes Best Practices](https://medium.com/@sachin.arote1/kubernetes-best-practices-9b1435a4cb53) by [Sachin Arote](https://medium.com/@sachin.arote1?source=post_header_lockup) AWS工程师总结的最佳实践。
- [Kubernetes Best Practices](https://speakerdeck.com/thesandlord/kubernetes-best-practices) by [Sandeep Dinesh](https://github.com/thesandlord) Google云平台工程师总结的最佳实践。
**Docker和Kubernetes资源汇总**
下面是 GitHub 上和 Docker &amp; Kubernetes相关的Awesome系列。
- [Awesome Docker](https://github.com/veggiemonk/awesome-docker)。
- [Awesome Kubernetes](https://github.com/ramitsurana/awesome-kubernetes)。
虽然上面的这些系列非常全的罗列了很多资源但是我觉得很不系统。对于系统的说明Docker和Kubernetes生态圈我非常推荐大家看一下 The New Stack 为Kubernetes出的一系列的电子书或报告。
<li>
[The New Stack eBook Series](http://thenewstack.io/ebookseries/) ,非常完整和详实的 Docker 和 Kubernetes 生态圈的所有东西。
<ul>
- Book 01: [The Docker Container Ecosystem](https://thenewstack.io/ebooks/docker-and-containers/the-docker-container-ecosystem/)
- Book 02: [Applications &amp; Microservices with Docker &amp; Containers](https://thenewstack.io/ebooks/docker-and-containers/applications-microservices-docker-containers/)
- Book 03: [Automation &amp; Orchestration with Docker &amp; Containers](https://thenewstack.io/ebooks/docker-and-containers/automation-orchestration-docker-containers/)
- Book 04: [Network, Security &amp; Storage with Docker &amp; Containers](https://thenewstack.io/ebooks/docker-and-containers/networking-security-storage-docker-containers/)
- Book 05: [Monitoring &amp; Management with Docker &amp; Containers](https://thenewstack.io/ebooks/docker-and-containers/monitoring-management-docker-containers/)
- Book 06: [Use Cases for Kubernetes](https://thenewstack.io/ebooks/use-cases/use-cases-for-kubernetes/)
- Book 07: [State of the Kubernetes Ecosystem](https://thenewstack.io/ebooks/kubernetes/state-of-kubernetes-ecosystem/)
- Book 08: [Kubernetes Deployment &amp; Security Patterns](https://thenewstack.io/ebooks/kubernetes/kubernetes-deployment-and-security-patterns/)
- Book 09: [CI/CD with Kubernetes](https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/)
- Book 10: [Kubernetes solutions Directory](https://thenewstack.io/ebooks/kubernetes/kubernetes-solutions-directory/)
- Book 11: [Guid to Cloud-Native Microservices](https://thenewstack.io/ebooks/microservices/cloud-native-microservices-2018/)
# 小结
总结一下今天的内容。Docker 和 Kubernetes已经成为分布式架构和自动化运维方面的不可或缺的两大基本构成是你必需要学习的。虽然它们的玩法跟传统运维不一样但技术方面并不算复杂只要你花上一点时间一定会学好的。
在这篇文章中我推荐了Docker和Kubernetes基础技术方面的学习资料并给出了存储、运维、网络、CI/CD等多方面的资料同时列出了与之相关的最佳实践。相信认真学习和消化这些知识你一定可以掌握Docker和Kubernetes两大利器。
下篇文章,我们将学习机器学习和人工智能方面的内容。敬请期待。
下面是《程序员练级攻略》系列文章的目录。
- [开篇词](https://time.geekbang.org/column/article/8136)
<li>入门篇
<ul>
- [零基础启蒙](https://time.geekbang.org/column/article/8216)
- [正式入门](https://time.geekbang.org/column/article/8217)
- [程序员修养](https://time.geekbang.org/column/article/8700)
- [编程语言](https://time.geekbang.org/column/article/8701)
- [理论学科](https://time.geekbang.org/column/article/8887)
- [系统知识](https://time.geekbang.org/column/article/8888)
- [软件设计](https://time.geekbang.org/column/article/9369)
- [Linux系统、内存和网络系统底层知识](https://time.geekbang.org/column/article/9759)
- [异步I/O模型和Lock-Free编程系统底层知识](https://time.geekbang.org/column/article/9851)
- [Java底层知识](https://time.geekbang.org/column/article/10216)
- [数据库](https://time.geekbang.org/column/article/10301)
- [分布式架构入门(分布式架构)](https://time.geekbang.org/column/article/10603)
- [分布式架构经典图书和论文(分布式架构)](https://time.geekbang.org/column/article/10604)
- [分布式架构工程设计(分布式架构)](https://time.geekbang.org/column/article/11232)
- [微服务](https://time.geekbang.org/column/article/11116)
- [容器化和自动化运维](https://time.geekbang.org/column/article/11665)
- [机器学习和人工智能](https://time.geekbang.org/column/article/11669)
- [前端基础和底层原理(前端方向)](https://time.geekbang.org/column/article/12271)
- [前端性能优化和框架(前端方向)](https://time.geekbang.org/column/article/12389)
- [UI/UX设计前端方向](https://time.geekbang.org/column/article/12486)
- [技术资源集散地](https://time.geekbang.org/column/article/12561)