这文章描述了如何为 kubernetes 中的 pod 分配主机别名,有没有办法对部署而不是 pod 本身执行此操作?
任何其他关于在 kubernetes 中添加主机条目以提供第一行主机名解析的建议(在检查 8.8.8.8 之类的服务器之前)也将被欢迎作为答案。
答案1
是的,这是可能的。您需要做的就是遵循与 pod 规范相同的建议,但不是将其应用于 pod 的 YAML 文件,而是将其应用于部署的 YAML 文件。例如,如果您已经在运行部署,则可以通过发出以下命令来编辑当前部署。
$ kubectl 编辑部署 DEPLOYMENT_NAME
这将允许您以 YAML 格式访问当前正在运行的部署的编辑模式。
您需要在部署“template: spec”字段中添加“hostAliases”部分,以便为 pod/容器配置模板。为了直观地演示这一点,下面是我在项目中运行的部署的 YAML,我可以通过运行上面提到的命令来编辑它:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "6"
creationTimestamp: 2018-01-30T14:42:48Z
generation: 7
labels:
app: nginx-site-app
name: nginx-site
namespace: default
resourceVersion: "778922"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-site
uid: dc4535333d-05cb-11e8-b5c0-7878748e0178
spec:
replicas: 1
selector:
matchLabels:
app: nginx-site-app
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx-site-app
spec:
containers:
- image: gcr.io/myprojectid/tuneup-nginx:latest
imagePullPolicy: Always
name: nginx-container
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: 2018-01-30T14:55:28Z
lastUpdateTime: 2018-01-30T14:55:28Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
observedGeneration: 7
readyReplicas: 1
replicas: 1
updatedReplicas: 1
如果我想将“hostAliases”添加到此部署中的 pod,我需要将此信息添加到 pod 模板规范部分,如下所示(请注意,它与“容器”一致(***重要 - 值得注意的是我的文件中有两个“spec”部分 - 我不想将它添加到第一个 spec 部分,而是添加到定义 pod 模板的模板规范部分):
spec:
containers:
- image: gcr.io/development-project-192309/tuneup-nginx:latest
imagePullPolicy: Always
name: nginx-container
ports:
- containerPort: 80
protocol: TCP
hostAliases:
- ip: 127.0.0.1
hostnames:
- myadded.examplehostname
答案2
hostAliases
是的一部分PodSpec
,您也可以在 Deployment 下的 Deployment 中找到它spec.template.spec
,因此您可以轻松地在 Deployments Pod 规范模板中以与 Pod 本身相同的方式使用它。