各大门户网站有哪些,表白软件生成器,零基础做电商从什么做起,注册一个网站需要多少钱其实看我之前的博客#xff0c;k8s刚有点苗头的时候我就研究过#xff0c;然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了#xff0c;正苦于不知道写什么#xff0c;水一篇 简化容器应用程序的部署和管理 自动化部署、自动伸缩、负载均衡、存储管理、自我修复 支… 其实看我之前的博客k8s刚有点苗头的时候我就研究过然后工作的时候间接接触 也自己玩过 但是用的不多就忘记了正苦于不知道写什么水一篇 简化容器应用程序的部署和管理 自动化部署、自动伸缩、负载均衡、存储管理、自我修复 支持云应用开发、运行与运维一体化的云应用平台软件应运而生
k8s核心功能集群管理多种服务器托管方式一站式容器生命周期管理灵活扩展调度策略等 超详细的 K8s 高频面试题绝对实用篇_kubernetes面试题-CSDN博客
部署 一键式部署 helm charts快速部署应用程序 ansible playbook实现也ok
k8s 一键部署ansible-CSDN博客 很详细了有人实验吗
不努力提高效率小姐姐都被人追走了K8S一键部署了解一下-腾讯云开发者社区-腾讯云‘m随着互联网时代的不断发展开发者可能会面临这样的困境为了解决问题、提升开发效率而竭力研发出来的“创新”似乎削弱了他们在公司的重要程度甚至取代了他们原先的地位。比如在云原生时代部分企业更愿意选择 K8s 来解决运维、弹性的问题而不是组建一支需要耗费大量雇佣资金、管理资金的研发团队。https://cloud.tencent.com/developer/article/1529959
Kubernetes 文档 | Kubernetes
Kubernetesk8s安装以及搭建k8s-Dashboard详解
【云原生】Kubernetesk8s最新版最完整版环境部署master高可用实现 可
基础
架构 主节点主要用于暴露API调度部署和节点的管理 计算节点运行一个容器运行环境一般是docker环境类似docker环境的还有rkt同时运行一个K8s的代理kubelet用于和master通信。计算节点也会运行一些额外的组件像记录日志节点监控服务发现等等。计算节点是k8s集群中真正工作的节点
master
kubectl客户端命令行工具集群操作入口如查看日志api servermaster桥梁node资源操作入口认证 授权 访问控制 api注册 发现灯controller-manager维护集群状态故障检测 自动扩展 滚动更新scheduler 资源调度按预定调度策略将pod调度到相应的node节点上etcd 数据中心/配置中心保存集群状态分布式维护节点的数据raft强一致
node
kubelet 维护容器生命周期负责volume和网络的管理运行在all节点node节点的代理当scheduler确定某个node上运行pod后将pod信息发送给该节点的kubelet据这些信息创建运行容器向master返回运行状态自动修复节点容器宕机 尝试重启 无效 pod杀死 重建kube-proxyservice逻辑上代表后端多个pod将接到的请求转发到pod上为service提供cluster内服务发现和负载均衡container-runtime管理运行容器的软件dockerpod最小单位可运行*个container如两个 USR用户/MNT挂载点/PID隔离UTS主机域名IPC消息队列/NET网络栈共享
kube-proxy
将pod暴露为外部可访问的服务监听apiServer的更新 更新网络配置apiserver接收创建服务的请求 将服务对象保存到etcd proxy监听etcd服务对象变化 更新网络配置nodePort端口暴露 / loadBalancer暴露为负载均衡器 流量分发 / ingress路由规则分发到pod后端
iptables
启动创建iptables规则流量转发到apiserverapiserver创建iptables流量到proxy据标签选择podlinux内核提供的网络防火墙工具实现网络功能负载均衡 过滤 修改 转发网络流量
ipvs
是虚拟服务流量到apiserver创建ipv4服务绑定proxy端口proxy接收到流量据标签选择pod
linux内核提供虚拟ip可绑定多个物理ip实现负载均衡
service
clusterIP默认 稳定虚拟ip地址只能从集群内部访问nodeportpod暴露为集群节点上静态端口每个节点上监听指定的端口将流量转发到Service中的Pod。通过节点IP地址和指定端口从集群外部访问ServiceloadBalancer云提供商的负载均衡器如AWS ELB或GCP Load Balancer将流量分发到Service中的Pod分配一个唯一的外部IP地址将流量从负载均衡器转发到后端PodExternalName允许将Service映射到集群外部的任意DNS名称。它不提供负载均衡或代理功能只是将Service的名称解析为指定的外部DNS名称
后端分发策略
round robin轮询默认 顺序依次分发给每个后端pod基本负载均衡session affinity会话亲和同一客户端请求分发到同一后端podclient ip据客户端ip地址讲请求分发给后端pod同一客户端同一podweighted加权每个后端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过程
编写pod文件yaml / json文件元数据(名称/标签) 规范(容器镜像 端口 环境变量)定义文件提交给集群kubectl命令工具 api接口api接受请求存储到etcd中调度器根据集群调度策略资源情况合适的节点运行pod节点上的kubelet创建pod据pod定义文件创建/运行pod创建pod中的容器容器状态running创建成功并启动监控和管理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连接健康
RCReplication Controller
pod副本数量高可用被replicaSet 和 deployment 取代向后兼容
定义副本数量监控维护副本标签管理pod自动替换有问题的pod水平扩展
deployment升级
过程
创建初始deployment指定镜像 副本数 其他配置信息更新配置修改deployment配置文件/kubectl命令行镜像版本 环境变量 资源限制创建新副本集会replicaSet 新的配置创建pod逐步替换旧的逐步替换旧pod终止旧pod创建新pod实现监控升级过程kubectl命令行/kubernetes监控工具完成副本集all的pod成功创建运行旧的自动清理
策略
rollingUpdate滚动更新默认
maxUnavailable 指定在升级过程中不可用的Pod的最大数量或百分比maxSurge 指定在升级过程中额外创建的Pod的最大数量或百分比
recreate重新创建先删旧的pos再创建新的短暂中断 spec.strategy.typerecreate
DaemonSet 确保集群中每节点运行一个pod副本
节点动态变化添加/删除自动调整确保每个节点都有一个pod副本在运行根据节点标签选择器确定哪些节点运行pod副本pod调度策略deamonSet指定调度策略控制pod在节点上的调度行为滚动更新deamonset定义文件类实现滚动更新节点亲和性限制deamonset在特定节点上运行pod 在集群中的每个节点上运行特定类型的Pod例如日志收集代理、监控代理或网络代理等。从而实现在每个节点上提供相同的功能和服务。
自动扩容
定义自动扩展策略应用程序负载指标和目标副本数量CPU利用率 内存使用率 自定义指标监控应用负载定期监控负载指标prometheus 监控自动扩展决策监控到的负载指标与定义的策略比较调整副本数量调整ReplicaSet或Deployment中的副本数量来实现监控和调整副本数量变化持续监控应用程序的负载据指标动态调整
镜像下载策略
kubelet
默认默认仓库下载无则失败
imagePullPolicy字段指定策略 always尝试下载存在更新ifnotpresent不存在下载never使用本地不下载
私有仓库策略private registrypod定义中指定镜像完整地址地址 标签
镜像拉取凭证image pull secrets私有仓库下载需创建镜像拉取凭证
负载均衡
loadBalancer类型的service与底层云服务提供商集成自动创建云负载均衡 流量分发到service后到podingress外部访问规则管理负责ingress控制器将外部流量路由到集群中的不同servicenodeport每个节点选择随机端口映射为service目标端口通过节点ip地址映射端口访问service小规模的externalNameservice映射到集群外部的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(namespacedev)
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 version2.0 --show-labels 筛选指定label标签(-l) 标签
kubectl label pod nginx version1.0 -n dev 给pod打标签(version1.0)
kubectl label pod nginx version2.0 -n dev --overwrite更新 创建
kubectl run nginx --imagenginx:1.17.1 --port80 --replicas3 -n dev创建pod(3个)
kubectl expose deploy nginx --namesvc-nginx1 --typeClusterIP --port80 --target-port80 -n dev 创建service 内网访问 kubectl expose deploy nginx --namesvc-nginx2 --typeNodePort --port80 --target-port80 -n dev外网访问 kubectl run nginx --imagenginx:1.10 --replicas3 --labelsappexample --port80 --overrides{apiVersion:apps/v1,spec:{template:{spec:{nodeSelector:{kubernetes.io/hostname:k8s-node1}}}}}创建service服务并且暴露端口让外部可以访问 kubectl exec -it -n bash执行进入
kubectl top node 查看节点的资源使用情况 编辑edit
当resource-version1才更新pod foo
kubectl annotate pods foo descriptionmy frontend running nginx --resource-version1
滚动更新kubectl rolling-update frontend-v1 frontend-v2 --imageimage:v2
kubectl scale --replicas3 rs/foo 名为foo的pod副本树设置为3
kubectl autoscale deployment foo --min2 --max10deployment为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
百度安全验证