我看到有一个名为PodTemplatewhich 的对象几乎没有文档。
其中提到:
Pod 模板是 Pod 规范,包含在其他对象中,例如Replication Controllers、Jobs和DaemonSets。
但我不知道如何在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) 我正在使用Jenkins Kubernetes 插件,它在 Kubernetes 集群中启动 Pod,充当 Jenkins 代理。Pod 包含 3 个容器以提供从属逻辑、Docker 套接字以及gcloud命令行工具。
通常的工作流程是从机完成其工作并通知主机它已完成。然后 master 终止 pod。但是,如果从属容器由于网络连接丢失而崩溃,则该容器将终止并显示错误代码 255,其他两个容器将继续运行,pod 也会继续运行。这是一个问题,因为 Pod 具有大量 CPU 请求,而且从属设备仅在必要时运行的设置成本低廉,但让多台机器运行 24 小时或周末会造成明显的经济损失。
我知道在同一个 Pod 中启动多个容器并不是 Kubernetes 艺术,但是如果我知道自己在做什么并且我假设我知道的话就可以了。我确信考虑到 Jenkins Kubernetes 插件的工作方式,很难以不同的方式解决这个问题。
如果一个容器失败而没有重生,我可以让 pod 终止吗?带有超时的解决方案也是可以接受的,但不太优选。
面临以下问题:我需要在某些 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
我正在使用 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 …
我使用 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 …
我正在覆盖 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 服务器。
无法从 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
我想将一些数据写入卷中,即驻留在该卷中的目录之一,我可以执行 pod,但我不知道如何检查附加卷并向其写入数据。
我可以使用以下命令找到卷和安装点:
kubectl describe pods pod-name
Run Code Online (Sandbox Code Playgroud) 场景:一个 K8S Pod 具有多个容器,并且为每个容器配置活性/就绪探针。现在,如果活性探测在某些容器上成功,但在少数容器上失败,k8s 会做什么。
我试图理解与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_rss或 container_memory_working_set_bytes大于node_memory_used
即 PROMQL 1 和 PROMQL 3 的值远大于 …
kubernetes-pod ×10
kubernetes ×9
airflow ×1
cadvisor ×1
client-go ×1
containers ×1
docker ×1
jenkins ×1
kube-proxy ×1
kubectl ×1
okd ×1
openshift ×1
prometheus ×1
volume ×1