一:
在容器中获取 Pod 的IP
容器中可以直接使用 POD_IP 环境变量获取容器的 IP,通过环境变量来实现,该环境变量直接引用 resource 的状态字段。
二: 在Pod中获取宿主机的主机名、namespace等
这条技巧补充了第一条获取 podIP 的内容,方法都是一样的,只不过列出了更多的引用字段。
参考下面的 pod 定义,每个 pod 里都有一个 {.spec.nodeName} 字段,通过 fieldRef 和环境变量,就可以在Pod中获取宿主机的主机名(访问环境变量MY_NODE_NAME)。
三: 指定容器的启动参数
我们可以在 Pod 中为容器使用 command 为容器指定启动参数:
使用数组的方式定义,所有命令使用跟 Dockerfile 中的 CMD 配置是一样的,但是有一点不同的是,bootsttap.sh 必须具有可执行权限,否则容器启动时会出错。
四: 使容器内时间与宿主机同步
我们下载的很多容器内的时区都是格林尼治时间,与北京时间差8小时,这将导致容器内的日志和文件创建时间与实际时区不符,有两种方式解决这个问题:
1.修改镜像中的时区配置文件
2.将宿主机的时区配置文件/etc/localtime使用volume方式挂载到容器中
第二种方式比较简单,不需要重做镜像,只要在应用的yaml文件中增加如下配置:
五:kubectl 命令补全
六:
创建一个CentOS测试容器
有时我们可能需要在Kubernetes集群中创建一个容器来测试集群的状态或对其它容器进行操作,这时候我们需要一个操作节点,可以使用一个普通的CentOS容器来实现。 即使用一个while循环保证容器启动时拥有一个前台进程。
点击(此处)折叠或打开
- apiVersion: v1
- kind: ReplicationController
- metadata:
- name: world-v2
- spec:
- replicas: 3
- selector:
- app: world-v2
- template:
- metadata:
- labels:
- app: world-v2
- spec:
- containers:
- - name: service
- image: test
- env:
- - name: POD_IP
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- ports:
- - name: service
- containerPort: 777
二: 在Pod中获取宿主机的主机名、namespace等
点击(此处)折叠或打开
- apiVersion: v1
- kind: Pod
- metadata:
- name: dapi-test-pod
- spec:
- containers:
- - name: test-container
- image: busybox
- command: [ "/bin/sh", "-c", "env" ]
- env:
- - name: MY_NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: MY_POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: MY_POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: MY_POD_IP
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- - name: HOST_IP
- valueFrom:
- fieldRef:
- fieldPath: status.hostIP
- - name: MY_POD_SERVICE_ACCOUNT
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- restartPolicy: Never
三: 指定容器的启动参数
我们可以在 Pod 中为容器使用 command 为容器指定启动参数:
点击(此处)折叠或打开
- command: ["/bin/bash","-c","bootstrap.sh"]
四: 使容器内时间与宿主机同步
我们下载的很多容器内的时区都是格林尼治时间,与北京时间差8小时,这将导致容器内的日志和文件创建时间与实际时区不符,有两种方式解决这个问题:
1.修改镜像中的时区配置文件
2.将宿主机的时区配置文件/etc/localtime使用volume方式挂载到容器中
第二种方式比较简单,不需要重做镜像,只要在应用的yaml文件中增加如下配置:
点击(此处)折叠或打开
- volumeMounts:
- - name: host-time
- mountPath: /etc/localtime
- readOnly: true
- volumes:
- - name: host-time
- hostPath:
- path: /etc/localtime
点击(此处)折叠或打开
- # yum install -y bash-completion
-
- # source /usr/share/bash-completion/bash_completion
-
- # source <(kubectl completion bash)
有时我们可能需要在Kubernetes集群中创建一个容器来测试集群的状态或对其它容器进行操作,这时候我们需要一个操作节点,可以使用一个普通的CentOS容器来实现。 即使用一个while循环保证容器启动时拥有一个前台进程。
点击(此处)折叠或打开
- apiVersion: extensions/v1beta1
- kind: Deployment
- metadata:
- name: test
- labels:
- app: test
- spec:
- replicas: 1
- template:
- metadata:
- labels:
- app: test
- spec:
- containers:
- - image: harbor-001.jimmysong.io/library/centos:7.2.1511
- name: test
- command: ["/bin/bash","-c","while true; do sleep 1000; done"]
- imagePullPolicy: IfNotPresent
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2156486/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28624388/viewspace-2156486/