云计算学习100天-第79天-K8S-5
目录
静态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
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)