Kubernetes pod 修改hosts文件

前言 最近看了 k8s 的书,学习了一些新的知识,将会分几篇来介绍学习到的知识,本文来先介绍k8s中如何修改 pod 的hosts文件。 我们知道当DNS出现问题时,可以向 Pod 的/etc/hosts文件添加条目来提供主机名解析Pod级别覆盖。该如何向hosts 文件中添加条目呢? 可以使用PodSpec中的HostAliases字段添加自定义条目。 虽然我们也可以直接进入pod修改host文件来实现,但这样pod重建时会被覆盖,所以我们应该使用 HostAliases 来进行修改,因为该文件会由 Kubelet 管理,并且 可以在 Pod 创建/重启过程中被重写。 使用 我们该如何操作呢,接下来由我来介绍使用步骤: 1 先创建 Deployment YAML文件来创建后台运行的 busybox pod apiVersion: apps/v1 kind: Deployment metadata: name: busybox-deployment spec: replicas: 1 selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox args: [ "sleep", "3600" ] resources: limits: memory: "128Mi" cpu: "500m" requests: memory: "64Mi" cpu: "250m" volumeMounts: - name: busybox-volume mountPath: /data volumes: - name: busybox-volume emptyDir: {} 查看 pod ip 2 查看 /etc/hosts 文件 cat /etc/hosts ...

六月 3, 2023 · overstarry

Helm介绍及使用

今天我来简单介绍 kubernetes 生态中一个重要一环-包管理工具 Helm。 介绍 Helm 是 Kubernetes 的开源包管理器。它提供了提供、共享和使用为 Kubernetes 构建的软件的能力。 Helm 于 2015 年在 Deis 创建,后来被微软收购。现在称为 Helm Classic 的是在当年 11 月的首届 KubeCon 上推出的。2016 年 1 月,Helm Classic 与谷歌的 Kubernetes 部署管理器合并到现在是 Helm 主要项目的存储库中。 该项目目前拥有超过 30,000 个 GitHub stars,每月从全球获得超过 200 万次下载。2020 年 4 月,Helm 在 CNCF 中获得毕业。 安装 Helm 二进制安装 1 打开 https://github.com/helm/helm/releases , 下载你需要的版本 2 解压安装包 3 将文件夹中的 helm 二进制文件移动到相应的位置 脚本安装 helm 官方提供了一个安装的脚本: $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 $ chmod 700 get_helm.sh $ ./get_helm.sh 除了以上2种安装方式,你还可以通过各个操作系统的包管理工具安装和编译源码安装,这里就不过多赘述了。 ...

二月 4, 2023 · overstarry

Kubernetes Configmaps mounted with subPath not update when changed

起因 最近在使用 k8s 部署应用时,我使用 ConfigMaps 的方式来挂载应用的配置文件。在我的知识储备中,k8s 修改 cm 的内容,pod 里的配置文件应该也会同步更新才是,但是我进入 pod , 发现配置还是旧版本没有更新,需要重启 pod 才会生效。 问题 那为什么配置没有及时更新呢? 通过查阅资料,我发现使用 subPath 挂载的容器不会接收到配置更新。这是为什么呢,相比于没有使用 subPath 有什么区别呢? subPath 使用了符号链接的方式挂载文件,容器内的文件是一个链接到存储在一个隐藏的带有时间戳目录中的同名文件。当 configMaps 更新时,符号链接会更新,但挂载在容器中的文件绑定保持不变。 解决 使用 path字段为特定 ConfigMap 项指定所需的文件路径 具体如下: apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: registry.k8s.io/busybox command: [ "/bin/sh","-c","cat /etc/config/keys" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config items: - key: SPECIAL_LEVEL path: keys restartPolicy: Never 亲测这样是可以正常更新的,但同目录下的其它文件会删除掉,看了几个相关的 issues , 发现你还可以手动创建符号链接到相应的文件夹, 小结 使用 subPath 挂载配置至容器时,配置更新时,容器内的配置不能同步更新,这是 k8s 官方处于各种原因做出的限制,目前还没有很好的办法来解决这个问题。 参考 https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#mounted-configmaps-are-updated-automatically https://github.com/kubernetes/kubernetes/issues/50345 https://github.com/kubernetes/kubernetes/blob/master/pkg/volume/util/atomic_writer.go

十月 2, 2022 · overstarry

Prometheus_operato

安装Metrics Server 有了 Metrics Server,用户就可以访问Kubernetes 核心监控数据(core metrics)。这其中包括了 Pod、Node、容器、Service 等主要 Kubernetes 核心概念的 Metrics。 Resource MetricsAPI: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/resource-metrics-api.md kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 部署Prometheus kube-prometheus 下载存储库 git clone https://github.com/prometheus-operator/kube-prometheus 使用manifests中的配置文件创建监控stack cd kube-prometheus kubectl create -f manifests/setup until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/ 访问dashboards 通过 kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090 就能展现prometheus ui grafana kubectl --namespace monitoring port-forward svc/grafana 3000 默认账户密码admin/admin,进入后会要求修改密码,可以看到已经有了预添加了数据源 可以看到有了许多K8S监控的默认看板 ...

八月 23, 2022 · overstarry

K8s_Finalizers

起因 在我们日常使用 k8s 中,可能会遇到这样的情况:在删除 namespace 时,往往会遇到资源没有被删除的情况,资源处于 terminating 的状态,这时我们该如何解决了,寻找到的解决方法往往是如下: 1 运行以下命令查看处于 terminating 状态的资源(这里以namespace 为例): kubectl get namespaces 2 选择一个Terminating namespace,并查看namespace 中的finalizer。运行以下命令: kubectl get namespace <terminating-namespace> -o yaml 得到类似这样的信息: apiVersion: v1 kind: Namespace metadata: creationTimestamp: "2021-01-20T15:18:06Z" deletionTimestamp: "2021-01-21T02:50:02Z" name: <terminating-namespace> resourceVersion: "3249493" selfLink: /api/v1/namespaces/knative-eventing uid: f300ea38-c8c2-4653-b432-b66103e412db spec: finalizers: - kubernetes status: phase: Terminating 3 导出json格式到tmp.json: kubectl get namespace <terminating-namespace> -o json > tmp.json ...

一月 23, 2022 · overstarry