基本上我想做的是研究 Pod 生命周期,并检查我们是否可以在 Pod 终止之前进行一些清理/备份,例如复制日志。
我需要什么:在终止之前将日志/堆转储从容器复制到主机路径/S3
我尝试过的:
我使用了带有 bash 命令的 preStop 钩子来回显一条消息(只是为了看看它是否有效!!)。使用带有延迟的终止GracePeriodSeconds 来预停止并切换它们以查看进程是否有效。前任。保持终止GracePeriodSeconds:30秒(默认)并将preStop命令设置为休眠50秒,并且不应生成该消息,因为容器将在那时终止。这按预期工作。
我的问题:
我发现这篇文章与此密切相关,但无法通过https://github.com/kubernetes/kubernetes/issues/24695
所有投入表示赞赏!
kubernetes devops minikube kubernetes-deployment kubernetes-pod
由于内存消耗,我的部署窗口被驱逐:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Evicted 1h kubelet, gke-XXX-default-pool-XXX The node was low on resource: memory. Container my-container was using 1700040Ki, which exceeds its request of 0.
Normal Killing 1h kubelet, gke-XXX-default-pool-XXX Killing container with id docker://my-container:Need to kill Pod
Run Code Online (Sandbox Code Playgroud)
我尝试通过在我的部署中添加以下内容来为其提供更多内存yaml:
apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
containers:
- name: my-container
image: my-container:latest
...
resources:
requests:
memory: "3Gi"
Run Code Online (Sandbox Code Playgroud)
但是,它未能部署:
Type Reason Age From Message
---- ------ …Run Code Online (Sandbox Code Playgroud) kubernetes google-kubernetes-engine kubernetes-deployment kubernetes-pod
目前,我们正在使用入口点构建 Docker 映像,并将该映像传递到 Kubernetes 部署。
有没有办法将入口点直接动态传递给 Kubernetes,以便它启动 Spring Boot 应用程序?
在 Kubernetes 中直接传递此入口点有哪些不同方法?
### Runtime image ###
FROM openjdk:8-jre-alpine
#Set working dir
WORKDIR /test
# Copy the executable JAR
COPY /*.jar /test/
# Run the app
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Djsversion=1.0 -D<variable>=<service-1> -D<variable>=<service-2> -jar *.jar
Run Code Online (Sandbox Code Playgroud) docker spring-boot kubernetes kubernetes-deployment kubernetes-pod
我发现大量文章和文档描述了 Kubernetes 上有状态应用程序的 StatefulSet 相对于 Deployment 的优势。我无法弄清楚的是相反的情况:与 Deployments 相比,StatefulSet 的缺点,特别是对于无状态应用程序。
有人可以解释一下为什么不总是对有状态和无状态应用程序使用 StatefulSets 吗?
我正在尝试测试在使用完全相同的选择器创建两个部署时部署控制器争夺 Pod 的理论。
\n这是我的deployment.yaml
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: app\n template:\n metadata:\n labels:\n app: app\n spec:\n containers:\n - name: busybox-container\n image: busybox\n command: ["/bin/sh"]\n args: ["-c", "sleep 10m"]\n resources:\n limits:\n memory: "128Mi"\n cpu: "500m"\n ports:\n - containerPort: 8080\nRun Code Online (Sandbox Code Playgroud)\ndeployment1.yamlmetadata.name仅与具有该值deployment-1并spec.replicas设置为 1 的字段不同。
我这样连续创建部署:
\n\xe2\x9d\xaf kubectl create -f deployment.yaml; kubectl create -f deployment1.yaml\ndeployment.apps/deployment created\ndeployment.apps/deployment-1 created\n\n\xe2\x9d\xaf kubectl get all\nNAME READY STATUS RESTARTS AGE\npod/deployment-1-7d95ff89fc-p6fg7 1/1 Running 0 …Run Code Online (Sandbox Code Playgroud) 我试图将一些容器信息公开为环境变量,从 pod 的 spec.template.spec.containers[0].name 读取值,这似乎不起作用。用于引用部署模板中的容器字段的 apiSpec 是什么。部署模板如下:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
replicas: 2
selector:
matchLabels:
run: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 8000
resources: {}
env:
- name: MY_CONTAINER_NAME
valueFrom:
fieldRef:
fieldPath: spec.template.spec.containers[0].name
Run Code Online (Sandbox Code Playgroud) helm 安装失败并出现以下错误
命令
helm install --name helloworld helm
Run Code Online (Sandbox Code Playgroud)
以下是我运行上述命令后出现的错误
Error: release usagemetrics failed: Deployment in version "v1" cannot be handled as a Deployment: v1.Deployment.Spec: v1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.LivenessProbe: readObjectStart: expect { or n, but found 9, error found in #10 byte of ...|ssProbe":9001,"name"|..., bigger context ...|"imagePullPolicy":"IfNotPresent","livenessProbe":9001,"name":"usagemetrics-helm","ports":[{"containe|...
Run Code Online (Sandbox Code Playgroud)
下面是deployment.yaml 文件,我觉得活性和探测配置存在问题。
apiVersion: apps/v1
kind: Deployment
metadata:
name: release-name-helm
spec:
replicas: 1
selector:
matchLabels:
app: release-name-helm
release: release-name
template:
metadata:
labels:
app: release-name-helm
release: release-name
spec:
containers:
- name: release-name-helm
imagePullPolicy: IfNotPresent
image: …Run Code Online (Sandbox Code Playgroud) 我想在 configMap(或秘密)中设置一个布尔变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: mlo-stage
data:
webpack_dev_server: false
Run Code Online (Sandbox Code Playgroud)
但是当我应用它时,我收到以下错误:
The request is invalid: patch: Invalid value: "map[data:map[webpack_dev_server:false] metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{ blah blah blah}]]]": unrecognized type: string
Run Code Online (Sandbox Code Playgroud)
我试图将值更改为 Off/No/False,但都存在同样的问题。
好像data map中key的值只能是字符串,我试过把值改成“false”,yaml文件没问题,但是后来变量变成了字符串而不是boolean。
如果我想传递一个布尔值作为值应该怎么做?
kubernetes kubernetes-deployment kubernetes-secrets configmap
我编写了一个 bash 脚本来获取 kubernetes 集群上的所有部署。我有一个命令可以将所有部署缩放为零。我面临的挑战是,我希望能够遍历所有部署并保存它们的名称和副本数量,以便在缩小后将它们缩放回原始。
我如何做到这一点?这就是我迄今为止所做的。
$ kubectl get deployments
$ kubectl scale deploy -n default --replicas=0 --all
Run Code Online (Sandbox Code Playgroud) kubernetes google-kubernetes-engine kubectl kubernetes-deployment
我正在使用 helm 环境变量来覆盖我的一些 spring boot application.yaml 配置,并且它工作得很好。
helm install deploy-name-1 mychartname --values=.helm/deployment/values.yaml
Run Code Online (Sandbox Code Playgroud)
值.yaml
env:
- name: WORD
value: hello
Run Code Online (Sandbox Code Playgroud)
在执行 helm install 命令时,我可以看到在 helm 部署期间选择了正确的单词,这一切都很好。
但是我想通过 CLI 上的 helm install 命令覆盖此环境变量“WORD”的值。在尝试时我面临以下错误......
命令(取自此处):
helm install deployment2 mychartname --values=.helm/deployment/values.yaml --set env.WORD=tree
Run Code Online (Sandbox Code Playgroud)
错误
panic: interface conversion: interface {} is []interface {}, not map[string]interface {}
goroutine 1 [running]:
helm.sh/helm/v3/pkg/strvals.(*parser).key(0xc0004eff60, 0xc000538840, 0x1592d34, 0x1838b20)
/home/circleci/helm.sh/helm/pkg/strvals/parser.go:211 +0xdf1
helm.sh/helm/v3/pkg/strvals.(*parser).parse(0xc0004eff60, 0xc000538840, 0x0)
/home/circleci/helm.sh/helm/pkg/strvals/parser.go:133 +0x3f
helm.sh/helm/v3/pkg/strvals.ParseInto(0xc0000b60c0, 0x23, 0xc000538840, 0x0, 0x0)
/home/circleci/helm.sh/helm/pkg/strvals/parser.go:70 +0xc5
helm.sh/helm/v3/pkg/cli/values.(*Options).MergeValues(0xc000080c60, 0xc0004efb40, 0x1, 0x1, 0x0, 0x0, …Run Code Online (Sandbox Code Playgroud) yaml environment-variables command-line-interface kubernetes-helm kubernetes-deployment