标签: kubernetes-pod

如何使用 PodTemplate

我看到有一个名为PodTemplatewhich 的对象几乎没有文档

其中提到:

Pod 模板是 Pod 规范,包含在其他对象中,例如Replication ControllersJobsDaemonSets

但我不知道如何在Replication Controllers,Jobs或上提及它DaemonSets

我创建了一个PodTemplate这样的:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PodTemplate
metadata:
  name: pod-test
  namespace: default
template:
  metadata:
    name: pod-template
  spec:
    containers:
    - name: container
      image: alpine
      command: ["/bin/sh"]
      args: ["-c", "sleep 100"]
EOF
Run Code Online (Sandbox Code Playgroud)

我想在a中使用它DaemonSet,我该怎么做?

以下是 YAML 的示例DaemonSet

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod

5
推荐指数
1
解决办法
5840
查看次数

如果一个容器发生故障,如何杀死多容器 pod?

我正在使用Jenkins Kubernetes 插件,它在 Kubernetes 集群中启动 Pod,充当 Jenkins 代理。Pod 包含 3 个容器以提供从属逻辑、Docker 套接字以及gcloud命令行工具。

通常的工作流程是从机完成其工作并通知主机它已完成。然后 master 终止 pod。但是,如果从属容器由于网络连接丢失而崩溃,则该容器将终止并显示错误代码 255,其他两个容器将继续运行,pod 也会继续运行。这是一个问题,因为 Pod 具有大量 CPU 请求,而且从属设备仅在必要时运行的设置成本低廉,但让多台机器运行 24 小时或周末会造成明显的经济损失。

我知道在同一个 Pod 中启动多个容器并不是 Kubernetes 艺术,但是如果我知道自己在做什么并且我假设我知道的话就可以了。我确信考虑到 Jenkins Kubernetes 插件的工作方式,很难以不同的方式解决这个问题。

如果一个容器失败而没有重生,我可以让 pod 终止吗?带有超时的解决方案也是可以接受的,但不太优选。

jenkins kubernetes kubernetes-pod jenkins-kubernetes

5
推荐指数
1
解决办法
2791
查看次数

GKE 中跳过 dnsConfig

面临以下问题:我需要在某些 Pod 上添加搜索域,以便能够与无头服务通信。Kubernetes 文档建议设置一个 dnsConfig 并设置其中的所有内容。这就是我所做的。此外,还有一个限制,即只能设置 6 个搜索域。清单的一部分:

    spec:
  hostname: search
  dnsPolicy: ClusterFirst
  dnsConfig:
    searches:
      - indexer.splunk.svc.cluster.local
  containers:
  - name: search
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有任何效果,并且目标 pod 上的 resolv.conf 文件不包含此搜索域:

search splunk.svc.cluster.local svc.cluster.local cluster.local us-east4-c.c.'project-id'.internal c.'project-id'.internal google.internal
nameserver 10.39.240.10
options ndots:5
Run Code Online (Sandbox Code Playgroud)

快速查看此配置后,我发现当前指定了 6 个搜索域,这可能就是未添加新搜索域的原因。您可以手动添加,一切都会正常,但这不是我想要实现的目标。

您有什么想法如何绕过这个限制吗?

PS 将 dnsPolicy 设置为 None 也不是一个选项,因为设置预启动挂钩来添加我的搜索区域。

---
# Search-head deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: search
  namespace: splunk
  labels:
    app: splunk
spec:
  replicas: 1
  selector:
    matchLabels:
      app: splunk
  template:
    metadata:
      labels:
        app: splunk
    spec:
      hostname: search …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform kubernetes google-kubernetes-engine kubernetes-pod

5
推荐指数
1
解决办法
1595
查看次数

Apache Airflow kubernetes pod 操作员如何在 DAG 中形成环境变量时在“value_from”中传递 configMap 值

我正在使用 Apache Airflow,在我们的 DAG 任务之一中,我们使用 Kubernetes Pod Operator。这样做是为了在 kubernetes pod 中执行我们的应用程序进程之一。Kubernetes pod 操作符工作得很好。通过 pod 操作符传递环境变量工作得很好。但是,我尝试从 Kubernetes ConfigMap 传递环境变量值,但它无法从 ConfigMap 获取值。

代码片段如下。在代码片段中,请重点关注该行'SPARK_CONFIG': '{"valueFrom": {"configMapKeyRef": {"key": "endpoint","name": "spark-config"}}}'

请在下面找到代码片段

pod_process_task = KubernetesPodOperator(
        namespace=cons.K8_NAMESPACE,
        image=cons.UNCOMPRESS_IMAGE_NAME,
        config_file=cons.K8_CONFIG_FILE,
        env_vars={
            'FRT_ID': '{{ dag_run.conf["transaction_id"] }}',
            'FILE_NAME': '{{ dag_run.conf["filename"]}}',
            'FILE_PATH': '{{dag_run.conf["filepath"]}}' + "/" + '{{ dag_run.conf["filename"]}}',
            'LOG_FILE': '{{ ti.xcom_pull(key="process_log_dict")["loglocation"] }}',
            'SPARK_CONFIG': '{"valueFrom": {"configMapKeyRef": {"key": "endpoint","name": "spark-config"}}}'
        },
        name=create_pod_name(),
        # name= 'integrator',
        task_id="decrypt-951",
        retries=3,
        retry_delay=timedelta(seconds=60),
        is_delete_operator_pod=True,
        volumes=[volume-a,volume_for_configuration],
        volume_mounts=[volume_mount_a,volume_mount_config],
        resources=pod_resource_specification,
        startup_timeout_seconds=cons.K8_POD_TIMEOUT,
        get_logs=True,
        on_failure_callback=log_failure_unzip_decrypt,
        dag=dag
    )
Run Code Online (Sandbox Code Playgroud)

然后在尝试从 pod 中打印变量时,我得到如下结果。请注意,除了我尝试引用 configMap …

environment-variables airflow kubernetes-pod

5
推荐指数
1
解决办法
1万
查看次数

如何使用client-go API返回的Pod条件数组?

我使用 Go 中的 client-go API 来访问给定控制器(部署)下的 Pod 列表。使用选择器标签查询属于它的 pod 列表时,您会得到一个数组PodConditions- https://pkg.go.dev/k8s.io/api/core/v1?tab=doc#PodCondition

这与 Pod 条件的官方文档非常一致 - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions。但文档并不清楚如何访问这个条目数组。是按照最近的条目先排序吗?例如,如果我只想访问 Pod 的最新状态,应该怎么做?从我在本地集群中进行的一项试验中,我获得了控制器 Pod 之一的更新(Pod 条件数组),如下所示

{Initialized True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:15 +0000 UTC  } 
{Ready True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:22 +0000 UTC  } 
{ContainersReady True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:22 +0000 UTC  } 
{PodScheduled True 0001-01-01 00:00:00 +0000 UTC 2020-07-29 08:01:15 +0000 UTC  }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,给定的 Pod几乎同时从 转变ContainersReady为。但它们都不在第一个或最后一个索引中。Ready08:01:22 +0000 UTC

TLDR,问题是如何从这个值数组推断最新的 Pod …

kubernetes kubernetes-apiserver kubernetes-pod client-go

5
推荐指数
1
解决办法
764
查看次数

如何在 dnsConfig 中将节点 ip 设置为名称服务器?

我正在覆盖 pod 的 dns 策略,因为我面临着pod 的默认问题/etc/resolv.conf。另一个问题是由于/etc/resolv.confpod 的默认设置,pod无法连接到 smtp 服务器

因此,需要应用于部署/pod 的 dnspolicy 是:

      dnsConfig:
        nameservers:
          - <ip-of-the-node>
        options:
          - name: ndots
            value: '5'
        searches:
          - monitoring.svc.cluster.local
          - svc.cluster.local
          - cluster.local
      dnsPolicy: None
Run Code Online (Sandbox Code Playgroud)

在上面的配置中,nameservers需要是部署 pod 的节点的 IP。由于我有三个工作节点,我无法将值硬编码到特定工作节点的 IP。我不希望将 pod 配置为部署到特定节点,因为如果资源不足以让 pod 部署到特定节点,则 pod 可能会保持挂起状态。

如何nameservers获取部署 pod 的节点的 IP 地址的值?

或者是否可以nameservers使用某种通用参数更新pod,以便 pod 能够连接到 smtp 服务器。

openshift openshift-origin kubernetes kubernetes-pod okd

5
推荐指数
1
解决办法
348
查看次数

Kubernetes Pod 内的互联网连接无法正常工作

无法从 Pod 内部连接到互联网

我的系统规格包括:我使用 2 个系统创建了一个 Kubernetes 集群,一个作为主节点,另一个作为工作节点。

操作系统:名称 =“Red Hat Enterprise Linux”版本 =“8.3 (Ootpa)”ID =“rhel”。

我使用以下链接安装了 Kuberenetes 集群(https://dzone.com/articles/kubernetes-installation-in-redhat-c ​​entos )

我尝试了 CALICO pod 网络和 Flannel pod 网络,因为都发生了同样的问题。无法从 Pod 内部连接到互联网

请参阅下图了解更多详情

在此输入图像描述

您可以看到所有 Pod 都已启动并正在运行。

我的 coredns pod 也已启动并正在运行,并且相应的服务也已启动,请检查下图

在此输入图像描述

调试

为了调试,我尝试使用此链接(https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

每当我执行 nslookup 时,它都会显示错误(;; 连接超时;无法访问服务器,命令以退出代码 1 终止)

请看下面的图片

在此输入图像描述

谁能告诉我问题到底出在哪里。为什么我无法从 Pod 内部连接到互联网

任何帮助将不胜感激,谢谢。

docker kubernetes kube-proxy kubernetes-pod kubernetes-service

5
推荐指数
1
解决办法
1万
查看次数

如何查看附加到 pod 中容器的卷并向其中写入一些数据

我想将一些数据写入卷中,即驻留在该卷中的目录之一,我可以执行 pod,但我不知道如何检查附加卷并向其写入数据。

我可以使用以下命令找到卷和安装点:

kubectl describe pods pod-name
Run Code Online (Sandbox Code Playgroud)

containers volume kubernetes kubectl kubernetes-pod

5
推荐指数
1
解决办法
5万
查看次数

当 pod 包含多个容器时,K8s 的活性探测行为?

场景:一个 K8S Pod 具有多个容器,并且为每个容器配置活性/就绪探针。现在,如果活性探测在某些容器上成功,但在少数容器上失败,k8s 会做什么。

  1. 它会仅重新启动失败的容器
    还是
  2. 它会重新启动整个 Pod 吗?

kubernetes kubernetes-pod readinessprobe livenessprobe

5
推荐指数
2
解决办法
8643
查看次数

container_memory_rss 与使用的节点内存的关系

我试图理解与node_memory_used有关的container_memory_rss或container_memory_working_set_bytes ,即(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes

这就是我的意思

PROMQL 1:

sum(container_memory_rss) by (instance) / 1024 / 1024 / 1024

{instance="172.19.51.8:10250"}        7.537441253662109
Run Code Online (Sandbox Code Playgroud)

PROMQL 2:

sum(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) by (instance) / 1024 / 1024 / 1024

{instance="172.19.51.8:9100"}         2.2688369750976562
Run Code Online (Sandbox Code Playgroud)

PROMQL 3:

sum(container_memory_working_set_bytes) by (instance) / 1024 / 1024 / 1024

{instance="172.19.51.8:10250"}        9.285114288330078
Run Code Online (Sandbox Code Playgroud)

PROMQL 4:

sum(node_memory_MemAvailable_bytes) by (instance) / 1024 / 1024 / 1024

{instance="172.19.51.8:9100"}         13.356605529785156
Run Code Online (Sandbox Code Playgroud)

所以如果一个 Pod 总是运行在一个 Node 上。我无法理解为什么container_memory_rsscontainer_memory_working_set_bytes大于node_memory_used

即 PROMQL 1 和 PROMQL 3 的值远大于 …

kubernetes prometheus cadvisor kubernetes-pod

5
推荐指数
1
解决办法
1714
查看次数