简介
Pod 是 Kubernetes 系统的基础但是远, 是自愿对象模型中可由用户创建或者部署调度的最小单位。
Pod 对象是一组容器的集合,这些容器共享 network 、UTS 及 IPC名称空间,具有相同的域名, 主机名, 和网络接口,可通过 IPC 直接进行通信。但分别拥有各自独立的 MNT, USR 和 PID 名称空间。
Pod 的管理
快速生成 yaml 文件
1. kubectl run nginx --image=nginx --dry-run -o yaml
查看帮助
kubectl explain pods.metadata
pod中镜像下载策略
kubernetes 中支持自定义镜像文件的获取策略,
字段: imagePullPolicy 值: Always: 总是从指定的仓库中获取镜像. IfNotPresent: 仅当地镜像缺失时候方才从目标仓库下载镜像. Never: 禁止从仓库下载镜像,即仅适用本地镜像.
示例:
1 [root@k8s ~]# cat nginx.yaml 2 apiVersion: v1 3 kind: Pod 4 metadata: 5 labels: 6 run: nginx 7 name: nginx 8 spec: 9 containers: 10 - image: nginx 11 imagePullPolicy: IfNotPresent 12 name: nginx 13 restartPolicy: Always实例
pod中容器的运行命令
修改默认运行的命令,即修改指定容器运行时的命令.
方法1: command: ['sh','-c','echo OK! && sleep 60'] 方法2: command: - sh - -c - echo OK! && sleep 60 方法3: args: -sh - -c - echo OK! && sleep 60 方法4: command: ['/bin/sh'] args: ['-c','echo OK! && sleep 60']
实例:
1 [root@k8s ~]# cat busybox.yaml 2 apiVersion: v1 3 kind: Pod 4 metadata: 5 labels: 6 run: busybox 7 name: busybox 8 spec: 9 containers: 10 - image: busybox 11 imagePullPolicy: IfNotPresent 12 name: busybox 13 command: ['sh','-c','echo OK! && sleep 60'] 14 restartPolicy: Always实例
pod中使用变量
方法: env: - name: key1 value: value1 - name: key2 value: value2 说明: name: 环境变量名称即key value: 传递给环境变量的值, 通过 $(VAR_NAME)引用,逃逸格式为$$(VAR_NAME) 默认值为空
实例:
1 [root@k8s ~]# cat busybox.yaml 2 apiVersion: v1 3 kind: Pod 4 metadata: 5 labels: 6 run: busybox 7 name: busybox 8 spec: 9 containers: 10 - image: busybox 11 imagePullPolicy: IfNotPresent 12 name: busybox 13 command: ['sh','-c','echo OK! && sleep 60'] 14 env: 15 - name: devops 16 value: kubernetes 17 restartPolicy: Always实例
pod重启策略
定义 pod 生命周期和异常退出时的重启策略.
字段: restartPolicy: Never 值: Always: 总是重启 OnFailure: 失败了才会重启 Never: 从不重启
实例:
1 [root@k8s ~]# cat busybox.yaml 2 apiVersion: v1 3 kind: Pod 4 metadata: 5 labels: 6 run: busybox 7 name: busybox 8 spec: 9 containers: 10 - image: busybox 11 imagePullPolicy: IfNotPresent 12 name: busybox 13 command: ['shs','-c','echo OK! && sleep 60'] # 故意写错 14 env: 15 - name: devops 16 value: kubernetes 17 restartPolicy: OnFailure实例
初始化容器
初始化容器主要为运行的容器做一些初始化的工作提前准备工作. 比如一个容器 A 依赖其他容器运行,可以为 A 设置多个依赖容器,比如 A1 A2. A1,A2的初始化容器会按照顺序启动,如果A1没有启动成功,A2则也不会启动,只有所有的初始化容器运行完毕后,容器A 才会运行.
关键字: initContainers: '' 下面定义一个个初始化的容器 '' - name: init-poda image: busybox command: ['sh','-c','touch /work-dir/aa.txt'] volumeMounts: - name: workdir mountPath: "/work-dir"
实例:
1 apiVersion: v1 2 kind: Pod 3 metadata: 4 name: myapp-initpod 5 labels: 6 app: myapp 7 spec: 8 volumes: 9 - name: workdir 10 emptyDir: {} 11 containers: 12 - name: myapp-nginx 13 image: nginx 14 imagePullPolicy: IfNotPresent 15 volumeMounts: 16 - name: workdir 17 mountPath: "/text" 18 initContainers: 19 - name: init-poda 20 image: busybox 21 command: ['sh','-c','touch /work-dir/aa.txt'] 22 volumeMounts: 23 - name: workdir 24 mountPath: "/work-dir"实例
资源调度对象
主机过滤
主机打分 手动指定pod运行位置标签
kubectl get pods --show-labels kubectl top pods -l name=cpu-utilizer kubectl label nodes --all aa/111=abc kubectl label nodes --all disktype=ssd kubectl label nodes test1 aa/111=abc kubectl label nodes test1 aa/111- 取消标签手动指定pod 运行在指定的标签(node)上
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: nginx-selector name: nginx-selector spec: nodeSelector: disktype: ssd containers: - image: nginx name: nginx-selector resources: {} imagePullPolicy: IfNotPresent dnsPolicy: ClusterFirst restartPolicy: Always status: {}
cordon
设置 cordon 状态的 node ,新创建的 pod 请求不会调度到此node 上, 但是现有运行中的 pod 不会受到影响.设置cordon状态: kubectl cordon node_name 取消cordon状态: kubectl uncordon node_name
drain
设置 drain 状态的 node, 会把此node 标记为不可用.新创建的 pod 不会调度到此node 上, 同时会把此node 上运行的pod迁移走. 普通pod 没有此特性, deployment 等控制器有此特性.设置 drain状态: kubectl drain node_name 取消 drain状态: kubectl uncordon node_name
taint
设置node 污点,如果node 上有污点 新创建的 pod 不会调度到此node上,但是可以修改 pod 参数使其可以容忍污点.设置污点: kubectl taint node node_name aaa=123:NoSchedule 取消污点: kubectl taint node node_name aaa- 查看污点: kubectl describe nodes node_name | grep Taints # pod 容忍污点配置 tolerations: - key: "aaa" operator: "Equal" value: "123" effect: "NoSchedule"