K8sController-Deployment(无状态应用)
K8sController-Deployment(无状态应用) 基于K8s 1.31 什么是DeploymentDeployment是一种面向无状态应用的多个Pod副本进行自动化管理的工作负载控制器 常见场景: 部署一个或者多个副本应用 多副本的Pod的版本更新,以及部署过程的暂停和回滚 Pod副本数量的水平拓展缩容 Deploy管理能力123456789101112131415161718192021222324252627282930313233343536373839apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginx-deploymentspec: # 设置true,表述部署过程中属于暂停状态 paused: false # 修订历史最大数量 每个修订版本都有一个对应的RS资源 revisionHistoryLimit: 10 # Pod最短就绪准备时间,Pod至少达到这个时间,才会进入Pod为Ready状态 minReady...
CKAD模拟题A2025
CKAD Simulator Kubernetes 1.32Question 1 | Namespaces Solve this question on instance: ssh ckad5601 The DevOps team would like to get the list of all Namespaces in the cluster. Get the list and save it to /opt/course/1/namespaces on ckad5601. Answer:1k get ns > /opt/course/1/namespaces The content should then look like: 1234567891011xxxxxxxxxx# /opt/course/1/namespacesNAME STATUS AGEdefault Active 136mearth Active 105mjupiter Active ...
2024年终总结
2024年终总结那些我也许应该抵达的地方一月:与LeaderZhang相聚在绍兴,见到了书本上的鲁迅故居 五月:见过南京的各种故事 五月:抵达那个万象的重庆山城 五月:在武汉的东湖,骑行,期待下一次的重逢 六月:东莞HDC2024,与众星云集的相聚 七月:抵达广州,时隔许久相见18、19的师兄师姐 十月:与同学,自由行千岛湖 十一月:团建台州,点亮新图标 我🎓了 四年之期已经抵达终点站,毕业。 我带着我四年中做过有趣的项目,终于毕业了,虽然以1分之差,错过了优秀毕业论文,没能和LeaderZhang 双双拿下 因为这个项目,我也成功结缘于Cloud Native领域,在Java转向Go的迷茫中,寻找到了自己想追求的新方向K8s与容器化 这个项目也收到了老师资金资助正式发表到了省刊,虽然随着自己随着对领域的深入理解,感觉还是做的十分潦草,没什么特别的东西,但是也算是集齐了大学的一种神奇的体验 如何去写一篇论文 如何以第一作者发表期刊 如何绘制一个清晰的流程图 仰望星空也要脚踏实地在过去大半年的时间内,我很幸运的在我的第一志愿有一些了解的以及意向的云边部门实...
K8s中的垃圾回收
K8s中的垃圾回收 基于1.29 K8s的垃圾回收主要是以下的问题 结束的Pod对象 完结的Job对象 无主对象,这类的对象的Owner不存在 不再使用的容器和镜像 不再使用的动态创建的PV对象,对应的StorageClass声明了回收策略Delete 下列场景中被删除的Node 控制器的集群 Node Lease对象 Pod对象垃圾回收对于我阶段为Failed的Pod,对应的容器虽然已经停止,但是其资源对象依旧存在API Server,需要被Pod控制器或者运维人员手动删除 kube-controller-manager中有一个名为PodGC的组件专门负责自动清理“垃圾类”Pod 孤儿Pod,绑定的Node已经不存在 未调度就结束的Pod 终结中的Pod,这类Pod满足,它们被绑定到NotReady的Node,该Node有一个污点node.kubernetes.io/out-of-service,并且NodeOutOfServiceVolumeDetach特性门控开启 对于孤儿Pod,如果它们的阶段不少终结阶段,则PodGC会把它们设置为Failed,此...
Kubelet运行机制解析
Kubelet运行机制解析 基于1.29 在K8s集群中,在每个Node上都会启动一个kubelet进程,进程用于处理Master下发Node任务,管理Pod以及Pod中人容器。 每个kubelet进程都会在API Server注册Node信息,定期向Master汇报Node资源使用情况,并且通过cAdvisor监控容器和Node资源 自从K8s v1.28开始,kubelet通过--config-dir支持一个插件配置目录,在启动时,kubelet会合并以下几个部分的配置 命令行参数(优先级最低) kubelet配置文件 排序的插件配置文件 在命令行中指定的特性门控–feature-gates(优先级最高) Node通过kubelet启动参数--register-node决定是否向API Server注册自己,还可能有以下的参数 --api-servers:API Server的配置 --kubeconfig:kubeconfig文件,用于访问API Server的安全配置文件 资源管理深入理解节点可分配资源(Node Allocatable Resourc...
kube-proxy运行机制解析
kube-proxy运行机制解析 基于1.29 第一代Proxy一开始是一个真实的TCP/UDP代理,类似于HAProxy,负责转发从Service到Pod的访问流量,这被称为“userspace”模式 第二代Porxy从v1.2版本开始,K8s将iptables作为kube-proxy的默认模式,iptables模式组作为kube-proxy都默认模式 iptables模式,不再起到数据层面的Porxy作用,client向Service的请求流量通过iptables的NAT规则 直接发送到目标Pod,不再经过kube-proxy的转发,kube-proxy只承担控制层面的功能,即通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新Node上相应的iptables规则 kube-proxy针对于Service和Pod创建一些主要的iptables规则如下: KUBE-CLUSTER-IP:在masquerade-all=true或ClusterCIDR被指定的情况下对Service Cluster IP地...
Kube-ApiServer架构解析
Kube-ApiServer架构解析 基于1.29 API层:主要以REST方式提供各种API,除了K8s的CUED资源还有健康检查、日志等等 访问控制层:当有客户端访问API时,访问控制层负责对用户身份鉴权、校验 Registry:K8s把所有的资源对象都保存在注册表,针对不同的资源对象,都定义了资源对象的类型、如何创建资源对象,如何转换资源对象,以及如何资源编码为JSON或ProtoBuf格式进行存储 etcd:用于持久化存储K8s资源对象的KV数据库 K8s Proxy APIK8s Proxy API 的作用是代理REST请求,把API Server收到的REST请求转发到K8s进程的REST端口 该进程由kubelet负责响应 这里的信息,来自于Node,而不是ETCD所以可能存在偏差 K8s Porxy API路径如下: 12345678# 列出指定Node的所有Pod/api/v1/nodes/{node}/proxy/pods # 列出指定Node都所有性能指标统计信息/api/v1/nodes/{node}/p...
K8s集群版本更新
K8s集群版本更新在K8s集群更新,需要考虑不断运行的业务容器运行,通常流程,先更新Master上的K8s服务版本,在逐个更新Node的K8s服务版本 以二进制部署的K8s集群更新更新步骤一般如下: 获取官网的K8s二进制安装包 更新Master的kube-apiserver、kube-controller-manager、kube-scheduler 更新隔离Node,等待全部容器工作停止掉Pod,更新kubelet、kube-proxy 服务文件 恢复业务应用到流量到更新完成的Node上 以Kubeadm部署的K8s集群的版本更新可以通过kubeadm upgrade更新 更新kubeadm 本身 1yum install -y kubeadm-1.21.0 --disableexcludes=kubernetes 查看kubeadm版本,kubeadm version 查看K8s更新的计划,内容,会检查系统的配置 1kubeadm upgrade plan 执行升级 1kubeadm upgrade apply Node也进行升级 1kubeadm upgra...
K8s安装-基于二进制文件(高可用)
K8s安装-基于二进制文件(高可用) 基于1.29 通过kubeadm可以快速搭建一个K8s集群,但是调整K8s集群参数,以及安全设置、高可用模式,就需要二进制安装 Master高可用部署架构Master高可用需要注意几个方面: Master的kube-apiserver、kube-controller-manager和kube-schedule服务以多实例方式部署,至少有3个节点,节点需要为奇数,至少3个节点 Master启用基于CA认证的HTTPS安全机制 etcd至少有3个节点的集群部署模式 etcd集群启用了基于CA认证的HTTPS安全机制 Master启用了RBAC授权模式 创建CA根证书为了启用etcd和K8s服务基于CA认证的安全机制,首先需要配置CA证书 etcd和K8s制作CA证书的时候,都需要基于CA根证书 12openssl genrsa -out ca.key 2048openssl req -x 509 -new -nodes -key ca.key -subj "/CN=192.168.18.3" -days 36500...
K8s安装-基于kubeadm
K8s安装-基于kubeadm 基于1.29 系统要求 软硬件 最低要求 推荐配置 主机资源 若集群中有1-5个Node:Master:2c+2GB;Node:1c Master:4C和16GB;Node实际运行 Linux Kernel内核在v3.10以上 CoreOS7.9 etcd 版本v3以上 etcdv3 容器运行时 各种cri containerd v1.7 主要注意centos7默认开启防火墙,而K8s和各个Node有大量通信,推荐开启以下端口 组件 默认端口 API Server 6443 Controller Manager 10257 Scheduler 10259 Kubelet 10250;10255(只读端口) etcd 2379(供客户端访问);2380(etcd集群节点之间访问) 集群的DNS服务 53(UDP);53(TCP) 对于其他组件,可能还需要开放其他端口,比如CNI Calico需要开放179端口 123# 关闭防火墙systemctl disable firewalldsy...





