目录

静态Pod

获取资源清单文件的方法:

多容器Pod

自定义任务

嵌入式脚本

Pod调度策略管理

标签

静态Pod相关命令——

资源清单模板相关命令*****——

多容器Pod相关命令——

Pod自定义命令——

标签相关命令——


静态Pod

由kubelet守护进程直接管理的Pod,不需要API服务器监管。

kubelet监视每个静态Pod,在它崩溃后重新启动

静态Pod永远都会绑定到一个指定节点上的kubelet

静态Pod的spec不能引用其他API对象

配置文件路径:/var/lib/kubelet/config.yaml

静态Pod文件路径:/etc/kubernetes/manifests

获取资源清单文件的方法:

使用命令创建模板

使用AI编写资源清单文件

查询官方手册

多容器Pod

Pod是一个服务的多个进程的聚合单位

同一个Pod的所有容器共享网络IP及权限、主机名称、存储卷

自定义任务

资源清单文件:

---

kind: Pod

apiVersion: v1

metadata:

  name: mycmd

spec:

  containers:

  - name: linux

    image: myos:httpd

    command: [sleep]       # 配置自定义命令

    args:                     # 设置命令参数

    - "30"                # 命令参数

嵌入式脚本

资源清单文件:

---

kind: Pod

apiVersion: v1

metadata:

  name: mycmd

spec:

  containers:

  - name: linux

    image: myos:8.5

    command: [sh]        #调用sh命令

    args:                 # 设置命令参数

    - -c                  #读取脚本命令

    - |                   #多行字符串格式

      ID=${RANDOM}     #脚本指令,注意缩进,打印9次带有随机ID的“hello world.”

      for i in {1..9};do

          echo "${ID} : hello world."

          sleep 5

      done

Pod调度策略管理

restartPolicy策略:

Pod会根据策略决定容器结束后是否重启

重启:Always

不重启:Never

失败就重启:OnFailure

示例:

spec:

    restrartPolicy: OnFailure

宽限期策略:

为了避免服务突然中断,造成的事务不一致的问题

宽限期默认30秒,不等待设置为0

示例:

spec:

  terminationGracePeriodSeconds: 0  # 设置宽限期

最大生命周期策略:

允许Pod运行的最大时长,解决循环死锁的问题

时间到期后会向Pod发送signal,如果Pod无法结束就把它强制关闭,并设置为Error状态

示例:

spec:

  activeDeadlineSeconds: 60      # 可以执行的最大时长

Pod调度策略——

调度时将Pod分配到合适的计算节点上,然后对应节点上的kubelet运行这些Pod

kube-scheduler是默认调度器,它通过k8s的监测机制来发现集群中尚未被调度到节点上的Pod。然后依据调度原则将Pod分配到一个合适的节点上运行。

调度流程:

过滤(筛选)——筛选出满足Pod所有的资源请求的节点,如果没有就将一直停留在Pending状态,直到调度器能够找到合适的节点运行它。

优选(打分)——根据打分规则,为每一个可调度节点进行打分。选出其中得分最高的节点来运行Pod。如果存在多个得分最高的节点,调度器会从中随机选取一个。

绑定——在确定了某个节点运行Pod之后,调度器将这个调度决定通知给kube-apiserver.

基于节点名称的调度:

用nodeName标签,让Pod运行在指定的节点上

如果标签指定的节点无法运行Pod,它不会迁移到其他节点,将一直等待下去

spec:

  nodeName: node-0001     # 基于节点名称进行调度

标签

标签是附加到k8s对象上的键值对

在创建、删除、修改资源对象的时候可以使用标签来确定要修改的资源对象。

标签可以在创建时附加到对象,也可以在创建之后添加和修改。

标签可以用于组织和选择对象的子集

静态Pod相关命令——

创建静态Pod

vim /etc/kubernetes/manifests/xx.yaml

查看静态资源

kubectl get pods -o wide

删除静态资源,删除后,kubelet会自动重建

kubectl delete pod 静态资源名

删除资源文件才能彻底删除静态Pod

rm -f /etc/kuberneter/manifests/myweb.yaml

资源清单模板相关命令*****——

生成namespace资源对象模板

kubectl create namespace work --dry-run=client -o yaml

查看模板写法

kubectl create deployment –help

查询资源清单文件中指定的参数的帮助信息,以下命令是查看Pod.metadata参数的帮助信息。

kubectl explain Pod.metadata

kubectl explain Pod.metadata.namespace

应用多个模板

kubectl apply -f app/app1.yaml -f app/app2.yaml

合并管理资源清单文件

vim myweb.yaml

---

kind: Pod

apiVersion: v1

metadata:

  name: myweb

  namespace: default

spec:

  containers:

  - name: nginx

    image: myos:nginx

status: {}

sed "s,myweb,app1," myweb.yaml >app/app1.yaml

sed "s,myweb,app2," myweb.yaml >app/app2.yaml

sed "s,myweb,app3," myweb.yaml >app/app3.yaml

cat app/* >app.yaml

kubectl apply -f app.yaml

多容器Pod相关命令——

查看指定容器日志

Kubectl logs Pod资源名称 -c 容器名称

在容器中执行指令

Kubectl exec -it Pod资源名称 -c 容器名称 -- 命令

从容器拷贝文件

kubectl cp Pod资源名称:源文件 目标文件 -c 容器名称

排错步骤:

get->describe>logs

Pod自定义命令——

创建Pod时,可以设置启动时要执行的自定义命令

配置yaml文件即可

spec:

    containers:

    -  name:  linux

       image:  myos: httd

       command: ["sleep"]   #调用自定义命令

       args:  ["30"]  #设置命令参数

多行表达式

#运行结果: 01234空格56789

---

string1: >

   01234

   56789

#运行结果: 01234换行56789

---

string1: |

   01234

   56789

嵌入脚本写法:

spec:

  containers:

  - name: linux

    image: myos:8.5

    command: [sh]

    args:

    - -c   #读取脚本命令

    - |     #多行字符串格式

      ID=${RANDOM}

      for i in {1..9};do

          echo "${ID} : hello world."

          sleep 5

      done

脚本在标准输出写入的数据可以用logs查看

kubectl logs mycmd

标签相关命令——

设置标签:

kubectl label 资源类型 [资源名称] <key>=<value>

删除标签:

kubectl label 资源类型 [资源名称] <key>-

查看标签,看LABELS那一列:

kubectl get 资源类型 [资源名称] --show-labels

使用标签选择:

kubectl get 资源类型 [资源名称] -l <key>=<value>

资源文件设置标签:

metadata:

  name: myhttp

  labels:

    app: apache

标签选择运算符:

标签不支持唯一性,许多对象可以携带相同的标签

通过标签选择运算符,客户端/用户可以识别一组对象

标签选择运算符可以由多个需求组成,必须满足所有要求

在资源文件清单中声明标签选择运算符

spec:

  nodeSelector:

    key: value  #选择的标签

查看到选择的标签

kubectl get nodes --show-labels

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐