前言

最近看了 k8s 的书,学习了一些新的知识,将会分几篇来介绍学习到的知识,本文来先介绍k8s中如何修改 pod 的hosts文件。

我们知道当DNS出现问题时,可以向 Pod 的/etc/hosts文件添加条目来提供主机名解析Pod级别覆盖。该如何向hosts 文件中添加条目呢? 可以使用PodSpec中的HostAliases字段添加自定义条目。

虽然我们也可以直接进入pod修改host文件来实现,但这样pod重建时会被覆盖,所以我们应该使用 HostAliases 来进行修改,因为该文件会由 Kubelet 管理,并且 可以在 Pod 创建/重启过程中被重写。

使用

我们该如何操作呢,接下来由我来介绍使用步骤:

1 先创建 Deployment YAML文件来创建后台运行的 busybox pod

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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

img.png

2 查看 /etc/hosts 文件 cat /etc/hosts

img_1.png

可以看到默认情况下 hosts 文件就只包含一些基础的信息

3 向 hosts文件添加内容,我们可以通过修改 .spec.hostAliases 来实现。

修改 yaml 文件,我们修改 deployment 中的 pod 模板,将 overstarry 解析为 127.0.0.1 ,修改后的deployment文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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文件,我们可以看到新的内容已经添加成功了,

img_2.png

小结

本文介绍了如何修改 pod 的 hosts文件,以应对特殊情况下需要修改 hosts 文件的情况。