指定标签 labels

kubectl explain pod.metadata.labels

metadata:
labels:
k1: v1
k2: v2

添加指定 hosts 记录

pod.spec.hostAliases

spec:
hostAliases:
- ip: 1.1.1.1
hostnames: [“a.com”,”b.com”]
- ip: 2.2.2.2
hostnames: [“aa.com”,”bb.com”]
image.png

hostNetwork: true 的 pod ,读取 宿主机的 hosts 并追加 ,但对 宿主机 hosts 没有改动
image.png
image.png

容器设置变量 env

containers:
- image: 20.0.0.7:8099/tomcat/tomcat:8.5.41-jre8-alpine
name: tomcat-dep-tomcat
env:
- name: tk1
value: tv1
- name: tk2
value: tv2
- image: nginx
name: tomcat-dep-nginx
env:
- name: nk1
value: nv1
- name: nk2
value: nv2

容器运行指令 command args

containers.command[] List
entrypoint 数组,不以 shell 格式执行
覆盖镜像打包时使用的启动命令
不加此参数 以镜像为准
容器启动命令 数组类型可指定多个

containers.args[] List
entrypoint参数,数组类型可指定多个
不加此参数以 镜像中的 cmd 为准

docker docker k8s k8s
entrypoint cmd command args 结果
/a.sh bb cc /a.sh bb cc
/a.sh bb cc /A.sh /A.sh
/a.sh bb cc BB CC /a.sh BB CC
/a.sh bb cc /A.sh BB CC /A.sh BB CC

k8s 指定了 command ,覆盖 镜像的 entrypoint 及 cmd
k8s 指定了 args ,覆盖 镜像的 cmd

  • image: nginx
    name: tomcat-dep-nginx
    command:
    - /bin/sh
    - -c
    - “echo $(nk1)-$(nk2) > /env.txt;sleep 30”
    env:
    - name: nk1
    value: nv1
    - name: nk2
    value: nv2

端口暴露

kubectl explain pod.spec.containers.ports <[]Object>

  • name
    端口名称
    containerPort -required-
    容器需要监听的端口号
    hostPort
    容器所在主机监听的端口号,默认和 containerPort 一致
    protocol
    端口协议, 默认 TCP

容器资源限制

CPU 资源的单位换算:
1 CPU = 1000 millicpu(1 Core = 1000m)
0.5 CPU = 500 millicpu (0.5 Core = 500m)

指定设置容器运行时资源的运行上限,
spec.containers[].resources.limits.cpu String cpu超出,容器不会重启,可压缩资源
spec.containers[].resources.limits.memory String 内存超出,容器重启

容器启动和调度时的请求设置,不够无法启动
spec.containers[].resources.requests.cpu String
spec.containers[].resources.requests.memory String

资源请求

spec.containers[].resources.requests Object
容器启动和调度时的限制设置
spec.containers[].resources.requests.cpu String
cpu请求 ,单位 core ,容器启动时初始化可用数
spec.containers[].resources.requests.memory String
内存请求 ,单位 Mi Gi ,容器启动时初始化可用数

资源限制

spec.containers[].resources.limits Object
指定设置容器运行时资源的运行上限
spec.containers[].resources.limits.cpu String
cpu限制, 单位 core
用于 docker run —cpu-shares
spec.containers[].resources.limits.memory String
内存限制,单位 Mi Gi

spec:
containers:
- image: 20.0.0.7:8099/ops/myapp:v1
name: app-resource-dep-pod-c1
resources:
requests:
memory: 50Mi
cpu: 50m
limits:
memory: 100Mi
cpu: 100m

重启策略

kubectl explain pod.spec.restartPolicy

Always 默认,无论容器如何停止,kubelet都会尝试重启,有次数限制
OnFailure 容器 非 0 退出码终止,kubelet才会重启
Never 只要容器停止都不会重启

通过 kubelet 重新启动的退出容器将以指数增加延迟启动,10s,20s,40s,80s,160s,300s(5分钟上限) ,并在成功执行 10 分钟后重置

spec:
containers:
- image: 20.0.0.7:8099/ops/myapp:v1
name: myapp
restartPolicy: Always

镜像拉取策略 imagePullPolicy

kubectl explain pod.spec.containers.imagePullPolicy

Always tag 是 latest 的默认项,每次都重新拉取
IfNotPresent tag 不是 latest 的默认项,本地没有再拉取
Never 只使用本地镜像

spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx

私有仓库secret imagePullSecrets

kubectl explain pod.spec.imagePullSecrets

spec:
containers:
- name: pod
image: 20.0.0.7:8099/ops/nginx:1.7.9
imagePullSecrets:
- name: harbor-secret

kubectl create secret docker-registry harbor-secret \
—docker-server=DOCKER_SERVER \
—docker-username=DOCKER_USER \
—docker-password=DOCKER_PASSWORD、

安全上下文 securityContext

kubectl explain pod.spec.containers.securityContext

spec:
containers:
- name: pod
image: 20.0.0.7:8099/ops/nginx:1.7.9
securityContext:
runAsUser:
runAsGroup: