我想在两个特定节点(我们的 kube 集群中总共 15 个节点)中安排 10 个 pod。
所以在复制控制器文件中,我在 nodeSelector 中提到了两个值,如下所示。
nodeSelector:
app: node1
app: node2
Run Code Online (Sandbox Code Playgroud)
问题是它一直只占用 node2。无论我提到什么序列,它只占用最后一个节点。
注意:node1和node2是节点的标签。
在 docker run 命令中,我们可以指定主机端口范围以绑定到 EXPOSED 容器端口。我想通过 Kubernetes 做同样的事情。有谁知道这是怎么做到的吗?我当前的 pod 定义是-
apiVersion: v1
kind: Pod
metadata:
name: nginx-testing
spec:
containers:
- name: nginx-container
image: docker.io/nginx
ports:
- containerPort: 80
hostPort: 9088
Run Code Online (Sandbox Code Playgroud)
在最后一行,我想要一系列端口号,而不是指定单个端口号。我尝试了类似的东西hostPort: 9088-9999 or 9088..9999,但它不起作用。
对于其中一项要求,我使用下面的 yaml 文件在默认名称空间上创建了一个新的 pod
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo-lr1
spec:
limits:
- max:
memory: 5Gi
min:
memory: 900Mi
type: Container
Run Code Online (Sandbox Code Playgroud)
现在我需要从 kubernetes 的默认命名空间中删除这些 LimitRange ?
作为我们公司的 QA,我是 kubernetes 的日常用户,我们使用 kubernetes 作业来创建性能测试 pod。根据文档,工作的优势之一是
创建一个 Job 对象,以便可靠地运行一个 Pod 直至完成
但在我们的测试中,如果之前的 Pod 失败,此功能将创建无限个 Pod,这将占用我们团队共享集群的资源,并且删除这些 Pod 将花费大量时间。看这张图片:

目前的工作清单是这样的:
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "upgradeperf",
"namespace": "ntg6-grpc26-tts"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "upgradeperfjob",
"image":
"mycompany.com:5000/ncs-cd-qa/upgradeperf:0.1.1",
"command": [
"python",
"/jmeterwork/jmeter.py",
"-gu",
"git@gitlab-pri-eastus2.dev.mycompany.net:mobility-ncs-tools/tts-cdqa-tool.git",
"-gb",
"upgradeperf",
"-t",
"JMeter/testcases/ttssvc/JMeterTestPlan_ttssvc_cmpsize.jmx",
"-JtestDataFile",
"JMeter/testcases/ttssvc/testData/avaml_opus.csv",
"-JthreadNum",
"3",
"-JthreadLoopCount",
"1500",
"-JresultsFile",
"results_upgradeperf_cavaml_opus_t3_l1500.csv",
"-Jhost",
"mtl-blade32-03.mycompany.com",
"-Jport",
"28416"
]
}
],
"restartPolicy": "Never",
"imagePullSecrets": [
{
"name": "docker-registry-secret"
}
] …Run Code Online (Sandbox Code Playgroud) 我已经为我在 Kubernetes 中的部署之一配置了 hpa。
有什么方法可以检查部署中是否发生 HPA 缩放以及何时发生?
我没有部署普罗米修斯或任何监控解决方案。
我在尝试通过 Kubernetes 调度程序启动 Spark 作业时遇到一些问题。
我希望所有驱动程序/执行程序 Pod 都生成到具有一定污点的节点上。因此,我想指定将直接注入到 Pod 配置文件中的容忍度。目前没有直接从spark-submit命令默认的方式
根据this和this,用户应该能够指定一个 pod 模板,该模板可以使用以下参数进行设置:spark.kubernetes.driver.podTemplateFile和spark.kubernetes.executor.podTemplateFile。
spark-submit我尝试使用以下文件在命令中指定这些参数:
pod_template.template
apiVersion: v1
kind: Pod
spec:
tolerations:
- effect: NoSchedule
key: dedicated
operator: Equal
value: test
Run Code Online (Sandbox Code Playgroud)
然而,这种容忍永远不会被添加到启动的驱动程序窗格中。目前有办法解决这个问题吗?
作为参考,这里是完整的 Spark-submit 命令:
/opt/spark/bin/spark-submit --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.persistent.options.claimName=pvc-storage --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.persistent.mount.subPath=test-stage1/spark --conf spark.executor.memory=1G --conf spark.executor.instances=1 --conf spark.kubernetes.driver.volumes.persistentVolumeClaim.persistent.mount.subPath=test-stage1/spark --conf spark.kubernetes.executor.limit.cores=1 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.namespace=test-stage1 --conf spark.kubernetes.driver.volumes.persistentVolumeClaim.persistent.mount.path=/persistent --conf spark.kubernetes.driver.limit.memory=3G --conf spark.kubernetes.executor.volumes.persistentVolumeClaim.persistent.mount.path=/persistent --conf spark.submit.deployMode=cluster --conf spark.kubernetes.container.image=<SPARK IMAGE> --conf spark.master=k8s://https://kubernetes.default.svc --conf …Run Code Online (Sandbox Code Playgroud) 我已经在 kubernetes 集群上部署了应用程序,并使用 prometheus 和 grafana 进行监控。对于使用 Grafana 仪表板的 kubernetes pod 监控:Kubernetes 集群监控(通过 Prometheus)https://grafana.com/grafana/dashboards/315
我使用 id 315 导入了仪表板,它的反射没有 pod 名称和容器名称,而是获取 pod_name 。任何人都可以帮助我如何在仪表板中获取 pod 名称和容器名称。
可以获取集群上的所有 Pod:
kubectl get pod --all-namespaces -o wide
Run Code Online (Sandbox Code Playgroud)
还可以获取集群上具有特定标签的所有 Pod:
kubectl get pod --all-namespaces -o wide --selector some.specific.pod.label
Run Code Online (Sandbox Code Playgroud)
甚至可以获取集群特定节点上的所有 pod:
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node>
Run Code Online (Sandbox Code Playgroud)
问题是,如何从具有特定标签的命名空间中获取所有 pod?
例如kubectl get pod --namespace-label some.specific.namespace.label -o wide(伪代码)
我对 k8s 很陌生,所以如果问题没有意义或者不正确/愚蠢,我深表歉意。
我为我的 pod 定义配置了一个活性探针,它只访问运行状况 API 并检查其响应状态以测试 pod 的活性。
我的问题是,虽然我了解活性/就绪探针的目的……它们到底是什么?它们是否只是另一种类型的 Pod,它们被旋转起来并尝试通过配置的 API 与我们的 Pod 进行通信?或者它们是某种轻量级进程,在 Pod 内部运行并尝试 API 调用?
另外,探针如何与 Pod 通信?我们是否需要为 Pod 配置一个服务,以便探针能够访问 API,或者它是一个内部进程,不需要额外的配置?
kubernetes ×10
kubernetes-pod ×10
autoscaling ×2
docker ×2
kubectl ×2
apache-spark ×1
grafana ×1
port ×1
prometheus ×1
pyspark ×1