前言
最近看了 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
可以看到默认情况下 hosts 文件就只包含一些基础的信息
3 向 hosts文件添加内容,我们可以通过修改 .spec.hostAliases 来实现。
修改 yaml 文件,我们修改 deployment 中的 pod 模板,将 overstarry 解析为 127.0.0.1 ,修改后的deployment文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox-deployment
spec:
replicas: 1
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
hostAliases:
- hostnames:
- overstarry.vip
ip: 127.0.0.1
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中的/etc/hosts文件,我们可以看到新的内容已经添加成功了,
小结
本文介绍了如何修改 pod 的 hosts文件,以应对特殊情况下需要修改 hosts 文件的情况。