杂谈k8s

     其实看我之前的博客,k8s刚有点苗头的时候我就研究过,然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了,正苦于不知道写什么,水一篇 

    简化容器应用程序的部署和管理

    自动化部署、自动伸缩、负载均衡、存储管理、自我修复

    支持云应用开发、运行与运维一体化的云应用平台软件应运而生

k8s核心功能:集群管理,多种服务器托管方式,一站式容器生命周期管理,灵活扩展调度策略等

超详细的 K8s 高频面试题,绝对实用篇_kubernetes面试题-CSDN博客

部署:

 一键式部署:

   helm charts快速部署应用程序

   ansible playbook实现也ok

k8s 一键部署(ansible)-CSDN博客 很详细了,有人实验吗

不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?-腾讯云开发者社区-腾讯云‘m​​​​​​随着互联网时代的不断发展,开发者可能会面临这样的困境:为了解决问题、提升开发效率而竭力研发出来的“创新”,似乎削弱了他们在公司的重要程度,甚至取代了他们原先的地位。比如,在云原生时代,部分企业更愿意选择 K8s 来解决运维、弹性的问题,而不是组建一支需要耗费大量雇佣资金、管理资金的研发团队。icon-default.png?t=N7T8https://cloud.tencent.com/developer/article/1529959

Kubernetes 文档 | Kubernetes

Kubernetes(k8s)安装以及搭建k8s-Dashboard详解

【云原生】Kubernetes(k8s)最新版最完整版环境部署+master高可用实现 可

基础

架构

    主节点主要用于暴露API,调度部署和节点的管理

    计算节点运行一个容器运行环境,一般是docker环境(类似docker环境的还有rkt),同时运行一个K8s的代理(kubelet)用于和master通信。计算节点也会运行一些额外的组件,像记录日志,节点监控,服务发现等等。计算节点是k8s集群中真正工作的节点

master:

  • kubectl客户端命令行工具,集群操作入口,如查看日志
  • api server,master桥梁node,资源操作入口,认证 授权 访问控制 api注册 发现灯
  • controller-manager:维护集群状态,故障检测 自动扩展 滚动更新
  • scheduler 资源调度,按预定调度策略将pod调度到相应的node节点上
  • etcd 数据中心/配置中心,保存集群状态,分布式维护节点的数据raft强一致

node:

  • kubelet 维护容器生命周期,负责volume和网络的管理,运行在all节点,node节点的代理,当scheduler确定某个node上运行pod后,将pod信息发送给该节点的kubelet,据这些信息创建运行容器,向master返回运行状态自动修复:节点容器宕机 尝试重启 无效 pod杀死 重建
  • kube-proxy,service逻辑上代表后端多个pod,将接到的请求转发到pod上;为service提供cluster内服务发现和负载均衡
  • container-runtime管理运行容器的软件,docker
  • pod最小单位,可运行*个container,如两个 USR用户/MNT挂载点/PID隔离,UTS主机域名IPC消息队列/NET网络栈共享
kube-proxy
  • 将pod暴露为外部可访问的服务,监听apiServer的更新 更新网络配置
  • apiserver接收创建服务的请求 将服务对象保存到etcd  proxy监听etcd服务对象变化  更新网络配置
  • nodePort端口暴露  /  loadBalancer暴露为负载均衡器 流量分发  /  ingress路由规则分发到pod后端
iptables    
  • 启动创建iptables规则,流量转发到apiserver
  • apiserver创建iptables,流量到proxy据标签选择pod
  • linux内核提供的网络防火墙工具,实现网络功能,负载均衡 ,过滤 修改 转发网络流量
ipvs

是虚拟服务,流量到apiserver创建ipv4服务绑定proxy端口,proxy接收到流量,据标签选择pod

linux内核提供虚拟ip,可绑定多个物理ip,实现负载均衡

service

  • clusterIP:默认 稳定虚拟ip地址,只能从集群内部访问
  • nodeport:pod暴露为集群节点上静态端口,每个节点上监听指定的端口,将流量转发到Service中的Pod。通过节点IP地址和指定端口,从集群外部访问Service
  • loadBalancer:云提供商的负载均衡器(如AWS ELB或GCP Load Balancer)将流量分发到Service中的Pod,分配一个唯一的外部IP地址,将流量从负载均衡器转发到后端Pod
  • ExternalName:允许将Service映射到集群外部的任意DNS名称。它不提供负载均衡或代理功能,只是将Service的名称解析为指定的外部DNS名称
后端分发策略
  • round robin轮询,默认 顺序依次分发给每个后端pod,基本负载均衡
  • session affinity会话亲和,同一客户端请求分发到同一后端pod
  • client ip据客户端ip地址讲请求分发给后端pod,同一客户端同一pod
  • weighted加权,每个后端pod分配不同权重,控制流量分发比例
Headless Service
  • 直接访问后端Pod的网络细节,Cluster IP被设置为"None"
  • 为了支持服务发现和直接访问后端Pod的IP地址

ingress

  • API对象,用于管理外部对集群内服务的访问,路由到不同的服务
  • 支持基于主机名、路径和其他规则的路由
  • 负载均衡、SSL/TLS终止、基于域名的虚拟主机和路径匹配等功
使用条件:
  • 运行一个Ingress Controller(监控集群中的Ingress对象)
  • 启用了Ingress Controller所需的插件和功能(如负载均衡器)
  • 创建Ingress对象,并定义所需的规则和路由
pod
静态pod

    直接由kubelet管理,节点特定目录监听静态pod的定义文件,创建/管理pod

    不受控制球管理,不具备动态伸缩/自我修复/滚动更新

pod状态

    pending等待:创建未被调度到节点上运行(节点资源不足/调度策略)

    running运行中

    succeeded:中all容器成功完成任务并退出

    failed:一个多个容器已经失败或退出,无法正常运行 

    unknown:无法获取

    podInitializing初始化,至少一个容器在初始化

    containerCreating:正在创建

    terminating:正在被删除和终止

pod过程
  1. 编写pod文件,yaml / json文件,元数据(名称/标签) 规范(容器镜像 端口 环境变量)
  2. 定义文件提交给集群,kubectl命令工具 api接口
  3. api接受请求,存储到etcd中
  4. 调度器根据集群调度策略+资源情况,合适的节点运行pod
  5. 节点上的kubelet创建pod,据pod定义文件创建/运行pod,创建pod中的容器
  6. 容器状态running,创建成功并启动
  7. 监控和管理pod,持续监控pod,失败故障重启
pod中的容器重启策略
  • always始终重启,默认
  • onfailure仅在失败时重启
  • never从不重启

  不同容器可分别设置

pod调度
  • 默认调度,调度器scheduler将pod分配可用节点上,调度器跟节点资源可用性/亲和行/反亲和性
  • 节点亲和性调度,调度到具有特定标签 匹配的节点
  • pod亲和性调度,相关pod调度到同一节点上,将需要互相通信/共享资源的pod部署同一个节点
  • Pod反亲和性调度,避免多个相关的Pod调度到同一节点。确保关键任务或故障隔离的Pod在不同的节点上运行,以增加可靠性和稳定性
  • 节点的资源限制和Pod的资源需求,尽量将Pod调度到具有足够资源的节点上,竞争和性能
初始化容器

  特殊类型的容器,pod中其他容器启动前运行,初始化/准备工作

  顺序执行:依次执行 有序

  独立性:与主应用程序相互独立,共享相同的pod网络 存储卷,初始化容器可执行不同任务

  任务完成后立即退出,all初始化容器完成主应用程序才能启动

场景:

  配置加载:加载配置文件/密钥/其他资源

  数据库初始化:执行脚本,创建数据库 表格 插入数据

  依赖解决:初始化容器可以用于等待依赖服务的可用性,例如等待数据库或消息队列服务启动后再启动主应用程序容器

健康检查,kubelet

  • livenessProbe据用户自定义规则判定pod是否健康,不健康依据重启策略决定是否重启,无默认返回值永远成功
  • readinessProbe自定义规则判断pod是否健康,探测失败 控制器移除pod,直到下次探测成功
  • startupProbe启动检查 仅一次,避免长时间启动业务被上面kill掉,so初始化时间定长一些 

 参数:initialDelaySeconds第一次探测间隔,防止应用没有启动而检查失败

            periodSeconds检查间隔,多久执行probe检查,10s

            timeoutSeconds超时时长

            successThreshold成功探测阈值,探测多少次为健康,默认1次

 探测方法:exec执行命令/脚本 检查服务是否正常

                   Httpget发送http/https检查服务特定路径是否正常,200-399健康

                   tcpSocket通过容器ip和port执行tcp检查,建立了tcp连接,健康

RC:Replication Controller

pod副本数量,高可用,被replicaSet 和 deployment 取代,向后兼容

定义副本数量,监控维护副本,标签管理pod,自动替换有问题的pod,水平扩展

deployment升级

过程:

  1. 创建初始deployment,指定镜像 副本数 其他配置信息
  2. 更新配置,修改deployment配置文件/kubectl命令行,镜像版本 环境变量 资源限制
  3. 创建新副本集,会replicaSet 新的配置,创建pod逐步替换旧的
  4. 逐步替换旧pod:终止旧pod创建新pod实现
  5. 监控升级过程,kubectl命令行/kubernetes监控工具
  6. 完成,副本集all的pod成功创建运行,旧的自动清理

策略:

rollingUpdate滚动更新,默认 

  • maxUnavailable :指定在升级过程中不可用的Pod的最大数量或百分比
  • maxSurge :指定在升级过程中额外创建的Pod的最大数量或百分比

recreate重新创建,先删旧的pos,再创建新的,短暂中断

   spec.strategy.type=recreate

DaemonSet 确保集群中每节点运行一个pod副本
  • 节点动态变化,添加/删除,自动调整确保每个节点都有一个pod副本在运行
  • 根据节点标签选择器确定哪些节点运行pod副本
  • pod调度策略,deamonSet指定调度策略,控制pod在节点上的调度行为
  • 滚动更新,deamonset定义文件类实现滚动更新
  • 节点亲和性,限制deamonset在特定节点上运行pod

   在集群中的每个节点上运行特定类型的Pod,例如日志收集代理、监控代理或网络代理等。从而实现在每个节点上提供相同的功能和服务。

自动扩容

  1. 定义自动扩展策略,应用程序负载指标和目标副本数量,CPU利用率 内存使用率 自定义指标
  2. 监控应用负载,定期监控负载指标,prometheus 监控
  3. 自动扩展决策,监控到的负载指标与定义的策略比较
  4. 调整副本数量,调整ReplicaSet或Deployment中的副本数量来实现
  5. 监控和调整,副本数量变化,持续监控应用程序的负载,据指标动态调整

镜像下载策略

kubelet

默认:默认仓库下载,无则失败

imagePullPolicy字段指定策略:

     always尝试下载,存在更新;ifnotpresent不存在下载;never使用本地不下载

私有仓库策略:private registry,pod定义中指定镜像完整地址,地址 标签

镜像拉取凭证:image pull secrets,私有仓库下载需创建镜像拉取凭证

负载均衡

  • loadBalancer类型的service,与底层云服务提供商集成,自动创建云负载均衡 流量分发到service后到pod
  • ingress,外部访问规则,管理负责ingress控制器,将外部流量路由到集群中的不同service
  • nodeport,每个节点选择随机端口,映射为service目标端口,通过节点ip地址+映射端口访问service,小规模的
  • externalName,service映射到集群外部的DNS名称,externalName将流量转发到指定外部服务

常用命令

创建/更新 kubectl  create/apply   **.yaml(Deployment和Service)

删除:[delete](){"sa":"re_dqa_zy","icon":1} 

kubectl  get namespec/ns  nacos -o json指定json/yaml输出nacos命名空间下的

    kubectl get ns ns名称 -o 格式参数

kubectl  get  ing  -A在运行中的服务

kubectl create ns dev-test创建命名空间

  kubectl create -f dev-test.yaml根据文件创建/删除

kubectl delete ns dev-test 删除命名空间

kubectl delete pod nginx-64777cd554-zgfqj -n dev删除指定pod(过会会自动重启)

kubectl label pod nginx version- -n dev

kubectl get pod -n kube-system查看系统pod

kubectl get pods -n dev 查看pod(namespace=dev)

kubectl  get  nodes 查询所有node节点

kubectl get pod pod_name -o yaml |grep ***

kubectl describe pod nginx-5ff7956ff6-fg2db -n dev查看pod详细 资源分配情况(Request、Limits)

kubectl get pod -n dev -l version=2.0 --show-labels 筛选指定label标签(-l)

标签

kubectl label pod nginx version=1.0 -n dev 给pod打标签(version=1.0)

kubectl label pod nginx version=2.0 -n dev --overwrite更新

创建

kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev创建pod(3个)

kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev 创建service 内网访问
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev外网访问
kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'创建service服务,并且暴露端口让外部可以访问

kubectl exec -it -n bash执行进入

kubectl top node 查看节点的资源使用情况

编辑:edit

当resource-version=1才更新pod foo

kubectl annotate pods foo description='my frontend running nginx'  --resource-version=1

滚动更新kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

kubectl scale --replicas=3 rs/foo 名为foo的pod副本树设置为3

kubectl autoscale deployment foo --min=2 --max=10,deployment为foo 默认自动伸缩策略,指定目标cpu使用率 pod数在2-10之间

线上问题

 主要还是不细心的问题!

镜像无法拉取/访问 *** 

  证书要正确,不能过期知道吧

  确定镜像下载地址/策略,前置依赖是否有问题

  类型是否上外网可访问的

  不要重复发布pod

   格式要正确,配置文件不要有中文

   按照监控,vetoricM

超详细的 K8s 高频面试题,绝对实用篇_kubernetes面试题-CSDN博客

https://www.cnblogs.com/fenglongyun/p/17729578.html

K8S常用命令_kubernetes基础命令-CSDN博客

https://zhuanlan.zhihu.com/p/678551905

百度安全验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对系统管理员有用的 NMAP 命令

NMAP 是一个极其强大的网络扫描、监视和漏洞管理工具。 NMAP 命令的典型格式如下。 nmap -function --script脚本名称 <目标> 目标可以是主机 (192.168.0.1) 或网络 (192.168.0.0/24) 典型开放端口&#xff08;服务&#xff09;扫描 nmap -sV <目标> nmap -sV &…

springboot日志文件不生产问题

当指定了日志文件logback-spring.xml&#xff0c;发现项目启动的时候&#xff0c;不生产日志 解决方案&#xff1a;在yml中指定本工程具体的日志文件 logging:config: classpath:logback-spring.xml如果还是不产生日志文件的话&#xff1a;指定磁盘上具体的目录即可&#xff…

Redis几种部署模式介绍

Redis 提供了几种不同的部署模式&#xff0c;以满足不同的使用场景和可用性需求。这些模式包括单机模式、主从复制、哨兵模式和集群模式。下面我将简要介绍每种模式的特点和用途&#xff1a; 单机模式&#xff1a; 描述&#xff1a;单个 Redis 服务器实例运行在一台机器上&…

Linux中的head命令:快速查看文件头部内容

Linux中的head命令&#xff1a;快速查看文件头部内容 在Linux和Unix系统中&#xff0c;head命令是一个非常实用的工具&#xff0c;它允许用户查看文件的开头部分。无论你是在处理日志文件、配置文件还是其他大型文本文件&#xff0c;head命令都能帮助你快速定位并查看文件的前…

数据管理考核,如何避免陷入“形式主义”

当企业颁布了越来越多的管理制度和规范标准&#xff0c;面临的一个核心问题&#xff0c;就是从上到下无论是领导&#xff0c;中高层还是员工有没有去执行。我们常常的做法就是进行巡检考核&#xff0c;通过排名奖惩的方式去推动大家落地执行。 我们在执行考核排名的过程中&…

每天一个数据分析题(三百四十九)

销售人员的业绩表现直接影响企业的盈利水平&#xff0c;以下可以用来描述销售人员业绩情况好坏的指标是 A. 目标完成率 B. 目标比差异百分比 C. 均比差异百分比 D. 标准比差异百分比 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

小程序vant DropdownMenu 下拉菜单无法关闭

1&#xff0c;升级版本 官方已经修复这个BUG&#xff0c;只需升级版本1.11.4及以上即可。 van-dropdown-menu 下拉菜单组件无法正常关闭 Issue #5739 youzan/vant-weapp GitHub 2&#xff0c;不升级 直接修改文件&#xff0c;找到vant\weapp\dist\dropdown-item\index.w…

深入浅出Rust所有权:手把手从零设计Rust所有权体系,掌握Rust内存管理思想的精髓

撰写编程语言发展历史过程中&#xff0c;对Rust的所有权机制的设计进行了深入的探讨&#xff0c;摘取其中的一段内容&#xff0c;邀请大家点评。 Rust的所有权机制&#xff0c;看似复杂且与现有编程语言不同&#xff0c;使用起来思路也许难以适应。是学习Rust的难点。但如果我们…

回归现实:无需复杂假设即可轻松评估过程能力的简单方法

Cpk 和 Ppk 等过程能力指标能够测量您的过程相对于客户规格要求的执行情况。我们先回顾一些能力分析基础知识&#xff0c;再深入了解另一个能力估计值 Cnpk&#xff0c;该估计值很可能在您的能力分析库中非常有用。 能力统计指标分析 能力统计指标使用单个数字&#xff0c;是一…

什么是最好的手机数据恢复软件?6 款手机数据恢复软件 [2024 年更新]

什么是最好的手机数据恢复软件&#xff1f;在这篇文章中&#xff0c;您将了解 6 款最好的免费手机数据恢复软件&#xff0c;并学习如何恢复数据的完整指南。 最好的手机数据恢复软件是什么&#xff1f; 手机数据恢复软件是恢复智能手机中丢失或删除的文件、消息、照片和其他宝…

Python入门课堂:探索编程世界的无限可能

Python入门课堂&#xff1a;探索编程世界的无限可能 在数字化时代的浪潮中&#xff0c;Python以其简洁易懂的语法和强大的功能库&#xff0c;成为了众多编程初学者的首选语言。本篇文章将带领大家走进Python的世界&#xff0c;从四个方面、五个方面、六个方面和七个方面全面解…

运筹学_8.决策论

引言 决策论是根据信息和评价准则&#xff0c;用数量方法寻找或选取最优决策方案的科学&#xff0c;是运筹学的一个分支和决策分析的理论基础。在实际生活与生产中对同一个问题所面临的几种自然情况或状态&#xff0c;又有几种可选方案&#xff0c;就构成一个决策&#xff0c;…

GaN功率电子器件中体缺陷相关机制的建模仿真研究

在电力电子器件的外延生长和器件制备过程中&#xff0c;缺陷是不可避免的&#xff0c;大量的缺陷在一定程度上会牺牲器件的击穿电压、导通电阻等性能&#xff0c;同时影响器件的可靠性。近期&#xff0c;河北工业大学和广东工业大学联合开发了缺陷相关的仿真模型&#xff0c;深…

VMware虚拟机关机报错处理办法

VMware虚拟机关机报错处理办法 ​ 在 VMware ESXi 下面强制关闭一个沒有反应的 VM 虚拟机的方法, 一般正常都是使用 vSphere Client 去控制 VM 虚拟机的电源开关, 但是有时会发生即使用里面的 Power Off 按钮但是还是无法关闭我的 VM 虚拟机, 而且最终会出现一串 错误信息「An…

github将默认分支main改为master

github将默认分支main改为master 1.进入github&#xff0c;点击setting 2.在setting中&#xff0c;选择Respositories&#xff0c;更新默认分支为master 3.选择要更新的项目&#xff0c;在项目中选择setting->general->切换默认分支

【三勾商城】新增添加自定义表单

三勾商城是开发友好的微信小程序商城&#xff0c;框架支持SAAS&#xff0c;支持发布 iOSAndroid公众号H5各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉/淘宝&#xff09;等多个平台&#xff0c;不可多得的二开神器&#xff0c; 为大中小企业提供极致的移动电子商务解决…

1371. 每个元音包含偶数次的最长子字符串

1371. 每个元音包含偶数次的最长子字符串 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_1371每个元音包含偶数次的最长子字符串 错误经验吸取 原题链接&#xff1a; 1371. 每个元音包含偶数次的最长子字符串 https://leetcode.cn/pro…

Oracle和mysql中插入时间字段

例如有id 和 times两个字段 Oracle insert into xxx values|(1,sysdate) mysql insert into xxx values(1,now()) 在 MySQL 中&#xff0c;SYSDATE() 函数也是可用的&#xff0c;它与 NOW() 类似&#xff0c;但略有不同&#xff1a; NOW…

ES各种分页方式及其优缺点对比

ES各种分页方式及其优缺点对比 Elasticsearch (ES) 提供了几种不同的分页方法来帮助用户有效地从大量数据中检索部分结果。以下是几种常见的分页方式及其优缺点对比&#xff1a; 1. From/Size 分页&#xff08;浅分页&#xff09; 说明: 这是最直接也是ES默认的分页方式&…