1.Pod 参数定义
- # 必填, 版本号
- apiVersion: string
- kind: Pod
- # 必填, 元数据
- metadata:
- # 必填, Pod 对象的名称(命名规范需要符合 RFC 1035 规范)
- name: string
- # 必填, Pod 对象所属的命名空间, 默认值为 default
- namespace: string
- # 自定义标签列表(取值类型: List)
- labels:
- - name: string
- # 自定义标签注解(取值类型: List)
- annotations:
- - name: string
- # 必填, Pod 对象中容器的详细定义
- spec:
- # 必填, Pod 对象容器列表(取值类型: List)
- containers:
- # 必填, 容器的名称(需要符合 RFC 1035 规范)
- - name: string
- # 必填, 容器镜像名称
- image: string
- # 获取镜像的策略, 默认值为: Always
- # Always: 每次都尝试重新下载镜像
- # Never: 仅使用本地镜像
- # IfNotPresent: 如果本地不存在, 就下载镜像
- imagePullPolicy: [Always | Never | IfNotPresent]
- # 容器启动命令列表, 若不指定则使用镜像打包时使用的启动命令
- command: [string]
- # 容器的启动命令参数列表
- args: [string]
- # 容器的工作目录
- workingDir: string
- # 挂载到容器内部的存储卷配置(取值类型: List)
- volumeMounts:
- # 引用 Pod 定义的共享存储卷的名称, 需使用镜像 volumes[]部分定义的共享卷名称
- - name: string
- # 存储卷在容器内 Mount 的绝对路径(应少于 512 个字符)
- mountPath: string
- # 是否只读模式, 默认 false(读写模式)
- readOnly: boolean
- # 容器需要暴露的端口号(取值类型: List)
- ports:
- # 端口的名称
- - name: string
- # 容器需要监听的端口号
- containerPort: int
- # 容器所在主机需要监听的端口号, 默认与 containerPort 相同
- # (设置 hostPort 时, 同一台宿主机将无法启动该容器的第二副本, 由于端口占用问题)
- hostPort: int
- # 端口协议[TCP/UDP], 默认为 TCP
- protocol: string
- # 容器运行前需要设置的环境变量列表
- env:
- # 环境变量的名称
- - name: string
- # 环境变量的值
- value: string
- # 资源限制和资源请求的设置
- resource:
- # 资源限制设置
- limits:
- # CPU 限制 (单位为: core) 将用于 docker run --CPU-shares 参数
- CPU: string
- # 内存限制 (单位为: MiB/GiB) 将用于 docker run --memory 参数
- memory: string
- # 资源限制设置(请求)
- requests:
- # CPU 请求 (单位为: core) 将用于容器启动的初始化可用数量
- CPU: string
- # 内存请求 (单位为: MiB/GiB) 将用于容器启动的初始化可用数量
- memory: string
- # 对 Pod 对象内各个容器进行安全检查的设置, 当探测无响应几次后, 将自动重启该容器
- # 包含 [exec | httpGet | TcpSocket] 三种方式, 任选其一即可
- livenessProbe:
- exec:
- # 需要执行的脚本
- command: [string]
- httpGet:
- # 请求路径
- path: string
- # 请求端口
- port: number
- host: string
- scheme: string
- httpHeader:
- - name: string
- value: string
- tcpSocket:
- port: number
- # 完成容器启动后首次进行探测的时间(单位为: s)
- initialDelaySeconds: 0
- # 对容器健康检查探测等待超时时间(单位为: s), 默认值为 1
- timeoutSeconds: 0
- # 对容器健康检查的探测时间周期(单位为: s), 默认值为 10
- periodSeconds: 0
- successThreshold: 0
- failureThreshold: 0
- securityContext:
- privileged: boolean
- #
- # Pod 对象的重启策略, 可选值[Always | Never | OnFailure]
- #
- # Always: Pod 对象一旦终止, 则不关心容器是如何停止的, kubelet 都将重器容器
- #
- # Never: Pod 对象终止后, kubelet 将退出码返回给 Master, 不再重启该容器
- #
- # OnFailure: 只有当 Pod 对象以非零退出码终止时, kubelet 才会重启该容器
- # (容器正常结束的退出码为零)
- #
- restartPolicy: [Always | Never | OnFailure]
- # 表示将 Pod 对象调度到包含这些 label 的 Node 上(以 key:value 形式指定)
- nodeSelector: object
- # Pull 镜像时使用的 secret 名称(以 name:secretValue 形式指定)
- imagePullSecrets:
- - name: string
- # 是否使用主机模式(默认值为: false)
- #
- # 如果设置为 true, 表示容器使用宿主机网络, 不再使用 Docker 网桥
- # 该 Pod 对象将无法在同一台宿主机上启动第二个副本
- hostNetwork: boolean
- # 在该 Pod 对象上定义的共享储存卷列表
- volumes:
- # 共享储存卷名称, 一个 Pod 对象中每个储存卷定义一个名称(命名应按照 RFC 1035 规范)
- - name: string
- # Pod 对象同生命周期的一个临时目录, 值为 {} 空对象
- emptyDir: {}
- # 挂载 Pod 对象所在宿主机的目录
- hostPath:
- # 将用于容器中 mount 的目录
- path: string
- # 挂载集群中预定义的 secret 对象到容器内部
- secret:
- secretName: string
- items:
- - key: string
- path: string
- # 挂载集群预定义的 configMap 对象到容器内部
- configMap:
- name: string
- items:
- - key: string
- path: string
2.Pod 的基本用法
Pod 对象可以由 1 个或者多个容器组合而成. 当两个或者多个容器应用为紧耦合关系, 应该组合成一个整体对外提供服务, 即将这两个容器打包为一个 Pod 对象.
2.1 静态 Pod 对象
静态 Pod 对象是由 Kubelet 进行管理的仅存在于特定 Node 上的 Pod 对象. 他们不可以通过 API Server 进行管理, 无法与 ReplicationController,Deployment 或者 DaemonSet 进行关联, 并且 kubelet 也无法对他们进行健康检查. 静态 Pod 对象总是由 kubelet 进行创建, 并且总是运行在 kubelet 所在的 Node 上运行.
创建静态 Pod 对象的两种方式:
配置文件
a. 设置 kubelet 的启动参数[--config]: 指定 kubelet 需要监控的配置文件所在的目录, kubelet 将会定期扫描该目录, 并根据该目录下的 *.YAML 或者 *.JSON 进行创建.
b. 重启 kubelet 服务
HTTP 方式
设置 kubelet 启动参数[--manifest-url]: kubelet 将会定期请求此 URL 下载 Pod 对象的定义文件, 并以 *.YAML 或 *.JSON 文件格式解析, 创建 Pod 对象.
2.2 Pod 对象容器共享卷
在同一个 Pod 对象中的多个容器能够共享 Pod 对象级别的存储卷. Volume 可以被定义为各种类型, 容器各自进行挂载操作, 将一个 Volume 挂载为容器内容存储卷.
配置文件示例:
- apiVersion: v1
- kind: Pod
- metadata:
- name: volume-pod
- spec:
- containers:
- - name: tomcat
- image: tomcat
- ports:
- - containerPort: 8080
- volumeMounts:
- - name: App-logs
- mountPath: /usr/local/tomcat/log
- - name: logreader
- image: busybox
- command: ["sh", "-c", "tail -f /logs/catalina*.log"]
- volumeMounts:
- - name: App-logs
- mountPath: /logs
- volumes: App-logs
- - name: App-logs
- emptyDir: {}
2.3 Pod 对象的配置管理
为了提高应用部署的复用能力以及灵活性, 可以将应用所需要的配置文件与程序进行分离. 将应用打包为容器镜像后, 可以通过环境变量配置, 挂载外部文件的方式在创建容器时进行配置注入, 但唯一的缺点维护性与复杂性将会在大规模容器集群中所体现. 但在 Kubernetes 中可以通过 ConfigMap 进行管理.
1)ConfigMap 的概念
生成为容器内的环境变量
设置容器的启动命令参数
通过 Volume 的形式挂载到容器内部
ConfigMap 以一个或者多个 [Key:Value] 的形式保存在 Kubernetes 系统中. 可以通过 *.YAML 配置文件或者 kubelet create [-f configmap.YAML]命令进行创建配置管理内容.
2)创建 ConfigMap 资源对象
a) *.YAML 实例
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: cm-appvars
- data:
- apploglevel: info
- appdatadir: /var/data
b) kubelet 命令
- # 1. 创建 configmap.YAML 配置文件
- kubelet create -f cm-appvars.YAML
- > configmap "cm-appvars" created
- # 2. 查看创建完成的配置文件
- kubelet get configmap
- # NAME DATA AGE
- # cm-appvars 2 3s
- # 3. 查看指定配置的详细内容
- kubelet get configmap cm-appvars -o YAML
来源: http://www.bubuko.com/infodetail-3384903.html