kubectl 是用于控制 k8s 集群的命令行工具
格式:kubectl [ command ] [ type ] [ name ] [ flags ]
command:子命令 type:资源类型 name:资源名称 flags:指定可选标志或参数
信息查询命令
子命令 | 说明 |
---|---|
help | 用于查看命令及子命令的帮助信息 |
cluster-info | 显示集群的相关配置信息 |
api-resources | 查看当前服务器上所有的资源对象 |
api-versions | 查看当前服务器上所有资源对象的版本 |
config | 管理当前节点上的认证信息 |
资源对象
可以创建或配置的应用和服务就是资源对象,如再集群中创建的Pod、负载均衡、存储等。
简单资源对象可以用 kubectl 直接创建
格式:kubectl run Pod名称 选项/参数 --image 镜像:标签
高级资源对象需要用资源清单文件创建
Pod
Pod 由一个或多个容器组成
Pod 是一个服务的多个进程的聚合单位
Pod 是 k8s 中最小的管理元素
Pod 会自动维护在其中运行的容器
Pod 具有原子性、一致性特点
同一个Pod 共享网络与卷
Pod状态
Pending:Pod 创建过程中,但它尚未被调度完成
Running:Pod 中所有容器都已被创建成功
Completed:Pod 所有容器都已成功终止,并不会被重启
Failed:Pod 中的所有容器中至少有一个容器退出是非0状态
Unknown:无法正常获取到Pod对象的状态信息
Pod管理命令
子命令 | 说明 | 备注 |
---|---|---|
run | 创建 Pod 资源对象 | 创建即运行,没有停止概念 |
get | 查看资源对象的状态信息 | 常用参数: -o 显示格式 |
create | 创建资源对象 | 不能创建 Pod(排错) |
describe | 查询资源对象的属性信息 | (排错) |
logs | 查看容器的报错信息 | 常用参数: -c 容器名称(排错) |
exec | 在某一个容器内执行特定的命令 | 可选参数: -c 容器名称 |
cp | 在容器和宿主机之间拷贝文件或目录 | 可选参数: -c 容器名称 |
delete | 删除资源对象 | 可选参数: -l 标签 |
资源监控工具Metrics-server
集群核心监控数据的聚合器。它存储了集群还总各节点和 Pod 的监控数据,并且提供了API以供查询和使用,为调度、弹性控制器以及 Dashboard 等 UI 组件提供数据来源
安装部署:必须启用聚合服务或使用 kube-proxy 代理转发,节点必须启用身份验证和授权,证书需要由集群证书办法机构签名
1、在所有加诶点为kubelet启用引导令牌
2、再 master 上完成签发证书
3、安装metrics-server
资源清单文件
高级的复杂功能靠简单的命令方式无法实现,使用资源清单文件可以创建、删除、变更、管理资源对象。
获取帮助信息:explain 资源对象 层级关系(使用 “ . ” 分割层级关系)
生成模板命令:--dry-run=client -o yaml
管理命令:
子命令 | 说明 | 备注 |
---|---|---|
create | 创建文件中定义的资源 | 支持指令式和资源清单文件配置 |
apply | 创建(更新)文件中定义的资源 | 只支持资源清单文件(声明式) |
delete | 删除文件中定义的资源 | 支持指令式和资源清单文件配置 |
replace | 更改/替换资源对象 | 强制重建 --force |
格式:kubectl [create|apply|delete] -f 资源文件名称.yaml
命名规范:当与指定的API对象进行交互时,使用大写驼峰式命名发(帕斯卡拼写法)。
大驼峰:NodePort 小驼峰:nodePort
静态Pod
静态是Pod由kubelet守护进程直接管理的 Pod,不需要 API 服务器监管。
kubelet 监视每个静态 Pod(在它崩溃之后重新启动),静态 Pod永 远都会绑定一个指定节点上的kubelet,静态Pod的spec不能引用其他API对象。
静态Pod配置路径:/var/lib/kubelet/config.yaml
staticPodPath:/etc/kubernetes/manifests
创建:
删除:
多容器 Pod
手多容器配置影响的命令:logs exec cp
这些命令使用需要加上: -c 容器名字
例子:
kubectl logs mynginx -c nginx
kubectl exec -it mynginx -c nginx -- ls
kubectl cp mynginx:/etc/php-fpm.conf /root/php.conf -c nginx
自定义任务
创建 Pod 时,可以为其设置启动时时要执行的自定义命令,如果配置了自定义命令,那么镜像中自带的默认启动命令将不再执行。
自定义命令设置在 command 字段下,如果命令有参数,需要填写在 args 字段下。
例子:执行 sleep 30 的自定义命令
执行复杂命令时,需要在 Pod 中嵌入脚本:
脚本在标准输出写入的数据可以使用 logs 查看。
restartPolicy 策略:
Pod 会根据策略决定容器结束后是否重启。
( 重启 Always,不重启 Never,失败就重启 OnFailure )
terminationGracePeriodSeconds 策略:
设置宽限期,为了避免服务突然中断,造成事物不一致的问题。
( 宽限期默认 30 s,不等带设置为 0 )
activeDeadlineSeconds 策略:
允许 Pod 运行的最大时长,时间到期后会向 Pod 发送 signal,如果 Pod 无法结束就把它强制关闭,并且设置为 Error 状态。
最大生命周期 :
[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: mycmd
spec:
terminationGracePeriodSeconds: 0 #不等带
activeDeadlineSeconds: 60 # 可以执行的最大时长
restartPolicy: OnFailure #失败后重启
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
exit $((ID%2))
Pod 调度策略
调度是将 Pod 分配到合适的计算节点上,然后对应节点上的 kubelet 运行这些 Pod。
kube-scheduler 是默认调度器,是集群的核心组件。
调度流程:
1、过滤(筛选):首先筛选出满足 Pod 所有资源请求的节点,这里包含计算资源、内存、存储、网络、端口号等,如果没有节点能满足 Pod 的需求,Pod 将一直停留在 Pending 状态,知道调度器能够找到合适的节点运行它。
2、打分(优选):调度器会根据打分规则,为每一个可调度节点进行打分,选出其中得分最高的节点来运行 Pod,如果存在多个得分最高的节点,调度器会从中随机选取一个。
3、绑定:在确定了某个节点运行 Pod 后,调度器将这个调度决定通知给 kube-apiserver。
Pod 定向调度
配置相关的调度规则,让 Pod 运行在制定的节点上。
使用 nodeName 标签:
[root@master ~]# vim myhttp.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: myhttp
spec:
nodeName: node-0001 # 基于节点名称进行调度
containers:
- name: apache
image: myos:httpd
标签
标签(Labels)是附加到 kubernetes 对象上的键值对。
设置标签:
kubectl label 资源类型 资源名称 key=value
删除标签:
kubectl label 资源类型 资源名称 key-
查看标签
kubectl get 资源类型 资源名称 --show-labels
使用标签选择
kubectl get 资源类型 资源名称 -l key=value
Pod 标签调度
标签不支持唯一性,通常希望许多对象携带相同的标签
通过标签选择算符,客户端/用户可以识别一组对象
标签选择算符可以 由多个需求组成,在多个需求的情况下,必须满足所有要求,相当于逻辑与(&&)运算符。
使用 node 上的标签调度 Pod:
[root@master ~]# vim myhttp.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: myhttp
labels:
app: apache
spec:
nodeSelector:
kubernetes.io/hostname: node-0002
containers:
- name: apache
image: myos:httpd