我目前正在构建一个由4个微服务(a,b,c,d)组成的应用程序.我们希望将Kubernetes Helm作为CI/CD管道的一部分.
我们正在讨论如何最好地定义图表,并且想知道社区的建议.
我们目前的选择似乎是:
值得一提的是:
我提到这些要求是因为我觉得它们可能与图表设计有关.
我们在 Kubernetes 1.9.0 上,想知道是否有办法在其 statefulset 配置文件中访问 pod 的“序数索引”。我们喜欢动态地为 pod 的标签分配一个值(从序数索引派生),然后在规范下使用它来设置 pod 关联(或反关联)。
或者,pod 的实例名称是否在 statefulset 配置文件中可用?如果是这样,我们希望从中提取序数索引并动态分配给标签(供以后用于亲和力)。
这是掌舵和分蘖版本:
> helm version --tiller-namespace data-devops
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Run Code Online (Sandbox Code Playgroud)
以前的helm安装失败:
helm ls --tiller-namespace data-devops
NAME REVISION UPDATED STATUS CHART NAMESPACE
java-maven-app 1 Thu Aug 9 13:51:44 2018 FAILED java-maven-app-1.0.0 data-devops
Run Code Online (Sandbox Code Playgroud)
当我尝试使用此命令再次安装它时,它失败了:
helm --tiller-namespace data-devops upgrade java-maven-app helm-chart --install \
--namespace data-devops \
--values helm-chart/values/stg-stable.yaml
Error: UPGRADE FAILED: "java-maven-app" has no deployed releases
Run Code Online (Sandbox Code Playgroud)
helm upgrade --install如果先前的安装失败,命令是否会失败?我期待它强行安装.任何的想法?
当前,我正在尝试通过创建Helm图表在Kubernetes集群上部署微服务端点Docker映像。为此,我创建了图表并更改了values.yaml和deployment.yaml中的参数以进行端口更改。我也想从Angular前端访问。因此,我添加了服务类型= NodePort。当我描述服务时,它给了我30983访问的端口。
我像http:// node-ip:30983 / endpoint一样访问
但我只是得到无法访问该网站的消息。让我添加我在这里所做的详细信息:
我的values.yaml文件包含以下提到的服务类型:
和我的template / service.yaml文件包含如下内容:
而我的template / deployment.yaml文件包含以下内容:
我尝试访问如下内容:
而且只能到达站点。
注意:当我尝试描述服务时,会得到以下信息:
kubectl的输出获取pod --show-labels,如下图所示。
更新
当我们使用kubectl describe pod命令时,将如下所示:
更新错误
Readiness probe failed: HTTP probe failed with statuscode: 404
Liveness probe failed: HTTP probe failed with statuscode: 404
Run Code Online (Sandbox Code Playgroud)
如何从部署访问端点?
我设置了舵柄和舵柄。我有分蘖部署。昨天,我可以正常跑步了。但是今天我收到此错误消息
Error: could not find a ready tiller pod
Run Code Online (Sandbox Code Playgroud)
我该如何解决。我通过命令尝试的一些信息。
它无法获取服务器信息。
$ helm version
Client: &version.Version{SemVer:"v2.14.1",
GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
Error: could not find a ready tiller pod
Run Code Online (Sandbox Code Playgroud)
我有一个正在运行的分蘖部署 675656bbcf-5q5gp。
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
tiller-deploy-675656bbcf-5q5gp 1/1 Running 0 46h
tunnelfront-557bbd9fb5-b8g7h 1/1 Running 0 47h
Run Code Online (Sandbox Code Playgroud)
检查部署的东西。
$ kubectl get deploy -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
tiller-deploy 0/1 1 0 46h
tunnelfront 0/1 1 0 47h
Run Code Online (Sandbox Code Playgroud)
描述分蘖部署信息,但尚未准备好。
$ kubectl describe pod tiller-deploy -n kube-system
Name: …Run Code Online (Sandbox Code Playgroud) 我正在使用terraform在azure中预配置一些资源,但似乎无法掌控安装nginx-ingress,因为它等待状态超时
helm_release.nginx_ingress:发生1个错误:
helm_release.nginx_ingress:rpc错误:代码=未知desc =发布nginx-ingress失败:等待条件超时
面对错误,Terraform不会自动回滚。相反,您的Terraform状态文件已使用成功完成的所有资源进行了部分更新。请解决以上错误,然后再次应用以逐步更改您的基础架构。主文件
data "azurerm_public_ip" "nginx_ingress" {
name = "xxxx-public-ip"
resource_group_name = "xxxx-public-ip"
}
resource "azurerm_resource_group" "xxxx_RG" {
name = "${var.name_prefix}"
location = "${var.location}"
}
resource "azurerm_kubernetes_cluster" "k8s" {
name = "${var.name_prefix}-aks"
kubernetes_version = "${var.kubernetes_version}"
location = "${azurerm_resource_group.xxxx_RG.location}"
resource_group_name = "${azurerm_resource_group.xxxx_RG.name}"
dns_prefix = "AKS-${var.dns_prefix}"
agent_pool_profile {
name = "${var.node_pool_name}"
count = "${var.node_pool_size}"
vm_size = "${var.node_pool_vmsize}"
os_type = "${var.node_pool_os}"
os_disk_size_gb = 30
}
service_principal {
client_id = "${var.client_id}"
client_secret = "${var.client_secret}"
}
tags = {
environment = "${var.env_tag}"
} …Run Code Online (Sandbox Code Playgroud) terraform kubernetes-helm terraform-provider-azure azure-aks nginx-ingress
我有掌舵部署问题。在我向部署添加新的环境变量之后发生了这种情况。
当我执行: helm upgrade [RELEASE] [CHART]
我收到以下错误:
Error: The order in patch list:
[
map[name:APP_ENV value:prod]
map[name:MAILER_URL value:...]
map[name:APP_VERSION value:v0-0-3]
map[name:APP_COMMIT_SHA value:...]
]
doesn't match $setElementOrder list:
[
map[name:APP_ENV]
map[name:COMPOSER_HOME]
map[name:PHP_XDEBUG_ENABLED]
map[name:DATABASE_DRIVER]
map[name:DATABASE_HOST]
map[name:DATABASE_NAME]
map[name:DATABASE_USER]
map[name:SECRET]
map[name:INDEX_HOSTS]
map[name:MAILER_FROM_ADDRESS]
map[name:MAILER_FROM_NAME]
map[name:UPLOAD_DIR]
map[name:ARCHIVE_DIR]
map[name:CATALOG_STORAGE_DIR]
map[name:ASSET_STORAGE_DIR]
map[name:TMP_STORAGE_DIR]
map[name:UPLOAD_TMP_DIR]
map[name:APP_VERSION]
map[name:APP_COMMIT_SHA]
map[name:APP_CRON]
map[name:DATABASE_PASSWORD]
map[name:MAILER_URL]
...
]
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 flag 执行相同的命令--dry-run,则不会出现任何错误 ( helm upgrade [RELEASE] [CHART] --dry-run)
我不知道这个问题的原因或如何解决它
我有一个通过range迭代渲染多次的模板,我可以$.Release.Name毫无问题地访问变量外部变量。但是,当我包含模板时,我无法让它工作:
{{ range $key, $val := $.Values.resources }}
...
annotations:
checksum/config: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)
并在secrets.yaml:
apiVersion: "v1"
kind: "Secret"
metadata:
name: {{ $.Release.Name }}-secrets
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error: render error in "botfront-project/templates/deployment.yaml": template: [filename] :19:28: executing [filename] at <include (print $.Template.BasePath "/secrets.yaml") .>: error calling include: template: .../secrets.yaml:4:19: executing ".../secrets.yaml" at <$.Release.Name>: nil pointer evaluating interface {}.Name
Run Code Online (Sandbox Code Playgroud)
如何访问包含模板中的变量?
我在values.yaml中有以下值
pg_hba:
- hostssl all all 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)
要求是检查该hostssl行是否存在,如果是,则应进入 if 循环并执行某些操作。
我尝试使用{{ if has "hostssl" .Values.pg_hba }}
,但它仅搜索确切的字符串“hostssll”,而不是整行。
请帮助我如何检查 if 条件下的整行。
我目前正在阅读 helm 的文档,点 (.) 至少有 3 种不同的用途,是否有任何具体定义?它与 bash 使用(实际文件夹/文件)有什么共同之处吗?
文档中的一些案例
这会打印之前调用的范围内的访问文件吗?
{{- $files := .Files }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{ . }}: |-
{{ $files.Get . }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
这告诉“mychart.app”使用当前文件夹中的文件(类似 bash 的行为)
{{ include "mychart.app" . | indent 4 }}
Run Code Online (Sandbox Code Playgroud)
而这个,我想它从整个文件夹中获取值???我想这是不正确的,因为它不起作用(当时是另一名员工制作的,我必须修复它)
{{- define "read.select-annot" -}}
{{- range $key, $value := . }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
kubernetes-helm ×10
kubernetes ×5
go-templates ×3
azure ×1
azure-aks ×1
helmfile ×1
statefulset ×1
terraform ×1