开发者的Kubernetes懒人指南

你可以将本文作为开发者快速了解 Kube.NETes 的指南 。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者 。
译自Kubernetes for Lazy Developers 。作者 marcobehler。
介绍如果你是一位开发者,要么从未使用过 Kubernetes,要么想要复习 Kubernetes 知识,以便让你的 DevOps 同事对你刮目相看,那么这份指南适合你 。
快速问题:为什么将 Kubernetes 缩写为 K8s?
答案:它将在本指南末尾神奇地揭示,但仅在你完全阅读完之后 。所以,让我们不再浪费时间 。
我们是如何到达这里的?
我在整个职业生涯中遇到的许多开发者,对于他们应用程序生命周期的“现在我已经编写了代码,它还需要在某个地方运行”的部分并不一定关心 。(根据你的公司对 DevOps 这个词的定义和认知程度,这可能有所不同) 。
但让我们慢慢开始 。运行一个应用程序实际上意味着什么?
这在一定程度上取决于你所使用的编程语言生态系统 。例如,在JAVA和现代Web应用程序方面 , 你可以将所有源代码编译成一个单一的可执行 .jar 文件,然后通过简单的命令运行它 。
java -jar myNewAIStartup.jar对于生产部署 , 通常你也会希望有一些属性,用于设置数据库凭据或其他秘密 。在上述的Java Spring Boot情况下,最简单的方式是拥有一个Application.properties文件 , 但你也可以使用外部的秘密管理服务 。
无论如何,上述的命令实际上是你需要运行的所有内容,用于部署你的应用程序 - 无论你是在裸金属上、虚拟机上、Docker容器中、有或没有Kubernetes,甚至是你的Java驱动的烤面包机 。
仅运行一个命令肯定不够 。哪里是问题的瓶颈?关于部署应用程序时可能出现的问题已经在网络上写了很多:

  • 如果我的DEV环境和PRD环境之间存在库/操作系统/基础设施/某些版本不兼容怎么办?
  • 如果某些必需的操作系统软件包丢失了怎么办?
  • 如果我们不想将应用程序部署到云服务,而是部署到潜水艇上怎么办?
对于这些问题,根据你使用的编程语言生态系统,解决方法可能会有很大的不同 - 这是在线讨论中经常被忽视的一个主题 。
对于纯粹的Java Web应用程序,上述提到的问题(不包括潜水艇或更明智的基础设施部分,比如你的数据库),在很大程度上并不是问题 。你在服务器/虚拟机/容器/潜水艇上安装JDK , 运行java -jar,然后幸福地生活在一起 。
对于php、Python/ target=_blank class=infotextkey>Python、咳咳,Node,情况就不同了 , 你很容易在开发、测试或生产环境之间遇到版本不兼容的问题 。因此,人们渴望一种解决方案来摆脱这些烦恼:容器 。
Docker、Docker Compose和Swarm:回顾向Docker致敬!很有可能你已经知道Docker是什么,以及如何使用它 。(如果不知道 , 并且想看一个特定于Docker的指南 , 请在下面评论!需求越多 → 发布越快) 。简短的总结是:
  • 你将源代码构建为可部署的文件,例如jar文件 。
  • 你另外构建一个新的Docker镜像,其中包含你的jar文件 。
  • 该Docker镜像还包含运行成功所需的所有附加软件和配置选项 。
→ 你不再部署你的.jar文件,而是部署你的Docker镜像并运行Docker容器 。
这样做的美妙之处在于:只要在目标机器上安装了Docker(并且你的主机操作系统与Docker容器兼容内核),你就可以运行任何Docker镜像 。
docker run --name my-new-ai-startup -p 80:8080 -d mynewaistartup// yay, your application is deployed// This will start a Docker container based on the `_mynewaistartup_` Docker image.// That image will, that other things, contain your e.g. -jar file,// a web application which runs on port 8080, as well as instructions on how to run it.// Hint: These instructions are `_java -jar mynewaistartup.jar_`.什么是 'deploying' Docker 镜像?你或者你的 CI/CD 服务器设法将你的应用程序制作成了一个 Docker 镜像 。但是这个 Docker 镜像最终是如何在目标部署服务器上运行的呢?
你理论上可以将 Docker 镜像保存为 .tar 文件,复制到最终服务器上并在那里加载它 。但更现实的情况是,你会将 Docker 镜像推送到一个 Docker Registry , 无论是dockerhub、Amazon ECR还是其他像GitLab的数不胜数的自托管容器 Registry 之一 。


推荐阅读