在Kubernetes上对应用程序进行故障排除的6个技巧

从Docker迁移到Docker Swarm,再到Kubernetes,然后处理了多年来的所有各种API更改之后,我非常乐意发现部署中出现的问题和把问题进行修复。
我今天分享下我认为最有用的5条故障排除技巧,以及一些其他的使用技巧。

kubectl –“瑞士军刀”

kubectl就是我们的瑞士军刀,我们经常在出现问题的时候使用他们,在出现问题如何使用他们很重要,
让我们从5个“实际案例”开始,看出现问题时如何使用它们。
情况将是:我的YAML已被接受,但我的服务未启动且已启动,但无法正常工作。
1.kubectl get deployment/pods
这个命令如此重要[……]

继续阅读

使用Django REST Framework和JSON Web令牌进行用户身份验证

在过去的几个月中,我一直在利用业余时间来构建Web应用程序。虽然我想保留我的应用程序的详细信息(暂时),但我确实想分享我在使用该应用程序时克服的一些困难。特别是在使用JSON Web令牌(JWT)进行用户管理和身份验证时。
科技栈
在深入研究代码之前,我想提供一些有关将要使用的技术的背景信息。在后端,我选择了Django和Django Rest Framework来开发RESTful API,这将是我应用程序的核心。在前端,我决定使用Reactjs来构建我的SPA来调用后端。我将使用Docker进行容器化,使用CircleCI构建我的CI / CD管道,并使用AWS作为基础设施服务。最后,[……]

继续阅读

如何防止Kubernetes(例如RabbitMQ)队列工作器Pod在部署期间处理消息时被杀死?

每当为部署设置新的容器映像时,Kubernetes都会替换每个Pod。 默认情况下,这是使用rolling-rollout策略来完成的,其中会先启动带有新的Pod,并逐步杀死旧的Pod。
但是如果一个带有旧镜像的Pod在那个确切的时刻处理一项重要的持久请求或任务会怎样? 是否可以防止它在完成任务之前被终止?图像的Pod在那个确切的时刻处理一项重要的持久请求或任务会怎样? 是否可以防止它在完成任务之前被终止?

Kubernetes提供了生命周期挂钩,通过该钩子可以延迟终止。 开发者需要正确实施此操作。

Pod生命周期
如果Pod在部署期间通过kubectl或任何k8s控制器手动被[……]

继续阅读

Kubernetes的initContainer的多功能性

我们有很多不同的方法来配置在Kubernetes上运行的容器,例如:

环境变量
Config maps
跨多个Pod共享的卷
参数已传递给预执行pod
等等
这些替代方案符合特定的环境和特定的要求。

例如,它们都不允许您在容器启动之前克隆Git存储库。但是可能在镜像内部改变一些特征。但是,这将引入耦合,并破坏单一责任原则。即使该原理最初来自OOP,对于容器也很有意义。镜像应该只做一件事,并且做得很好。就像在OOP中一样,相反的情况会引入复杂性和脆弱性,并影响镜像的可维护性。

实际运行命令的其他选项包括:

容器生命周期钩
Kubernetes提供了生命周期钩子[……]

继续阅读

Django Speed Handbook:加快Django应用的速度

在开发多个Django应用程序的过程中,我学到了很多有关速度优化的知识。 此过程的某些部分,无论是后端还是前端,都没有详细记录。 我决定收集本文中我所知道的大部分内容。

如果您从未认真研究过网络应用的性能,那么一定会在这里找到不错的东西。

为什么速度很重要
不同的应用程序,不同的瓶颈
分析和调试性能问题
免责声明
后端:数据库层
select_related
prefetch_related
索引编制
只拿你需要的东西
后端:请求层
分页
异步执行/后台任务
压缩Django的HTTP响应
快取
前端:变得更毛茸茸
提供静态文件
词汇
使用Whit[……]

继续阅读

使用Beautiful Soup和Django REST Framework创建实时API

几周前,我对交易感兴趣,发现大多数公司都提供他们的付费服务来分析外汇数据。 我的目标是实施一些机器学习算法来预测市场。 因此,我决定创建一个实时API以便在React中使用它并测试自己的自动化策略。

在本教程结束时,您无需使用任何在线服务即可将任何网站转换为API。 我们将主要使用Beautiful Soup和Django REST Framework通过抓取外汇数据来构建实时API。

您需要对Django和Ubuntu有基本的了解,才能运行一些重要的命令。 如果您使用的是其他操作系统,则可以下载Anaconda来简化工作。

安装与配置
首先,通过以下命令创建并激活虚拟环境[……]

继续阅读

在Django模板中安全地包含JavaScript数据

Django模板通常用于将数据传递到JavaScript代码。 不幸的是,如果实施不正确,这将打开HTML注入的可能性,从而引发XSS(跨站点脚本)攻击。

这是我在Django项目中遇到的最常见的安全问题之一。 实际上,我可能已经在每个相当大的Django项目中以某种形式看到了它。

很难正确! 从历史版本上看也很困难,因为只有Django 2.1才添加了json_script模板标签来安全地执行此操作。

让我们看一下问题以及如何使用json_script修复它。

危险的方法:
让我们看一下这个view:

继续阅读

如何在Django admin的巨大表格中进行搜索

大家好!

我们都知道Django管理员是Django的超酷工具。 您可以检查模型,并从表中添加/编辑/删除记录。 如果您熟悉Django,我相信您已经知道了。

我得到了一个任务:我们的客户想按一个字段在一个表中搜索。 看起来很容易,对吧? 好吧,棘手的部分是该表具有523.803.417记录。

哇。 523.803.417条记录。

至少模型不是那么复杂:

在models.py上:

因此,对于Django管理员而言,应该轻而易举,对吗? 错误。

过程
首先,我只是在admin.py上添加了[……]

继续阅读

了解Kubernetes的请求和限制

您是否看到您的应用程序卡住或无法响应健康检查请求,并且找不到任何解释? 可能是因为CPU配额限制。 我们将在这里解释为什么。

容器和Kubernetes入门
Kubernetes(缩写为k8s)在现在的基础设施世界中几乎是事实上的标准。 它是一个容器编排工具。

容器
过去,我们曾经创建过诸如Java JAR / WAR或Python Eggs或Executables之类的工件,然后将它们让别人在服务器上运行它们。但是要运行它们,还有更多工作-必须安装应用程序运行时(Java / Python),适当的文件,不合适的位置,特定的OS等。它需要大量的配置管理,并且经常引起开发人员和[……]

继续阅读

生产环境集成Django和Vue.js

随着Python的普及和Vue.js的兴起,越来越多的开发人员希望将这两个框架一起使用来构建单页应用程序(SPA)。

我想出了一种在开发和生产环境中均可使用的Django-Vue集成策略。另外,它不需要额外的依赖关系。

我的方法涉及三个部分:

配置Vue以使用Django开发服务器进行本地开发,并在生产中使用Django生产服务器
配置Django以将Vue.js应用程序的生产模板作为其主页
配置Django和Vue在生产中提供Vue的静态文件(图像,CSS,JS)
让我们开始吧。

演示应用
好吧,也许我们还不会开始。 我在博客示例存储库中组合了一个演示应用程序[……]

继续阅读