k8s-----------高级pod&调度

2023-05-16

目录

  • pod进阶
    • pod重启策略
  • 健康检查——探针
  • 调度约束
    • 调度方式
  • 故障排除

pod进阶

  • limits.cup:cpu上限
  • limits.memory:内存上限
  • requests.cpu:创建时分配的基本CPU资源
  • requests.memory:创建时分配的基本内存资源
    例如:
apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: wp
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

[root@localhost demo]# kubectl apply -f pod2.yaml 
pod/frontend created

#查看具体事件
[root@localhost demo]# kubectl describe pod frontend
[root@localhost demo]# kubectl describe nodes 192.168.241.4
Namespace                  Name                                     CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                     ------------  ----------  ---------------  -------------
  default                    frontend                                 500m (50%)    1 (100%)    128Mi (3%)       256Mi (6%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource  Requests    Limits
  --------  --------    ------
  cpu       550m (55%)  1100m (110%)
  memory    228Mi (5%)  556Mi (14%)
#成功部署好后查看状态
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
frontend                          2/2     Running   1          3m21s

#查看node节点资源状态
[root@localhost demo]# kubectl describe nodes 192.168.241.4
# 查看命名空间
[root@localhost demo]# kubectl get ns
NAME          STATUS   AGE
default       Active   17d
kube-public   Active   17d
kube-system   Active   17d

pod重启策略

Pod在遇到故障之后重启的动作

  • Always:当容器终止退出后,总是重启容器,默认策略
  • OnFailure:当容器异常退出(退出状态码非0)时,重启容器
  • Never:当容器终止退出,从不重启容器。
    注意:k8s中不支持重启Pod资源,只有删除重建
[root@localhost demo]# kubectl edit deploy
 restartPolicy: Always				#默认策略

例如

[root@localhost demo]# vim pod3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 30; exit 3
[root@localhost demo]# kubectl apply -f pod3.yaml 
pod/foo created

#查看重启次数加1
[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS             RESTARTS   AGE
foo                               1/1     Running            1          50s
[root@localhost demo]# vim pod3.yaml

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 10;exit 3
  restartPolicy: Never			#设置从不重启,跟container同一个级别

[root@localhost demo]# kubectl get pods
NAME                              READY   STATUS      RESTARTS   AGE
foo                               0/1     Completed   0          29s

健康检查——探针

探针的三种检查方法

  • httpGet 发送http请求,返回200-400范围状态码为成功。
  • exec 执行Shell命令返回状态码是0为成功。
  • tcpSocket 发起TCP Socket建立成功
    探针的两种规则
  • livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
  • ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints中剔除。
    例如:exec方式
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 30
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

[root@localhost demo]# kubectl get pods
liveness-exec                     1/1     Running     4          4m11s

例如:httpGet方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

例如:tcpSocket方式

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

调度约束

Kubernetes通过watch的机制进行每个组件的协作,每个组件之间的设计实现了解耦。
在这里插入图片描述

调度方式

  • nodeName用于将Pod调度到指定的Node名称上(跳过调度器直接分配)
  • nodeSelector用于将Pod调度到匹配Label的Node上
    例如:nodeName
apiVersion: v1  
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: 192.168.241.4
  containers:
  - name: nginx  
    image: nginx:1.15

[root@localhost demo]# kubectl create -f pod5.yaml 
pod/pod-example created
[root@localhost demo]# kubectl get pods
pod-example                       1/1     Running   0          86s
//查看网络
[root@localhost demo]# kubectl get pods -o wide
pod-example                       1/1     Running   0          2m9s   172.17.47.7   192.168.241.4   <none>

查看详细事件(发现未经过调度器)

[root@localhost demo]# kubectl describe pod pod-example

Events:
  Type    Reason   Age   From                      Message
  ----    ------   ----  ----                      -------
  Normal  Pulled   97s   kubelet, 192.168.241.4  Container image "nginx:1.15" already present on machine
  Normal  Created  97s   kubelet, 192.168.241.4  Created container
  Normal  Started  97s   kubelet, 192.168.241.4  Started container

清空所有pod

[root@localhost demo]# kubectl delete -f .
[root@localhost demo]# kubectl get pods
No resources found.

例如:nodeSelector

//获取标签帮助
[root@localhost demo]# kubectl label --help
Usage:
  kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]

需要获取node上的NAME名称

[root@localhost demo]# kubectl get node
NAME              STATUS   ROLES    AGE   VERSION
192.168.241.3   Ready    <none>   14d   v1.12.3
192.168.241.4   Ready    <none>   14d   v1.12.3

给对应的node设置标签分别为hzh=a和hzh=b

[root@localhost demo]# kubectl label nodes 192.168.241.4  hzh=a
node/192.168.241.4  labeled
[root@localhost demo]# kubectl label nodes 192.168.241.3 hzh=b
node/192.168.241.3 labeled

查看标签

[root@localhost demo]# kubectl get nodes --show-labels
NAME              STATUS   ROLES    AGE   VERSION   LABELS
192.168.241.4   Ready    <none>   14d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hzh=a,kubernetes.io/hostname=192.168.241.4
192.168.241.3   Ready    <none>   14d   v1.12.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hzh=b,kubernetes.io/hostname=192.168.241.4
[root@localhost demo]# vim pod5.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector: 
    kgc: b
  containers:
  - name: nginx
    image: nginx:1.15

[root@localhost demo]# kubectl apply -f pod5.yaml 
pod/pod-example created

#查看详细事件(通过事件可以观察经过调度器分配)
[root@localhost demo]# kubectl describe pod pod-example
Events:
  Type    Reason     Age   From                      Message
  ----    ------     ----  ----                      -------
  Normal  Scheduled  67s   default-scheduler         Successfully assigned default/pod-example to 192.168.241.4
  Normal  Pulling    66s   kubelet, 192.168.241.4  pulling image "nginx:1.15"
  Normal  Pulled     24s   kubelet, 192.168.241.4  Successfully pulled image "nginx:1.15"
  Normal  Created    24s   kubelet, 192.168.241.4  Created container
  Normal  Started    24s   kubelet, 192.168.241.4  Started container

故障排除

描述
pendingpod创建已经提交到kubernetes,但是,因为某种原因而不能顺利创建,例如下载镜像慢,调度不成功
Runningpod已经绑定到一个节点,并且已经创建了所有容器,至少有一个容器正在运行中,或正在启动或重新启动
Succeededpod中的所有容器都已经成功终止,不会重新启动
FailedPod的所有容器均已终止,且至少有一个容器已经故障中终止,也就是说,容器要么以非零状态退出,要么被系统终止
Unknown由于某种原因apiserver无法获得pod的状态,通常是由于master与pod所在主机kubelet通信时出错
查看pod事件
kubectl describe TYPE NAME_PREFIX  

查看pod日志(Failed状态下)
kubectl logs POD_NAME

进入pod(状态为running,但是服务没有提供)
kubectl exec –it POD_NAME bash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s-----------高级pod&调度 的相关文章

  • centos 安装k8s

    第一步 每台机子都做 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 第二步 每台机子都做 永久关闭selinux sed i s enforcing disabled
  • DHorse系列文章之操作手册

    在介绍DHorse的操作之前 我们先来看一下发布一个系统的流程是什么样的 发布系统的流程 我们以一个Springboot系统为例 来说明一下发布流程 1 首先从代码仓库下载代码 比如Gitlab 2 接着是进行打包 比如使用Maven 3
  • CNI Plugin 介绍

    CNI 插件包括两种类型 CNI Plugin 和 IPAM IP Address Management Plugin CNI Plugin 负责为容器配置网络资源 IPAM Plugin 负责对容器的 IP 地址进行分配和管理 IPAM
  • k8s Trouble Shooting 故障排除

    本文要讲的是k8s的故障排除 比较浅 最近刚入门 主要涵盖的内容是查看k8s对象的当前运行时信息 对于服务 容器的问题是如何诊断的 对于某些复杂的问题例如pod调度问题是如何排查的 1 查看系统的Event事件 在对象资源 pod serv
  • 局域网使用kubeadm安装高可用k8s集群

    主机列表 ip 主机名 节点 cpu 内存 192 168 23 100 k8smaster01 master 2核 2G 192 168 23 101 k8smaster02 node 2核 2G 192 168 23 102 k8sma
  • Harbor镜像仓库搭建

    1 安装docker comprose docker comprose是docker容器批量管理工具 curl L https get daocloud io docker compose releases download 1 25 0
  • k8s安装遇到过的一些问题

    无法获取recomended yaml文件 root k8master1 wget https raw githubusercontent com kubernetes dashboard v2 7 0 aio deploy recomme
  • 二进制部署K8s

    一 环境需求 节点IP 节点名称 所需组件 192 168 248 11 k8s master docker etcd apiserver controller manager scheduler kube proxy flannel 19
  • K8s-yaml的使用及命令

    YAML配置文件管理对象 对象管理 创建deployment资源 kubectl create f nginx deployment yaml 查看deployment kubectl get deploy 查看ReplicaSet kub
  • k8s-3:集群的三种网络

    k8s集群一共有三种网络模型 Node IP Node节点的IP地址 即物理网卡的IP地址 Pod IP Pod的IP地址 即docker容器的IP地址 此为虚拟IP地址 Cluster IP Service的IP地址 此为虚拟IP地址 N
  • kubernetes集群更新证书(kubeadm方式)

    一 kubernets证书详情 1 查看证书 tree etc kubernetes pki etc kubernetes pki apiserver crt apiserver etcd client crt apiserver etcd
  • kubeadm方式部署k8s最新版本V1.26.2

    Kubernetes核心概念 Master主要负责资源调度 控制副本 和提供统一访问集群的入口 核心节点也是管理节点 Node是Kubernetes集群架构中运行Pod的服务节点 Node是Kubernetes集群操作的单元 用来承载被分配
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • k8s中Endpoint是什么

    在Kubernetes K8s 中 Endpoint是一种资源对象 用于表示一个Service所依赖的真实后端节点的Pod信息 它存储了一组IP地址和端口号的列表 这些IP地址和端口号对应着提供相同服务的Pod实例 主要作用 Endpoin
  • k8s之nginx-ingress做tcp或udp的4层网络负载

    检查nginx ingress是否开启tcp udp转发 test test02 ingress kubectl get pod n ingress nginx o yaml grep i configmap configmap POD N
  • IDEA远程调试

    1 概述 原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试指令 jdwp是Java Debug Wire
  • 从Docker到Kubernetes——K8s网络核心原理

    文章目录 Dokcer的网络模型 kubernetes网络核心原理 IP per Pod模型 Kubernetes网络插件flannel Dokcer的网络模型 Dokcer默认使用单主机的网络方案 它默认创建一个名为docker0的网桥
  • 决战k8s,Kubernetes、Master节点部署组件,部署kube-proxy、测试、部署Dashboard(Web UI)、超细详解 ,安装篇③完结篇

    文章目录 下面这些操作在master节点完成 创建kubeconfig文件 创建kube proxy kubeconfig文件 下面这些操作在node节点完成 俩个节点上面拉取镜像 systemd管理kubelet组件 部署kube pro
  • kubeadm 安装k8s

    关于k8s集群化部署 以下均是个人一步一步的完成部署 并且会罗列出在部署过程中遇到的各种问题及其解决方式 一 环境准备 环境准备阶段试用与master节点部署与work节点部署 即master和work节点全部都需要执行这些步骤 1 关闭防
  • K8s基础6——应用配置管理方案、调度策略、污点和污点容忍

    文章目录 一 应用配置管理方案 1 1 ConfigMap 1 1 1 注入变量 1 1 2 挂载数据卷 1 2 Secret 1 2 1 数据卷挂载 1 2 2 变量注入 二 调度策略 2 1 nodeSelector定向调度 2 1 1

随机推荐

  • TIME_WAIT过多故障,如何解决?

    1 time wait的作用 1 xff09 可靠地实现TCP全双工连接的终止 在进行关闭连接四次挥手协议时 xff0c 最后的ACK是由主动关闭端发出的 xff0c 如果这个最终的ACK丢失 xff0c 服务器将重发最终的FIN xff0
  • 作业管理-----操作系统

    浅谈作业管理 摘要 作业的概念及作业的提交方式 xff1a 作业是用户在一次解题或事务处理过程中要求计算机所作工作的集合 一个作业进入系统到运行结束 xff0c 一般要经历 后备 执行 完成 三种状态 为了管理和调度作业 xff0c 系统为
  • python network

    call the sync function after 2 seconds t 61 threading Timer 2 self sync t start 为什么TCP传输需要编码 send can not send a string
  • 多生产者---多消费者问题(PV操作的简单例题)

    多生产者 多消费者问题 xff08 PV操作的简单例题 xff09 在引入生产者消费者问题前 xff0c 先要介绍几个知识点 1 临界区的相关问题 临界区是指每个进程访问临界资源的那段程序 临界资源是指每次只允许一个进程的访问的资源 2 P
  • 视频号视频文案怎么写,视频号第一条文案怎么写(新手必看)国仁网络资讯

    视频号文案怎么写 xff0c 为什么有些人在只做短视频的时候 xff0c 他的视频就会被很多人浏览 xff0c 观看次数都是上万 xff0c 甚至更多 xff0c 而有些人的短视频视频的播放量就不会有人问津 xff0c 我们在制作短视频或者
  • 操作系统的概念、四个特征以及os的发展和分类

    计算机系统概述 1 操作系统的概念2 操作系统的四个特征3 操作系统的发展与分类 1 操作系统的概念 操作系统 xff08 Operating System xff0c OS xff09 是指控制和管理整个计算机系统的硬件和软件资源 xff
  • 【编程算法】跳跃游戏ⅠⅡⅢ(Python解法)

    写这篇文章源于之前4 10做的字节跳动的笔试 xff0c 第二道编程题就是跳跃游戏类 xff0c 可以说和牛客或者力扣上边的解题做法是完全一样的 xff0c 可惜当时我才刚开始学习算法 深入了解该类型后发现真的很有意思 xff0c 这篇文章
  • 【Java开发】 Spring 10 :Spring Boot 自动配置原理及实现

    用了这么久的 SpringBoot xff0c 我们再来回顾一下它 xff0c 本文介绍 Spring Boot 的自动配置 xff0c 这是它区别于 Spring 的最大的点 xff0c 本文的自动配置项目包含三个项目 xff0c 建议拉
  • MyBatis与MyBatisPlus的区别

    一 MyBatis Plus简介 1 1 什么是mybatis plus MyBatis Plus xff08 简称 MP xff09 是一个 MyBatis 的增强工具 xff0c 在 MyBatis 的基础上只做增强不做改变 xff0c
  • Spring 笔记

    Spring 笔记 1 Spring xff08 2021 1 27 xff09 1 1 简介 Spring xff1a 春天 gt 给软件行业带来了春天 xff01 2002 xff0c 首次推出了Spring框架的雏形 xff1a in
  • 妙用shell脚本画图形

    妙用shell脚本画图形 目录 妙用shell脚本画图形一 99乘法表二 输出1条直线三 画矩形四 左边直角三角形五 右侧直角三角形六 等腰三角形七 平行四边形八 梯形九 菱形 一 99乘法表 展示一 xff1a 展示二 xff1a 二 输
  • 搭建LNMP基础框架

    目录 一 编译安装Nginx服务二 编译安装MySQL服务三 编译安装PHP服务四 部署Discuz xff0c 社区论坛Web应用 一 编译安装Nginx服务 1 关闭防火墙 xff0c 将安装Nginx所需软件包传到 opt目录下 sy
  • 银河麒麟4.0.2二进制安装mysql5.7

    先查看银河麒麟的版本 root 64 idiom kylin1 cat etc kylin build Kylin 4 0 2 Build 20191024 一 下载二进制包 xff0c 并安装所需软件 root 64 idiom kyli
  • 使用shell脚本一键部署LNMP架构

    span class token comment bin bash span span class token comment 将需要的安装包传到 opt目录下 xff0c 并关闭防火墙 span systemctl stop firewa
  • Nginx优化与防盗链

    目录 一 隐藏版本号二 修改用户与组三 缓存时间四 日志分割五 连接超时六 更改进程数七 配置网页压缩八 配置防盗链九 fpm参数优化 一 隐藏版本号 可以使用Fiddler工具抓取数据包 xff0c 查看Nginx版本 也可以在Cento
  • MySQL索引、事务与存储引擎

    目录 一 MySQL索引1 索引的概念2 索引的作用3 创建索引的原则依据4 索引的分类和创建4 1 61 61 普通索引 61 61 4 2 61 61 唯一索引 61 61 4 3 61 61 主键索引 61 61 4 4 61 61
  • openstack基础知识

    目录 一 云计算1 什么是云计算2 云计算的特色3 云计算的三种使用方式1 xff09 公有云2 xff09 私有云3 xff09 混合云 4 云计算服务模型1 xff09 IaaS 基础架构即服务 2 xff09 PaaS xff08 平
  • openstack-keystone

    目录 一 keystone身份服务二 keystone的主要功能三 keystone相关概念四 keystone认证流程五 OpenStack Keystone组件部署步骤部署步骤 一 keystone身份服务 keystone xff08
  • k8s-----------YAML&harbor

    目录 概述使用YAML文件创建资源1 查看资源版本的标签2 创建yaml文件测试 Pod1 特点2 pod容器分类3 镜像拉取策略 部署harbor1 登录harbor私有仓库2 下载Tomcat镜像进行推送3 推送 概述 Kubernet
  • k8s-----------高级pod&调度

    目录 pod进阶pod重启策略 健康检查 探针调度约束调度方式 故障排除 pod进阶 limits cup cpu上限limits memory 内存上限requests cpu 创建时分配的基本CPU资源requests memory 创