Kubernetes
最后修改时间:2023 年 10 月 16 日Kubernetes是一个容器编排引擎,用于容器化应用程序的部署、扩展和管理。安装并启用IntelliJ IDEA Ultimate 的Kubernetes插件,以添加以下功能来管理 Kubernetes 集群:
Kubernetes 资源配置文件的编码帮助。
Helm图表和模板的编码帮助。
使用自定义资源定义 (CRD) 规范验证自定义资源。
Kustomize文件的编码帮助:现场和本地文件路径完成、快速文档以及 Kustomize 文件和补丁之间的导航。相关 Kustomize 文件的列表显示在打开的 Kustomize 补丁顶部的编辑器中。
从 IntelliJ IDEA 与集群交互:使用服务工具窗口查看当前上下文中 Kubernetes 集群的所有资源、跳转到相关资源定义、查看在 Pod 上运行的容器的日志等等。
Kubernetes插件支持Kubernetes版本1.6至1.28(您可以选择适用的版本)。
安装 Kubernetes 插件
此功能依赖于Kubernetes插件,您需要安装并启用该插件。
笔记
Kubernetes 插件仅在 IntelliJ IDEA Ultimate 中可用。
按打开 IDE 设置,然后选择插件。CtrlAlt0S
打开Marketplace选项卡,找到Kubernetes插件,然后单击Install(如果出现提示,请重新启动 IDE)。
指定 kubectl 和 helm 的自定义路径
IntelliJ IDEA 使用由环境变量确定的默认 kubectl (如果使用它,还使用PATH
helm )可执行文件。如果您在自定义目录中安装 Kubernetes 或 Helm,则可以手动指定它们的路径。
在“设置”对话框 ( ) 中,选择“构建”、“执行”、“部署”| 库伯内特斯。CtrlAlt0S
在“kubectl 可执行文件的路径”字段中,指定 kubectl 可执行文件的路径。
在“Helm 可执行文件的路径”字段中,指定 Helm 可执行文件的路径。
使用自定义 Kubernetes 配置文件
IntelliJ IDEA 检测默认kubeconfig
文件。您可以使用不同的配置文件。您可以全局应用它,也可以为每个项目使用不同的文件。
在“设置”对话框 ( ) 中,选择“构建”、“执行”、“部署”| 库伯内特斯。CtrlAlt0S
在“配置”下,单击并指定文件的路径
kubeconfig
。如果要在所有项目中使用该配置文件,请在“范围”列中选择“全局”。要仅在当前项目中使用它,请保留项目范围。
添加文件时,IntelliJ IDEA 会验证其语法并报告错误(如果有)。
配置 Kubernetes API 版本
IntelliJ IDEA 提供配置键值的完成、通过装订线图标导航到相关选择器和定义、检查弃用值和所需键的专门检查以及其他辅助功能。这些取决于您正在使用的 API 的版本。Kubernetes插件支持 Kubernetes 版本 1.6 至 1.28。默认情况下,IntelliJ IDEA 将其设置为最新版本。但是,如果您的资源使用早期版本,您可以更改它。
在“设置”对话框 ( ) 中,选择语言和框架 | 库伯内特斯。CtrlAlt0S
根据需要更改Kubernetes API 版本和Kustomize 版本选项。
资源配置文件
Kubernetes插件对 YAML 格式的资源配置文件提供了丰富的支持,而对 JSON 格式仅提供基本的支持。
IntelliJ IDEA 使用以下必填字段识别 Kubernetes 资源配置文件:
apiVersion
:标识对象表示的版本化架构kind
:标识资源类型(例如,Service
、Pod
、Deployment
等)
如果 YAML 或 JSON 文件中存在上述两个字段,IntelliJ IDEA 将使用相应的 Kubernetes 图标标记该文件并启用所有可用功能:
创建资源文件
使用 IntelliJ IDEA,您可以快速为 Kubernetes 中一些最流行的资源创建配置文件。
在项目工具窗口中,右键单击文件夹,选择新建(或按),然后选择Kubernetes Resource。AltInsert
在名称字段中,输入您的资源名称并从列表中选择文件模板。
这将创建一个新文件,其内容基于所选的文件模板。
单击,在集群中创建资源。要更改应用它的上下文,请单击并选择一个上下文。
或者,在 YAML 文件中,您可以使用预定义的实时模板:
kcm
: Kubernetes 配置映射kdep
:Kubernetes部署kpod
:Kubernetes Podkres
: Kubernetes 通用资源kser
:Kubernetes 服务
提示
要编辑 Kubernetes 资源配置文件的实时模板或创建新模板,请打开设置对话框,选择编辑器| 实时模板,然后展开列表中的Kubernetes组。CtrlAlt0S
禁用 Kubernetes 架构验证
IntelliJ IDEA 根据 Kubernetes API 架构验证您的 Kubernetes 文件。这包括检查所需的密钥或可能的资源类型。
如果您的文件包含apiVersion
和kind
,但它不是 Kubernetes 文件,您可以禁用此类验证。您可以在“设置”|“设置”中禁止检查并更改其范围和严重性。编辑| 检查 | 库伯内特斯。或者您可以使用特殊指令标记文件以禁用其中的验证:
在资源配置文件的顶部,添加
# nonk8s
.或者,如果您已经收到有关未知资源的警告,请在问题工具窗口中右键单击它,然后选择显示快速修复 | 将此文件标记为非 Kubernetes。
管理您的集群
使用服务工具窗口查看集群、在命名空间和上下文之间切换以及修改集群资源。
编辑 kubeconfig
kubeconfig 文件包含有关集群、用户、命名空间和身份验证的信息。
打开服务工具窗口:选择查看| 工具窗口 | 服务或按。Alt08
选择一个集群,然后单击工具栏上的( Open kubeconfig File in Editor )。当您右键单击“服务”工具窗口中的任何 Kubernetes 对象时,该操作也可用。
这将在编辑器的新选项卡中打开 kubeconfig 文件。要更改此操作打开的默认文件,您可以在Path to kubeconfig file中指定另一个文件的路径。
当您更改 kubeconfig 文件时,配置会自动重新加载。您还可以手动重新加载它,或者通过右键单击集群或任何 Kubernetes 对象并选择更多 |禁用自动重新加载。自动重新加载配置。
提示
默认情况下,最大 kubeconfig 文件大小限制为 10 MB。您可以在“设置”|“设置”中更改此限制。高级设置 | 库伯内特 | 要加载的 kubeconfig 文件的最大大小(以兆字节为单位)。
在命名空间之间切换
Kubernetes 命名空间可让您在逻辑上隔离集群内的资源。使用 IntelliJ IDEA,您可以在命名空间之间快速切换。
打开服务工具窗口:选择查看| 工具窗口 | 服务或按。Alt08
右键单击您的集群或任何资源,选择命名空间(或单击工具栏上的 ),然后选择所需的命名空间。
要查看所有命名空间的资源,请选择“所有命名空间”。
提示
如果您希望某些名称空间显示在列表顶部,可以通过单击 将它们标记为收藏夹。
笔记
如果由于基于角色的访问控制而无法访问命名空间资源,您可以在构建、执行、部署 |中设置自定义命名空间。库伯内特 | 命名空间。您还可以通过“自定义命名空间”操作快速打开此设置,如果无法从集群加载上下文的命名空间,则可以使用该操作。
改变背景
在“服务”工具窗口中,IntelliJ IDEA 显示 kubeconfig 文件中检测到的所有上下文。
当您在本地创建资源文件时,可以通过单击 选择要应用资源的上下文。为了加快上下文选择速度,您可以在 IntelliJ IDEA 设置中提前选择它。
在“设置”对话框 ( ) 中,选择语言和框架 | 库伯内特斯。CtrlAlt0S
在要使用的上下文列表中,选择应用本地 Kubernetes 资源时要使用的上下文。
修改集群资源
打开服务工具窗口:选择查看| 工具窗口 | 服务或按。Alt08
右键单击资源并选择查看 YAML。
这将在编辑器的新选项卡中打开所选资源的配置文件。当您更改字段时,修改的行会在装订线中突出显示。您可以单击装订线中的突出显示区域来快速预览或回滚更改。
单击可将更改应用到当前上下文和命名空间。
当您修改资源配置文件时,右上角会出现一个工具栏。它允许您应用更改、删除资源、预览差异以及回滚更改。
笔记
更改某些 Kubernetes 对象字段可能会导致创建新对象。例如,如果您更改资源名称,应用此更改将创建新资源。或者,如果更改命名空间,应用此更改将在指定的命名空间中创建新资源。
删除资源
您可以通过以下任一方式删除资源:
在服务工具窗口中,右键单击资源并选择删除。
在服务工具窗口中,选择资源并单击工具栏上的(删除资源)。
如果资源 YAML 文件在编辑器中打开,请将鼠标悬停在该文件上并单击。您还可以单击此处更改要删除资源的上下文。
查看日志
您可以查看 Pod 和部署中的日志。
打开服务工具窗口:选择查看| 工具窗口 | 服务或按。Alt08
选择 Pod 或部署。在服务工具窗口的右侧,单击以下图标之一:
( Follow Log ) 使用该标志查看所选资源的实时尾日志
--follow=true
。(下载日志)保存日志文件。
当您右键单击容器或部署时,这两个操作也可用。
如果 pod 中有多个容器,则必须从显示的容器列表中选择一个。
您可以在 IDE 设置 ( ) 中的“构建”、“执行”、“部署”|下配置日志保存选项。库伯内特 | 日志:CtrlAlt0S
如果要将日志保存在Scratches以外的位置,请在“路径”中指定日志下载到的目录。或者选择下载前询问日志保存位置,以便在每次保存日志时提示您输入位置。
如果要在文件名中包含日志时间戳,请选择将时间戳附加到日志文件名。
创造秘密
使用IntelliJ IDEA,您可以快速创建Kubernetes Secrets。
打开服务工具窗口:选择查看| 工具窗口 | 服务或按。Alt08
选择一个集群,展开Configuration,右键单击Secrets,然后选择Create New Secret。
在打开的“创建新密钥”窗口中,指定密钥名称、类型和命名空间。为了加快秘密创建速度,IntelliJ IDEA 根据所选秘密类型添加所需的数据或注释密钥。
在“数据和注释”部分中,单击“值”并输入现有键的值,或者您可以单击并选择提供值的方式:
添加手动以手动输入值。
使用文件数据选择一个文件(例如,SSH 密钥文件或 Docker config.json)以使用文件内容作为值。
您可以在“服务”工具窗口的“配置”下查看所有机密。创建 Secret 后,您可以开始在secretName
Pod 配置字段中输入其名称。这将调用集群或项目中可用的 Secret 名称的补全。
头盔支撑
Helm是一个用于管理 Kubernetes 应用程序的工具。Helm 图表是在 Kubernetes 集群内运行的预配置资源定义包。图表包含包Chart.yaml的描述以及用于生成 Kubernetes 清单文件的一个或多个模板。
笔记
Helm 模板语法支持需要Go Template 插件。
Helm 图表和模板的编码帮助包括代码完成、重构、检查、快速修复和快速文档。代码完成包括来自指定存储库的依赖项值(默认情况下,来自Helm Hub)。
在 Go 模板指令中,IntelliJ IDEA 为 Helm内置对象以及从values.yaml
文件或自定义值文件传递的值提供补全。您可以按导航到对象值源,例如导入到父图表中的子图表值。Ctrl0B
在模板对象中,您可以使用代码折叠:按和在值和指令之间切换。您还可以将鼠标悬停在某个值上以展开并显示指令。CtrlNumPad +CtrlNumPad -
您还可以使用装订线图标在标签定义和标签选择器之间以及覆盖和覆盖值之间导航。
在项目工具窗口中,右键单击文件夹并选择新建| 舵图。
在打开的“创建新 Helm 图表”窗口中,输入图表的名称。
这将运行helm create命令,该命令添加开始所需的所有基本文件:
.helmignore:构建包时要忽略的模式
Chart.yaml:带有元数据的基本图表描述
value.yaml:图表模板的默认值
Charts/ : 子图表目录
templates/:图表定义目录
_helpers.tpl:模板的部分和函数
NOTES.txt:图表部署后打印的信息
deployment.yaml:Kubernetes 部署定义示例
ingress.yaml:Kubernetes 入口定义示例
service.yaml:Kubernetes 服务定义示例
如果在编辑器中打开模板文件,请单击编辑器右侧的 。
或者,右键单击项目中的模板文件,指向Helm,然后选择Helm Template。
这将运行呈现图表模板的helm template命令。渲染的预览在差异查看器内打开,以将其与原始模板文件进行比较。
右键单击图表,指向Helm,然后单击Helm 依赖项更新。
这将运行helm dependency update命令。
在 Helm 2 中,应在requirements.yaml文件中指定依赖项。此操作还会生成或更新requirements.lock。
在 Helm 3 中,应在Chart.yaml文件中指定依赖项。如果您在错误的文件中指定了依赖项,IntelliJ IDEA 会提供检查以及快速修复来移动它们。
右键单击图表,指向Helm,然后单击Helm Lint。
这将运行helm lint命令,该命令执行一系列测试以发现可能的问题,而无需实际安装图表。
自定义资源定义支持
如果您使用自定义资源扩展 Kubernetes 集群,IntelliJ IDEA 可以使用自定义资源定义(CRD) 规范来验证它们。
指定 CRD 规范的路径
按打开 IDE 设置,然后选择语言和框架 | 库伯内特斯。CtrlAlt0S
单击并选择本地 CRD 文件或指定 URL。然后单击“确定”。
使用和重新排列 CRD 文件列表。这定义了冲突定义的优先级:如果在多个文件中定义,IntelliJ IDEA 将使用最低的优先级。
默认情况下,CRD 仅应用于当前项目。如果您希望某个 CRD 可用于使用此 IDE 实例打开的任何项目,请将Scope:选项更改为。IDE
笔记
当您应用更改时,IntelliJ IDEA 会自动从指定的 URL 下载新添加的 CRD。仅当模型重新加载时,它才会下载其他修改过的 CRD,每当您打开项目或更改其他 Kubernetes 设置(例如 CRD 的顺序)时,就会发生这种情况,并且距离上次模型重新加载已经过去了三个多小时。如果自上次模型重新加载以来不到三个小时,您可以使用“重置架构缓存”按钮强制重新加载当前模型。
要从正在运行的 Kubernetes 集群加载 CRD,请启用Use API schema from the active cluster if available。
提示
默认情况下,CRD 文件的最大大小限制为 50 MB。您可以在“设置”|“设置”中更改此限制。高级设置 | 库伯内特 | 要加载的 CRD YAML 文件的最大大小(以兆字节为单位)。
您可以在“服务”工具窗口的Kubernetes节点下查看当前集群的 CRD,包括其所有已应用的资源。
Kubernetes 插件支持以下类型的 CRD 文件:
以下示例显示了此类自定义资源的简单CustomResourceDefinition规范。标识资源的必填字段为、、和。stable.example.com/v1
CronTab
metadata.name
spec.group
spec.versions
spec.names
笔记
目前,并非 OpenAPI 架构中的所有字段都可用于验证(请参阅示例中的
pattern
、minimum
和maximum
字段)。validation.openAPIV3Schema
有关更多信息,请参阅CRD 验证限制。
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: crontabs.stable.example.com # Obligatory field to identify the resource
spec:
group: stable.example.com # Obligatory field to identify the resource
versions: # Obligatory field to identify the resource
- name: v1
served: true
storage: true
scope: Namespaced
names: # Obligatory field to identify the resource
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
validation:
openAPIV3Schema: # Schema for validating custom objects
properties:
spec:
properties:
cronSpec:
type: string
pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' # not supported for validation
replicas:
type: integer
minimum: 1 # not supported for validation
maximum: 10 # not supported for validation
以下示例显示了一个简单的OpenAPI v2.0sample/v1
架构,其中包含此类自定义资源的 CRD 规范Config
。自定义资源的根定义必须包含x-kubernetes-group-version-kind
具有指定组、版本和种类的字段。在示例中,root.Definition
对象使用build
属性来引用该some.Definition
对象。
{
"swagger": "2.0",
"info": {
"title": "Sample Schema",
"version": "sample/v1"
},
"paths": {},
"definitions": {
"some.Definition": {
"description": "Example of a definition.",
"properties": {
"someProperty": {
"type": "string"
}
}
},
"root.Definition": {
"description": "This is the root definition for the resource",
"properties": {
"build": {
"$ref": "#/definitions/some.Definition"
}
},
"x-kubernetes-group-version-kind": [
{
"group": "sample",
"kind": "Config",
"version": "v1"
}
]
}
}
}
CRD 验证限制
IntelliJ IDEA 不支持以下 OpenAPI v3 架构功能:
multipleOf
maximum
exclusiveMaximum
minimum
exclusiveMinimum
maxLength
minLength
pattern
maxItems
minItems
uniqueItems
maxProperties
minProperties
allOf
oneOf
anyOf
not
format
default
nullable
readOnly
writeOnly
xml
externalDocs
example
deprecated
生产力技巧
如果您经常使用此处描述的功能,以下提示可能会有所帮助:
分配快捷键
您可以为 Kubernetes 操作分配键盘快捷键。
在“设置”对话框 ( ) 中,选择“键盘映射”。CtrlAlt0S
在搜索字段中键入内容
kubernetes
,然后双击某个操作以为其设置快捷方式。
或者,您可以使用“查找操作”对话框,键入必要的操作,然后按。CtrlShift0AAltEnter
例如,您可以指定“与集群交互”的快捷方式,以便在修改资源配置文件时快速打开上下文菜单。
配置代码折叠
默认情况下,IntelliJ IDEA 使用代码折叠将 Helm 模板中的值引用和 Kubernetes 配置文件中的定义渲染为实际值。您可以单击该值将其展开,或者按和切换折叠。如果您想查看默认扩展的引用和定义,请执行以下操作:CtrlNumPad +CtrlNumPad -
在“设置”对话框 ( ) 中,选择编辑器 | 一般| 代码折叠。CtrlAlt0S
在“代码折叠”页面上,清除必要的复选框:
Kubernetes:Helm 模板中的值引用
Kubernetes:YAML 文件中的 EnvVar 定义
Kubernetes:YAML 文件中的 ExecAction 定义
感谢您的反馈意见!