前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何科学的修改pod的hostname

如何科学的修改pod的hostname

原创
作者头像
keepyan
修改2020-01-17 18:13:19
8.5K0
修改2020-01-17 18:13:19
举报
文章被收录于专栏:TKE操作指北TKE操作指北

前言:前段时间在某docker&k8s 技术交流群有网友提问,因为pod 内的业务需求,他们需要固定pod 的 hostname ,但是一直没找到很合适的方法,小编也是专门抽时间研究了一下这块,这里整理出来跟大家分享下,希望能帮助到一些朋友。

这里区分两种场景,针对这两种场景具体看下怎么修改pod 的 hostname

一.通过pod yaml 直接创建的 pod

这种情况比较简单,直接在 pod yaml文件中配置可以了。

通过 spec.hostname 参数实现,如果未设置默认使用 metadata.name 参数的值作为 Pod 的 hostname。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: busybox2
  labels:
    name: busybox
spec:
  hostname: busybox-2
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    name: busybox
代码语言:javascript
复制
[root@VM_1_6_centos ~]# k get pod | grep busybox
busybox2                                                    1/1     Running   0          9m35s
[root@VM_1_6_centos ~]# k exec busybox2 -- hostname
busybox-2

这里可以看到,如果单独创建pod ,这里的pod name 是使用 metadata.name 参数的值,pod 的 hostname 是使用 spec.hostname 参数的值。

二.通过pod控制器创建的pod

上面介绍,单独创建pod 的时候,修改 pod name 和 pod hostname 都很简单,但是生产环境,我们一般不会单独创建pod ,而是通过pod 控制器(deployment StatefulSet 等)的方式创建容器,因为可以保证高可用。

那么使用 pod 控制器创建出来的 pod 怎么在控制器维度 自定义 pod name 和 pod hostname 呢?

我这里先说结论:

1.pod name 无法自定义 ,因为pod name 在每个集群内是唯一的,pod 控制器可以设置 replicas ,所以为了保证唯一性,这里不允许配置pod name

2.pod hsotname 是可以自定义的,因为pod hostname 是每个pod 内唯一,所以多个pod 可以使用 相同的 hostname 设置方法跟 pod 一样,在pod控制器的yaml文件 spec 字段下添加hostname

而且在 pod 控制器层设定的 hostname 同样是有高可用效果的,删除 已存在pod 重新生成的 pod 还会使用相同的hostname 。

这里 pod 控制器的yaml 文件中会有多个spec 字段,一定要选择挨着 containers 字段上面的spec 进行添加,不要选错了。

注意:这里添加的hostname 字段只有首次添加可以成功,因为添加完成后,再查看yaml 会默认隐藏hostname 字段 如果你第二次再去添加hostname 字段,就会报错已存在,但是你实际上又无法查看到hostname 参数,具体为什么kubernetes 官方这么设定,还不清楚,所以大家在创建资源的时候,一定要把hostname 配置准确了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.通过pod yaml 直接创建的 pod
  • 二.通过pod控制器创建的pod
    • 1.pod name 无法自定义 ,因为pod name 在每个集群内是唯一的,pod 控制器可以设置 replicas ,所以为了保证唯一性,这里不允许配置pod name
      • 2.pod hsotname 是可以自定义的,因为pod hostname 是每个pod 内唯一,所以多个pod 可以使用 相同的 hostname 设置方法跟 pod 一样,在pod控制器的yaml文件 spec 字段下添加hostname
        • 注意:这里添加的hostname 字段只有首次添加可以成功,因为添加完成后,再查看yaml 会默认隐藏hostname 字段 如果你第二次再去添加hostname 字段,就会报错已存在,但是你实际上又无法查看到hostname 参数,具体为什么kubernetes 官方这么设定,还不清楚,所以大家在创建资源的时候,一定要把hostname 配置准确了。
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档