简介:本文的首席执行官注释将介绍有关如何调试K8S中的Django的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
原始地址:
描述:“单独的配置和镜子,提高移植性”
日期:2020.11.22 10:34
类别:
-K8S
标签:[K8,DevOps]
关键字:K8S,configmap,subpath
在K8S群集的第一个应用程序中,完成了基本的NGINX服务部署,但是当在真实环境中使用NGINX时,通常有必要自定义其配置文件以满足实际的代理需求。K8S提供了允许的概念,可以允许要与镜像文件分开的配置文件,以使容器化应用程序便携式。
您可以从字面上理解配置图作为配置映射:
ConfigMap可以包含多个密钥 /值对。
您可以使用kubectl create configmap命令来基于目录,文件或字符串创建configmap。您还可以直接编写YAML文件以定义:
之后,您可以使用kubectl应用-f nginx -config.yml来完成configmap的创建。
ConfigMap具有多种定义形式和多种使用形式。有关详细信息,您可以咨询官方文档。本文仍然以Nginx配置文件为例,以说明Configmap中定义的配置文件的使用。
上面的nginx-config.yml定义了两个configmap。目标是将以下两个位置放在NGINX容器中:
您可以将ConfigMap添加到卷中,然后将其安装为使用,例如:
有两个地方可以解释:
例如,在上面的示例中,mountpath:/etc/nginx/conf.d。目前,您可以在路径下的配置中以某个配置中的某个配置指定特定文件。该表格安装在指定的路径下。
无论何种方式,都将清除容器中尤文路径下的所有先前文件,您需要注意。
如果要将配置文件安装到容器中的特定文件中,则文件所在的其他文件不会影响文件所在的路径,您可以在上面的示例中遵循nginx.conf文件:
也就是说,MountPath直接指定到特定文件,并通过subpath指示文件名。
更新数据卷中已使用的配置毫米时,映射配置内容最终将自动更新。Kubelet检查是否每次同步时,已安装的configmap是最新的。缓存以获取配置map的当前值。因此,从更新ConfigMap的总延迟到将新值映射到POD的总延迟,它可能与KueLet中KueLet中的TTL一样长。
此外,使用ConfigMap作为子路径的数据量不会接收ConfigMap更新。
上面的配置是一个示例。在ConfigMap中更新NGINX配置文件的内容并应用于群集中时,您可以等待一段时间,然后输入容器以观察配置文件。/etc/nginx/conf.d Path下的内容根据更新周期,将自动与糖果文件中的所有更改(包括配置文件内容和配置文件数量)同步。
本文中的完整K8S配置如下:
kubectl应用-f nginx -test.yml完成后,可以通过群集30081端口访问容器中端口2020的服务,并且可以修改配置中的内容以输入容器以观察容器以观察到的更改NGINX的相应配置文件。
本文将介绍K8中一些最基本的订单,并帮助解释一些基本概念,以促进理解,也就是说,本文是一种实用性而不是学术文章。如果您想了解有关K8的知识 - 如果您是知识,则可以通过以下链接学习:
K8S是一种经典的多模型,具有主要的管理节点主和许多工作节点奴隶。在当然,K8S还可以配备多个管理节点,并且两个以上的管理节点称为高可用。K8S包括许多组件。每个组件都在Docker容器中单独运行,然后通过其自己的虚拟网络互相访问。您可以通过Kubectl获取Pod -n Kube -System在所有节点上查看所有节点的组件容器。
在管理节点中,K8S组件将比工作节点多。我们只是依靠这些额外的组件来向工作节点发布订单。在这里将不会在此处详细提及它们,“基本用途”对于这些名称并不重要。
如果您想了解一件事,则必须首先理解其内部理念。流行的观点是,K8做了什么?为了提供更可靠的服务,有必要增加服务器数量并减少每个服务器的音量为了传播负载,越来越多的虚拟机将带来越来越高的操作和维护成本。如何使少量的操作和维护人员管理大量的服务器和服务?这是K8S完成的工作。
K8S将大量服务器重新吸收到一个统一的资源池中。对于操作和维护人员,他们没有服务器1的概念。服务器2,而是一个将新服务器增加到操作和维护人员的统一资源池。这是K8s将所有可用于资源概念的所有内容都提取,从而提供了一种更统一,更简单的管理方法。
接下来,我将通过介绍一些基本概念来介绍每个基本命令。本文所述的命令涵盖了加法,删除,更改和调查的四个方面。您可以参与以下形式。由于长度,我们在下一篇文章中提出了索赔和较少使用的命令。
接下来输入主题,首先了解K8S Kubectl Get中最常用的命令。请记住,K8S将所有内容都抽到资源中,而Kubectl Get用于查看这些资源。最常见的资源是POD。
不仅我们自己的服务都包装到吊舱中,甚至K8本身也在一堆豆荚上运行。
-n参数指定要查看哪些命名空间的POD。所有K8S POD都放置在名为Space的Kube-System下。
执行kubectl get pod -n kube -system命令后,您可以看到以下内容:
每行都是资源。在这里,我们看到资源是豆荚。您看到的吊舱数可能与我不一致,因为此列表包含此列表中所有节点上运行的POD。您添加的节点越多,显示的Pod越多。LET对列的查看:
Kubectl Get可以列出K8中的所有资源
以下是如何使用kubectl获取豆荚的列表。但是不要将get和pod绑在一起。POD只是K8S的服务。您不仅可以获取POD,还可以获取SVC(查看服务),获取RS(查看复制控制器),获得部署(查看部署)(查看部署)(查看部署)等待,尽管Kubectl GET GET POD是最常用的,但是如果您想要要查看资源而不知道命令是什么,KBuectl获取资源名称是正确的。
如果您想查看更多信息,则可以指定-O宽参数,如下:
添加此参数后,您可以查看资源的位置和节点节点。
记住添加-n
-n可以说是kubectl get命令的最常见参数。在正式使用中,我们永远不会在默认名称空间中发布资源。
kubectl get命令可以列出k8中的资源,而kubectl get pod是一个非常常用的命令来查看pod。-n参数可以指定POD所在的命名空间。
kubectl Dridder命令可用于查看特定资源的特定信息。他还可以查看所有资源的详细信息,但最常用的是吊舱的详细信息。他还可以使用-n参数来指定资源所在的名称空间。
例如,我们可以使用以下命令来查看POD列表中的POD。请注意不要忘记将POD名称修改为自己:
然后,您可以看到很多信息。首先,让我们将基本属性分开,您可以在详细信息的开头找到它:
基本属性
其中一些更常用,例如节点,标签和控制。以及通过标签定位POD。通过控制,您可以知道POD是由K8S资源创建的,然后您可以使用Kubectl获取资源名称继续找到问题。例如,上述daemonset/kube-flannel-ds-amd64,您可以通过kubectl获取daemonset -n kube-system获取上一个资源的信息。
内部镜像信息
在中间,您可以找到与下面传递的容器相同的容器。该段落详细描述了POD中每个Docker容器的信息。通常使用的图像字段,当POD看起来不正确时,您可以在字段错误时查看绘制的字段。其他字段名称非常受欢迎,可以直接翻译它们。
事件
在查看详细信息时,最常用的信息获取是事件段落。您可以在内容末尾找到内容,如下所示:
是的,如果您看到上述内容,没有事件,则意味着吊舱是正常的。当吊舱的状态不运行时,这里会有或多或少的问题,看起来像下面,然后您可以分析豆荚中有问题的详细原因:
Kubectl描述资源实例名称可以查看资源的详细信息。最常用的是kubectl描述pod pod name -n命名空间以获取有关POD的基本信息。如果存在问题,您可以在获得的信息末尾看到事件段落,其中记录了POD失败的原因。
如果要查看POD的特定日志,则可以通过kubectl logs pod name查看它。注意,只能查看的该日志。您可以通过添加-f参数继续查看日志。例如,检查Kube系统中名为Space的法兰绒吊舱的日志,请注意修改POD名称:
然后,您可以看到以下输出:
如果您发现POD的服务存在问题,但是状态仍在显示运行中,则可以使用Kubectl日志查看其详细日志。
在本文中,我们了解K8和一些基本概念的目的,并了解最常用的GET,DESCIBE和LOGS命令。在知道这三个命令之后,他们几乎可以从K8。在下一个K8S基础(下)获得所有常见的信息,我们将有更深入的一步来了解如何创建,修改和删除K8S中的资源。
在团队中执行一个项目,并使用Django开发多个应用程序,例如App1,App2等,所有这些都使用Docker Mirror将其部署到K8S环境中。总体架构是:
常规治疗计划:
该方案简单明了。对于API接口和静态页面(例如Django中的管理管理页面),不会有任何问题,因为应用程序对应于域名。从逻辑上讲,这是一个 - 一个访谈。
有了这些问题,我们尝试使用URL前缀来识别路由分布并通过URL前缀实现反向代理,而不是通过域名的反向代理。
例如,/a/xxx的URL是到App1,/b/xxx的路由。
在配置开始时,它仍然非常简单。NGINX配置如下:
此配置可能意味着当它与/a/此前缀匹配的URL时,请求路由到App1_Addr:App1_port/。对于特定位置指令,请参阅NGINX手册。
API接口访问是正常的,但是当无法执行Django的管理台时,无法执行302个跳跃。它无法在新的URL页面上访问。
经过分析后,该过程就是这样:
此问题出现在步骤4中。当Nginx遇到301或302时,重新修改响应标头中的位置值,以便浏览器可以请求添加前缀/A/a/post -post -pecte -decementative URL。
修改配置后,配置如下:
添加新的proxy_redirect指令,请参阅NGINX手册以获取特定说明,可能告诉Nginx,当您遇到301或302服务器重新方向时,请按^/(。*)$常规匹配,即匹配/xxxxx.url。匹配成功后,修改对头部响应的位置值,然后返回到浏览器。在它们中,$ 1表示常规匹配中的序列号(...)。
当然,根据实际需求,您还可以添加多个Proxy_redies指令。原则是相同的:
现在可以访问API和管理员管理台,但是发现管理台的JS/CSS/HTML/JPG的静态资源失败了。
分析如下。当Django将HTML返回浏览器时,浏览器将分析HTML中的静态资源URL并请求它。在此TimeFormat.o当然,如果浏览器要询问这些URL,则NGINX将直接报告没有资源。
目前,有两种解决方案:
发现第一种方法并发现它不容易修改。毕竟,Admin已集成在Django的“安装软件包”中。在项目中,它不会直接继承或封装管理模块,因此放弃。
第二种方法在nginx中找到了sub_filter指令,修改如下:
添加sub_filter*三行指令。请参阅手册以获取特定说明。可能NGINX基于sub_filter_types(未编写本文,默认为text/html),然后检查每个响应的内容。重新定位操作并替换响应内容中的[/admin/]字符串admin/]字符串,也就是说,添加前缀操作,静态。表明上述替换是未添加替换响应内容的内容的位置。
如果项目中仍然有静态工程,您也可以根据此替换操作。
替换后,原始项目不需要修改它,不会影响本地开发和调试,而且感觉很好。
现在,可以正常访问API接口和管理管理站。.com在URL前缀方法上播放反向代理函数。
意识到浏览器或外部系统只需要通过
您可以访问此格式的URL,只有一个域名,该名称仅使用/a/前缀来区分不同的子应用程序。
通常,我们将使用前后末端分离来开发项目。如有必要,我们还可以使用sub_filter替换相应的请求内容。
结论:以上是如何在K8中调试Django的全部内容。感谢您阅读本网站的内容。我希望这对您有帮助。有关如何在K8SDON的K8s中调试Django的更多信息,请不要忘记在此网站上找到它。