我有一个 configMap 文件:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
owner: testdb
name: testdb-configmap
data:
host: postgres
port: "5432"
Run Code Online (Sandbox Code Playgroud)
和一个秘密文件:
aapiVersion: v1
kind: Secret
type: Opaque
metadata:
labels:
owner: testdb
name: testdb-secret
namespace: test
data:
user: dGVzdA==
pwd: dGVzdA==
Run Code Online (Sandbox Code Playgroud)
我想构建一个环境变量,CONNECTION_STRING
如下所示:
env:
- name: CONNECTION_STRING
value: "Host=<host-from-configmap>;Username=<user-from-secret>;Password=<password-from-secret>;Port=<port-from-configmap>;Pooling=False;"
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可能,如果可以,那么如何?我也考虑过使用.tpl
(命名模板),但找不到方法。
笔记
由于我无权访问图像,因此CONNECTION_STRING
我必须以这种方式构建它。这些配置映射和秘密文件也将保持这样。
我们可以通过这种方式访问索引:
{{- range $i, $s := (some list) }}
{{$i}}
{{-end }}
output:
0
1
..etc
Run Code Online (Sandbox Code Playgroud)
但是,当列表是字符串拆分的结果时,索引将以下划线作为前缀
{{- range $i, $s := (split "X" "aaXbbXcc") }}
{{$i}}
{{-end }}
output:
_0
_1
..etc
Run Code Online (Sandbox Code Playgroud)
为什么?
我想使用 Helm v3 (v3.7.2) 来完成所有 k8s 安装、配置和维护。
因此,我设置了 yaml 模板:
但我在 Helm v3 文档中找不到任何有关设置 HPA ( HorizontalPodAutoscaler ) 的信息。可以使用从values.yaml 中提取的hpa.yaml 来完成此操作吗?
在 Helm (使用 v3)中,如何使用其他变量在模板内构建变量?假设我有以下内容:
{{- $def := index .Values "default" -}}
apiVersion: v1
data:
POSTGRES_HOST: {{ $def.POSTGRES_HOST | b64enc | quote }}
POSTGRES_USER: {{ $def.POSTGRES_USER | b64enc | quote }}
POSTGRES_PASSWORD: {{ $def.POSTGRES_PASSWORD | b64enc | quote }}
POSTGRES_DB: {{ $def.POSTGRES_DB | b64enc | quote }}
kind: Secret
metadata:
name: server
type: Opaque
Run Code Online (Sandbox Code Playgroud)
然后我想做类似以下(伪代码)的事情,使用+
字符串连接:
DATABASE_URL: {{ "postgres://" + $def.POSTGRES_USER + ":" + $def.POSTGRES_PASSWORD + "@" + $def.POSTGRES_HOST + "/" + $def.POSTGRES_DB | b64enc | quote …
Run Code Online (Sandbox Code Playgroud) 第 11 行:期望赋值或函数调用,但看到的是表达式
这是我每次运行时遇到的错误
启动
在我正在编写的 React JS 应用程序中。用于 CMS 的 GraphCMS。一切正常,除了当我尝试映射帖子时,它会出现此错误。
我怀疑这个问题可能与 JSHint 有关,但我不知道如何解决这个问题。
这是我的代码:
import React from 'react';
import { Link } from 'react-router-dom';
import { graphql} from 'react-apollo';
import gql from 'graphql-tag';
const LandingPage = ({data: {loading, allPosts}}) => {
if(!loading) {
return (
<div className="wrapper">
{allPosts.map(post => { // <-- line 11
<article className="content" key={post.id}>
<h2>{post.title}</h2>
<p dangerouslySetInnerHTML={{__html: post.description}}>
<Link to={`/post/${post.slug}`}>
<button className="btn">Read More</button>
</Link>
</p>
</article>
})}
</div>
);
}
return <h2>Loading Posts...</h2>
};
const …
Run Code Online (Sandbox Code Playgroud) apiVersion: v1
kind: Pod
metadata:
name: echo-pod
namespace: echo
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 81
Run Code Online (Sandbox Code Playgroud)
尝试通过运行上面的 yaml 文件来连接端口 81,但它仍在端口 80 上连接。使用 telnet 检查连接
echo -pod的ip是192.168.211.1
root@ip-172-31-16-143:~# kubectl exec busybox -- telnet 192.168.211.1 80
Connected to 192.168.211.1
root@ip-172-31-16-143:~# kubectl exec busybox -- telnet 192.168.211.1 81
telnet: can't connect to remote host (192.168.211.1): Connection refused
command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud) 尝试使用timeout
andbash
作为入口点未按预期工作。即使在指定的超时后,Pod 仍会继续运行。目的是有一个bash -c
入口点,我可以为其定义超时,之后 pod 会进入“错误”状态。一旦它起作用,这将用于使备份/清理等作业超时,否则这些作业可能会永远卡住。
apiVersion: v1
kind: Pod
metadata:
labels:
run: redis-cli
name: redis-cli
spec:
containers:
- name: redis-cli
image: xxxx/redis-cli:0.0.1
imagePullPolicy: Always
env:
- name: REDIS_SERVICE
value: redis.svc
- name: REDIS_PORT
value: "6666"
command: ['/usr/bin/timeout', '20', '/bin/bash', '-c' ]
args:
- sleep 6000
resources:
limits:
memory: "12Gi"
cpu: "2000m"
dnsPolicy: ClusterFirst
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud) 目前我正在我的管道中使用它
kubectl apply -f deployment.yaml && kubectl rollout status -f deployment.yaml
Run Code Online (Sandbox Code Playgroud)
在 yaml 中使用这个
readinessProbe:
tcpSocket:
port: 90
initialDelaySeconds: 120
periodSeconds: 10
timeoutSeconds: 10
failureThreshold: 1
successThreshold: 1
livenessProbe:
tcpSocket:
port: 90
initialDelaySeconds: 120
periodSeconds: 20
timeoutSeconds: 2
failureThreshold: 1
successThreshold: 1
Run Code Online (Sandbox Code Playgroud)
对我来说,kubectl rollout 运行了很长时间,阻塞了部署管道。从文档中
默认情况下,“推出状态”将监视最新推出的状态,直到完成
我的问题:
1/ 哪些操作是有助于部署“直到完成”的部分(资源创建、资源拆卸?...)
2/ readinessProbe 和 livenessProbe 是否会影响部署时间
我正处于 Kubernetes 的学习阶段,想要为我的项目设置 CI/Cd 管道。我正在使用谷歌云并准备好以下元素
helm
维护我的 K8s 模板。cloudbuilld.yaml
开发用于编译 docker 镜像并将其推送到 google 容器注册表。我陷入困境 - 一旦我的 cloudbuild.yaml 完成了 docker 镜像的构建并将其推送到注册表,我如何使用 helm 来升级图表?
这是我的样本cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ["build", "-t", "gcr.io/kubernetes-amit-test/github.com/0xvoila/apache/phoenix:$SHORT_SHA", "."]
- name: "gcr.io/cloud-builders/docker"
args: ["push", "gcr.io/kubernetes-amit-test/github.com/0xvoila/apache/phoenix:$SHORT_SHA"]
- name: "alpine/helm:latest". --- It is not working
args: ["helm","upgrade","mychart","image", "gcr.io/kubernetes-amit-test/github.com/0xvoila/apache/phoenix:$SHORT_SHA"]
Run Code Online (Sandbox Code Playgroud)
我的问题是
我试图找出在特定条件下在 terraform 中设置 helm 值的最佳方法是什么。例如,我希望下面的代码片段仅在特定用例中执行。否则,我希望 Terraform 忽略它。我的用例是,我想让最终用户运行此 Terraform 来选择是否要配置内部 Azure LB 还是常规 LB。如果是常规的——也在代码中创建的公共 IP 将在值中设置。如果是内部 - Azure 将自动生成一个私有 IP 并将其设置为 LB 的“外部 IP”。
set {
name = "controller.service.loadBalancerIP"
value = mypuclicip
}
Run Code Online (Sandbox Code Playgroud)
知道我怎样才能实现它吗?