定义一个简单的pod资源清单:
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: v1 kind: Pod metadata: name: nginx-ye namespace: kube-system labels: app: myapp spec: containers: - name: nginx image: nginx:1.7.9
|
yaml格式的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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| apiVersion: v1 kind: Pod metadata: name: string namespace: string labels: - name: string annotations: - name: string spec: containers: - name: string image: string imagePullPolicy: [Always | Never | IfNotPresent] command: [string] args: [string] workingDir: string volumeMounts: - name: string mountPath: string readOnly: boolean ports: - name: string containerPort: int hostPort: int protocol: string env: - name: string value: string resources: limits: cpu: string memory: string requests: cpu: string memory: string livenessProbe: exec: command: [string] httpGet: path: string port: number host: string scheme: string HttpHeaders: - name: string value: string tcpSocket: port: number initialDelaySeconds: 0 timeoutSeconds: 0 periodSeconds: 0 successThreshold: 0 failureThreshold: 0 securityContext: privileged:false restartPolicy: [Always | Never | OnFailure] nodeSelector: obeject imagePullSecrets: - name: string hostNetwork:false volumes: - name: string emptyDir: {} hostPath: string path: string secret: scretname: string items: - key: string path: string configMap: name: string items: - key: string path: string
|
使用 HostAliases 向 Pod /etc/hosts 文件添加条目
当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的/etc/hosts
文件中添加条目,可以在 Pod 级别覆盖对主机名的解析。用户可以通过 PodSpec
的 HostAliases
字段来添加这些自定义的条目。
通过 HostAliases 增加额外的条目
我们可以向 hosts 文件添加额外的条目,将 foo.local
、 bar.local
解析为127.0.0.1
,将 foo.remote
、 bar.remote
解析为 10.1.2.3
,我们可以在 .spec.hostAliases
下为 Pod 添加 HostAliases。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: v1 kind: Pod metadata: name: hostaliases-pod spec: hostAliases: - ip: "127.0.0.1" hostnames: - "foo.local" - "bar.local" - ip: "10.1.2.3" hostnames: - "foo.remote" - "bar.remote" containers: - name: cat-hosts image: busybox command: - cat args: - "/etc/hosts"
|
hosts 文件的内容看起来类似如下这样:
1
| $ kubectl logs hostaliases-pod
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # Kubernetes-managed hosts file. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 10.200.0.4 hostaliases-pod
# Entries added by HostAliases. 127.0.0.1 foo.local 127.0.0.1 bar.local 10.1.2.3 foo.remote 10.1.2.3 bar.remote
|
限制
如果 Pod 启用 hostNetwork
,那么将不能使用这个特性,因为 kubelet 只管理非 hostNetwork 类型 Pod 的 hosts 文件。目前正在讨论要改变这个情况。
下表给出了Docker 与 Kubernetes中对应的字段名称。
描述 |
Dockerfile |
Kubernetes |
容器运行的命令 |
Entrypoint |
command |
传递给命令的参数 |
Cmd |
args |
如果要覆盖默认的Entrypoint 与 Cmd,需要遵循如下规则:
- 如果在Pod资源清单中不提供command或args,则使用Docker镜像中定义的默认值。
- 如果在Pod资源清单中提供了command但不提供args,则仅使用提供的command。将忽略Docker镜像中定义的EntryPoint和Cmd。
- 如果仅为Pod资源清单提供args,则Docker镜像中定义默认的Entrypoint与您提供的args一起运行。
- 如果提供了command和args,则Docker镜像中定义的Entrypoint和Cmd将被忽略。直接运行你提供的command和args
Label(标签)
在kubernetes第一篇文章中已经对labels做了详细的描述,现在来看如何通过labels过滤指定查看某一种类型的pod
1 2
| kubectl label pods nginx-ye-69df458bc5-lqh84 release=ye -n kube-system
|
1 2
| #如果key值已存在则覆盖现有的key值 kubectl label --overwrite pods nginx-ye-69df458bc5-lqh84 release=dong -n kube-system
|
1 2 3
| [root@master-1 app] node/node-0 labeled
|