kubernetes使用技巧有哪些

这篇文章主要介绍了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

感谢你能够认真阅读完这篇文章,希望小编分享的“kubernetes使用技巧有哪些”这篇文章对大家有帮助,同时也希望大家多多支持云搜网,关注云搜网行业资讯频道,更多相关知识等着你来学习!