Kubernetes集群管理笔记

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值