kubernetes实践之六十三:使用技巧

一: 在容器中获取 Pod 的IP

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4.   name: world-v2
  5. spec:
  6.   replicas: 3
  7.   selector:
  8.     app: world-v2
  9.   template:
  10.     metadata:
  11.       labels:
  12.         app: world-v2
  13.     spec:
  14.       containers:
  15.       - name: service
  16.         image: test
  17.         env:
  18.         - name: POD_IP
  19.           valueFrom:
  20.             fieldRef:
  21.               fieldPath: status.podIP
  22.         ports:
  23.         - name: service
  24.           containerPort: 777
容器中可以直接使用 POD_IP 环境变量获取容器的 IP,通过环境变量来实现,该环境变量直接引用 resource 的状态字段。

二: 在Pod中获取宿主机的主机名、namespace等

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: dapi-test-pod
  5. spec:
  6.   containers:
  7.     - name: test-container
  8.       image: busybox
  9.       command: [ "/bin/sh", "-c", "env" ]
  10.       env:
  11.         - name: MY_NODE_NAME
  12.           valueFrom:
  13.             fieldRef:
  14.               fieldPath: spec.nodeName
  15.         - name: MY_POD_NAME
  16.           valueFrom:
  17.             fieldRef:
  18.               fieldPath: metadata.name
  19.         - name: MY_POD_NAMESPACE
  20.           valueFrom:
  21.             fieldRef:
  22.               fieldPath: metadata.namespace
  23.         - name: MY_POD_IP
  24.           valueFrom:
  25.             fieldRef:
  26.               fieldPath: status.podIP
  27.         - name: HOST_IP
  28.           valueFrom:
  29.            fieldRef:
  30.              fieldPath: status.hostIP
  31.         - name: MY_POD_SERVICE_ACCOUNT
  32.           valueFrom:
  33.             fieldRef:
  34.               fieldPath: spec.serviceAccountName
  35.   restartPolicy: Never
这条技巧补充了第一条获取 podIP 的内容,方法都是一样的,只不过列出了更多的引用字段。 参考下面的 pod 定义,每个 pod 里都有一个 {.spec.nodeName} 字段,通过 fieldRef 和环境变量,就可以在Pod中获取宿主机的主机名(访问环境变量MY_NODE_NAME)。

三: 指定容器的启动参数

我们可以在 Pod 中为容器使用 command 为容器指定启动参数:

点击(此处)折叠或打开

  1. command: ["/bin/bash","-c","bootstrap.sh"]
使用数组的方式定义,所有命令使用跟 Dockerfile 中的 CMD 配置是一样的,但是有一点不同的是,bootsttap.sh 必须具有可执行权限,否则容器启动时会出错。

四: 使容器内时间与宿主机同步

我们下载的很多容器内的时区都是格林尼治时间,与北京时间差8小时,这将导致容器内的日志和文件创建时间与实际时区不符,有两种方式解决这个问题:
1.修改镜像中的时区配置文件
2.将宿主机的时区配置文件/etc/localtime使用volume方式挂载到容器中
第二种方式比较简单,不需要重做镜像,只要在应用的yaml文件中增加如下配置:

点击(此处)折叠或打开

  1. volumeMounts:
  2.   - name: host-time
  3.     mountPath: /etc/localtime
  4.     readOnly: true
  5.   volumes:
  6.   - name: host-time
  7.     hostPath:
  8.       path: /etc/localtime
五:kubectl 命令补全

点击(此处)折叠或打开

  1. # yum install -y bash-completion

  2. # source /usr/share/bash-completion/bash_completion

  3. # source <(kubectl completion bash)
六: 创建一个CentOS测试容器

有时我们可能需要在Kubernetes集群中创建一个容器来测试集群的状态或对其它容器进行操作,这时候我们需要一个操作节点,可以使用一个普通的CentOS容器来实现。 即使用一个while循环保证容器启动时拥有一个前台进程。

点击(此处)折叠或打开

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4.   name: test
  5.   labels:
  6.     app: test
  7. spec:
  8.   replicas: 1
  9.   template:
  10.     metadata:
  11.       labels:
  12.         app: test
  13.     spec:
  14.       containers:
  15.       - image: harbor-001.jimmysong.io/library/centos:7.2.1511
  16.         name: test
  17.         command: ["/bin/bash","-c","while true; do sleep 1000; done"]
  18.         imagePullPolicy: IfNotPresent

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2156486/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-2156486/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值