跳到主要内容
博客容器(Kubernetes, Docker)你通往Kubernetes的道路清晰吗?

你通往Kubernetes的道路清晰吗?

通往Kubernetes之路》电子书

你应该使用Kubernetes吗?简而言之,答案取决于。但是,让我带你走过我理解Kubernetes的旅程,也许它可以帮助你找到自己的答案。 

我写了一整本书来帮助指导你的Kubernetes之路在这里获得曼宁的早期发布的MEAP)。但在我们谈论这本书之前,让我们先来谈谈部署软件和我在这之前的历程。 

近二十年前,我开始了我的第一次努力,在互联网上部署软件,发布我的第一个网站。当时,我甚至不知道该从哪里开始。有几个家庭朋友好心给我提供了一些建议:

这位企业家建议: 

"拿起这本关于Dreamweaver和HTML的书,你就不需要花一分钱来开发你的第一个网站。"

系统管理员和开发人员采取了不同的方法: 

"在这里,让我为你建立一个FTP服务器来托管你的网站;我不建议学习如何管理服务器。"

这两个人都帮助我走到了今天,但其中一个人无意中把我的学习时间推迟了很久。你能猜到是谁吗?

回顾我的早期经历,可以清楚地看到基础知识和通过实践经验的学习在塑造我的旅程中是多么重要。创业者的建议促使我亲身投入到网络开发中,而系统管理员的指导则让我了解到可以简化复杂任务的工具的价值。 

然而,随着时间的推移,出现了一个关键的教训,那就是理解基础原则的重要性,即使是在使用高级工具时。这种早期的学习经历是我对Kubernetes感兴趣的起源,这项技术将大大影响我的职业轨迹。理解Kubernetes,就像其他任何工具一样,需要牢牢掌握基础技术。 

Kubernetes很复杂吗?是的。它是完美的吗?不,它适合所有情况吗?但你是否应该使用Kubernetes的问题往往会归结于对使Kubernetes如此强大的底层技术的理解,以及你如何使用它来管理和保护你的软件。

对于那些想知道 "什么是Kubernetes?"或者也许还不熟悉 "Docker "一词(除了裤子的类型)及其与容器的关系的人,请允许我解释一下。 

应用程序在不断发展,每个组件,从数据库到编程语言,经常发布新版本。追踪每个应用程序的多个版本和第三方组件的众多迭代可能会成为管理上的痛苦,尤其是当涉及到没有主流支持的旧版本或遗留版本时。即使是受支持的软件版本也有很多系统级和第三方安装的依赖性,这可能会增加运行软件的复杂性,更不用说试图把它作为你的应用程序的一个组成部分。

随着时间的推移,所有的软件最终都会过时,并被更新的版本所取代。挑战在于在必要时运行旧的软件。即使是软件中看似微小的变化也会对现代应用产生巨大影响。例如,Python 2.7(与最新的Python 3.11相比)曾经内置在苹果的Mac OS X上。Python 2.7在向命令行输出文本时有一个奇怪的语法:`print "this thing" `,而不是较新版本的Python 中的`print("this thing")`,这是一个更合理的版本。这一个语法可以打破整个传统的Python 应用程序,因为缺少括号。

虽然使用旧版本的软件可能是不切实际的,但肯定有一些情况下我们需要运行旧软件。但是怎么做呢? 

我们可以花时间寻找一块硬件或来自特定时间点的虚拟机镜像,使我们能够运行一个旧的软件。或者我们可以转向容器,这是一个由Docker开创的概念。容器是独立的应用程序,与它们的依赖关系打包在一起,我们可以根据我们的需要进行修改。它们的独特卖点是它们能够从一个系统无缝过渡到另一个系统。

下面是一个使用Python 2.7作为容器构建块的Dockerfile例子:

```dockerfile
FROM python:2.7.7-slim

COPY ./src /app/
WORKDIR /app

RUN python -m pip install -r requirements.txt

CMD [“python”, “manage.py”, “runserver”]
```
```dockerfile
FROM python:2.7.7-slim

COPY ./src /app/
WORKDIR /app

RUN python -m pip install -r requirements.txt

CMD [“python”, “manage.py”, “runserver”]
```

这个Docker文件告诉Docker需要什么来构建这个新的容器,这些代码存在于我们的本地机器和本地路径`/src`下。Docker文件可以变得更复杂,但这个例子显示了使用Docker是多么容易。 

要构建-运行这个容器化的应用程序,就像这样简单:

```bash
docker build -f Dockerfile -t hello-python:v1 .
docker run hello-python -p 8000:8000
```

如果没有容器化,我们就必须在机器上直接安装Python 2.7,这几乎是不可能直接的。Docker和其他容器可以使我们的应用程序具有可移植性,你可以用几乎所有的开源语言或工具来替代本例中的Python 2.7。

然而,当我们想更新一个容器化的应用程序时,问题就来了,尤其是在生产中。在本地,更新一个容器很简单。你停止运行容器,重新构建它,然后重新运行它。然而,在生产中,更新一个容器可以用同样的方法,但如果构建失败,我们就会有严重的停机风险。

这就是Kubernetes的作用。Kubernetes帮助管理对特定容器的流量路由,并监督在任何特定时间运行的容器数量。如果一个容器出现故障,Kubernetes可以方便地回滚到以前的版本,而且停机时间极短或没有。

在Kubernetes上部署容器的配置被称为清单。下面是一个相对简单的清单的例子:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-py-deploy
spec:
    replicas: 3
    selector:
        matchLabels:
            app: hello-py-deploy
    template:
        metadata:
            labels:
                app: hello-py-deploy
        spec:
            containers:
            - name: hello-py-container
              image: jmitchel3/hello-python:v1
              ports:
                - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: hello-py-service
spec:
    type: LoadBalancer
    ports:
        - name: http
          port: 80
          targetPort: 8080
          protocol: TCP
    selector:
        app: hello-py-deploy
```

在上面的例子中,yaml格式的Kubernetes清单提供了两种资源:一个负载均衡服务和一个部署。负载均衡器帮助将流量导向我们的部署。通过`replicas:3",我们声明的容器`hello-python:v1`,我们的部署正在运行3个版本。

现在,当我们想更新部署的版本时,我们只需将`hello-python:v1`改为`hello-python:v2`,Kubernetes将优雅地更新我们的应用程序。如果出了问题,它将回滚到`hello-py-deploy:v1`。Kubernetes让这个过程不费吹灰之力,而且易于管理。Manifests可以很容易地用git来控制版本,所以我们可以对回滚功能进行非常细化。Kubernetes对于部署来说是不可或缺的,因为它为自动化、扩展和管理容器化的应用程序提供了一个框架,在我们日益复杂的软件环境中确保系统的弹性和效率。

我只想介绍一下导致我发现Kubernetes如何简化我的应用部署的一些方法。对我来说,从Kubernetes中获得最大的收益需要几个步骤,但这是一个值得的旅程。在《 通往Kubernetes之路》中,我们将踏上使用各种技术部署应用程序的旅程,在进入Kubernetes和其他现代部署实践之前,了解这些技术很重要。

在《 通往Kubernetes之路》中,我们将了解如何:

  • 在自我托管或云平台上管理git存储库
  • 通过基于云的虚拟机与git部署Python 和Node.js 应用程序
  • 通过以下方式实现虚拟机配置和部署的自动化Ansible
  • 用Docker和Docker Compose进行容器化和部署应用程序
  • 直接在虚拟机上运行容器,无需协调
  • 用DockerHub注册表推送和托管容器
  • 在Kubernetes上部署容器化应用程序
  • 在Kubernetes上实施公共和私人应用程序
  • 为HTTP和HTTPs流量配置负载均衡器
  • 利用Github Actions和Nectos的开源替代行为来使用CI/CD技术
  • 以及更多

部署是对你的软件的最终测试。 Kubernetes之路》将15年的部署经验浓缩在一本易懂、实用的指南中。它带领你从零开始部署软件,一直到实施Kubernetes的力量。你将学习到可以用于任何语言和任何类型的网络应用的可持续部署实践,如何创建可以跨部署选项和云供应商的可移植应用程序,并了解在任何规模的项目中利用Kubernetes是多么的可能。

要开始了解Kubernetes的道路,请从曼宁这里获得早期发布的MEAP。


注释

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*