03 2025 档案
摘要:前面学习了Volume的多种类型对象,本章将再讲解一种特殊的资源对象:ConfigMap。 日常许多应用经常会有从配置文件、命令行参数或者环境变量中读取一些配置信息,这些配置信息我们肯定不会直接写死到应用程序中去的,例如有个应用连接redis服务,那redis做了迁移或者修改了密码,这时候还得重新去
阅读全文
摘要:前面学习了动态PV,确实帮助我们省略了创建和删除的步骤,但还是觉得麻烦,先要创建RBAC,再创建NFS的客户端的pod,再创建pvc,最后才能应用到pod里面。能不能更简化一点?今天介绍一款软件 Longhorn 他来帮我们再减轻一些操作。 可能提起Longhorn有些人不熟悉,但是他的出厂公司Ra
阅读全文
摘要:上一章节学习了K8S中PV/PVC,这种创建卷的方式给我们带来了不少好处,例如持久化,共享卷等,但是最大的问题就是它是静态的。什么意思?就是我们每次想使用一个卷的时候,先要创建pv,然后声明pvc,最后才能在pod里面去使用这个卷。少的情况下还好,万一生产环境里面有成1000个pod都需要用到卷存储
阅读全文
摘要:前面我们讲解了 hostPath 或者 emptyDir 的方式来持久化数据,但是他们也有各自的缺点,是否有更加可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据?而且显示情况会出现存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使
阅读全文
摘要:hostPath,顾名思义,就是将主机的目录挂载到pod里面,这样可以将pod里面产生的数据永久保留到主机的磁盘里面,也可以反过来将主机中的文件共享到pod中,例如可以将主机中的hosts文件挂载到多个pod,每次只需要修改主机的hosts文件即可。 上面说的他的几个好处,坏处当然也是有不少,比如多
阅读全文
摘要:emptyDir 顾名思义,是一个临时的存储卷,他是在k8s在pod调度到节点的时候自动创建的,生命周期随着pod的删除或转移而销毁,里面的数据也随之删除。一般用于非持久化的pod。同一个pod如果启动了多个容器,那它们之前是可以互相访问这个卷,如果不同的pod则彼此隔离。即便这2个pod是在同一个
阅读全文
摘要:前面讲解了那么多的案例,其实会发现一个问题,就是应用的数据存储,由于pod是无状态的,当pod销毁后,pod中产生的数据也随之销毁,那如果pod中运行的是持久化数据,例如数据库,在销毁或者重建pod的时候,该如何保留之前的数据。Kubernetes提供了一个思路 Volume(卷)。 在Kubern
阅读全文
摘要:在以往面试k8s问题的时候,经常被问的的三个问题,1.创建一个pod的完整生命周期;2.亲和性与反亲和性相关问题;3.如何优雅的关闭一个pod? 前面2个问题在之前的章节中已经有讲解,今天来针对第三个问题讲一下Pod Hook。 一、什么是Pod Hook? Pod Hook 是 Kubernete
阅读全文
摘要:上一篇文章里面提了一个新的知识点:调度。默认情况下master节点是不调度普通pod的。我们上节课通过<kubectl taint xx > 这条命令让master节点允许被调度,即允许普通pod在master节点上创建。 # 查看master节点是否允许调度,如果出现下面就说明不允许调度 # ku
阅读全文
摘要:上一章节了解了pod对node节点的选择,可以通过nodeSelector来进行选择节点进行部署,这一章节讲解另一种操作更精细化调度的属性:亲和性(Affinity) 和 反亲和性(Anti-Affinity)。 在 Kubernetes 中,亲和性(Affinity) 和 反亲和性(An
阅读全文
摘要:一个K8S集群一般的情况下会有多台服务器,例如master和多台node,我在生产环境中一般会将ETCD和api server等运行在master节点上,而业务服务的pod则运行在node服务器上面,那如何实现这种分配?常用的有两种思路,打标/nodeSelector 和 亲和性选择。在 Kuber
阅读全文
摘要:在Kubernetes中,健康检查是确保集群中容器稳定运行的重要机制。它通过探针(Probe)定期检查容器的健康状态,并根据检查结果采取相应的措施。下面我将详细讲解Kubernetes中的健康检查机制。 健康检查种类 Kubernetes中的健康检查主要分为三种: 存活性健康检查(Liveness
阅读全文
摘要:在Kubernetes中,Rolling Update 是一种用于在不中断服务的情况下更新应用程序的策略。它通过逐步替换旧版本的Pods来实现无缝更新。 举个例子,一个deployment中有10个nginx1.17版本的pod副本,当想将这个nginx版本进行升级到1.18,我们想的当然是不能
阅读全文
摘要:上一篇讲解了Pod的资源限制,那现实情况会出现,当业务流量上涨后,Pod对资源的占用也上涨了。之前分配的资源不够用了。不可能再又手动的去调整yaml文件,重新创建占用更多资源的pod吧?Kubernetes为我们提供了这样一个资源对象:Horizontal Pod Autoscaling(Pod水平
阅读全文
摘要:在生产环境和测试环境共用node节点的情况下,如果物理资源不够用,不可避免会出现抢占物理资源的情况,在Kubernetes中,resources 指的是容器或Pod可以使用的计算资源,主要包括CPU和内存。Kubernetes通过资源请求(requests)和资源限制(limits)来管理这些资
阅读全文
摘要:在前面的文章里面提到过,Pod、Deployment这些对象有许多的属性值,可以用来对自身做诸多限制,从本章开始,我们来一起学习下这些属性。先从最基础的namespace开始学习。 什么是Namespace? 在 Kubernetes 中,Namespace(命名空间) 是一种将集群资源划分
阅读全文
摘要:上篇文章介绍service时有说了暴露了service对外的三种方式ClusterIP、NodePort与LoadBalance,这几种方式都是在service的维度提供的,service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断
阅读全文
摘要:前面我们学习了K8S中service对象中ClusterIP和NodePort,今天来学习剩下的两种LoadBalancer和ExternalName。 service的另外两种方式 LoadBalancer: 大多是在公有云托管集群中使用,可以理解为在NodePort的前面再增加了一个公有云的负载
阅读全文
摘要:前面讲解了Pod和deployment等多个核心对象,了解了可以通过这些对象来创建一些pod对象,并且提供内部的访问,但是在实际生产中,肯定是想将pod中的服务对外网提供服务,让外网用户能通过IP:Port的方式来访问到集群后端的服务。 实现的方法有很多,比如:1,已知Node可以通过pod的IP:
阅读全文
摘要:CronJob和Job很像,就是在Job的基础上加上了时间调度,在给定的时间点运行一个任务,也可以周期性地在给定时间点运行。这个实际上和我们Linux中的crontab就非常类似了。 一个CronJob对象其实就对应中crontab文件中的一行,它根据配置的时间格式周期性地运行一个Job,格式和cr
阅读全文
摘要:本章节来学习K8s中一种新的资源对象Job。 什么是Job? Job是Kubernetes中的一个核心概念,用于在集群中运行独立的任务。与其他控制器(如ReplicaSet和Deployment)不同,Job关注的是执行一次性任务而不是保持指定数量的实例运行。 Job的主要作用 独立任务执行:Job
阅读全文
摘要:前面了解学习了K8S中的对象deployment和statefulset,知道他们对pod的管理,今天学习一种特殊的对象:DaemonSet。 什么是DaemonSet? DaemonSet用于确保在集群的每个节点上都运行一个或多个Pod的副本。与其他控制器(如statefulset和deploym
阅读全文
摘要:上一章节,初步通过Deployment和ReplicaSet了解到了他们对Pod的管理方式,但是这里有一个问题,pod的名字都是无序的随机生成无状态服务,我们又知道同pod之间是可以互相访问的。那有没有一种方式能让这种变成可预测的呢? 举例,有2个pod程序,其中一个是web服务,一个是是mysql
阅读全文
摘要:上节课讲述Deployment的时候引入了一个ReplicaSet的东西,也讲解了他是来管理pod的的创建和删除。并且保证pod的数量和我们设置的参数保持一致。本章节来了解下他如何来工作的。 示例:Nginx应用的ReplicaSet 一个简单的Nginx应用,我们将使用ReplicaSet来部署和
阅读全文
摘要:前面2个章节,了解了pod的创建过程和生命周期。但是在实际应用中,直接创建pod是很少见的,因为一旦这个pod挂掉了。整个服务就宕机了。所以 kubernetes 提供了一个Deployment的概念,可以让 Deployment来管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本
阅读全文
摘要:上节课我们创建了一个pod,成功启动了他。本章节我们来继续了解一下创建pod的其他功能。 上节课在第一次拉取镜像的时候,出现了一个报错ImagePullBackOff ,如果继续等待,可能会变成ErrImagePull,在调整了镜像地址重新拉取之后,状态又变成了Running,这告诉我们,在创建Po
阅读全文
摘要:上节课我们学习了YAML的语法,这节课我们来用YAML语法来实际创建一个pod对象,来加深对YAML和POD的理解。 首先,先了解下什么是POD? Kubernetes中的Pod是最小调度单元,包含一个或多个共享网络和存储资源的容器。这些容器始终共同调度,通过localhost直接通信,并作为整体进
阅读全文
摘要:在之前的网络插件安装时候,我们使用了一条命令 kubectl apply -f kube-flannel.yml,这里面的kubectl是调用k8s的客户端工具,apply -f kube-flannel.yml是指应用这个kube-flannel.yml文件里面的内容。 那什么是yaml文件? Y
阅读全文
摘要:上一篇我们部署了Flannel网络,并且所有的节点状态已经发现了改变,这一篇我们来了解下另外一个网络插件:Calico。 在安装calico之前,为了避免2个网络插件的冲突,先卸载掉刚才安装的flannel组件 卸载Flannel kubectl delete -f kube-flannel.yml
阅读全文
摘要:上一篇了解了K8S中有许多的网络组件,Flannel是其中之一,本章节将来学习如何部署。 安装Flannel 从官方的github上可以得知,从k8s1.17之后的版本,可以通过下面命令来直接部署,但是有个前提。默认的pod网段没有被修改。需要是10.244.0.0/16 。如果在master初始化
阅读全文
摘要:在上个章节里面,学习了k8s集群中master的初始化和node节点的加入,也通过 kubectl get nodes 命令看到集群中此时有2个节点了。但是为什么状态都是NotReady呢? 这是由于没有安装网络节点导致的。那接下来我们将开始学习网络插件的安装。 k8s集群中,网络插件的选择有很多种
阅读全文
摘要:上篇回顾 上一篇我们讲解了k8s集群中的master的安装,在本章中我们将加入node节点 在上一章节中,master初始化后,最后会出现一个提示如何加入节点的命令(第八步)。 在完成node节点的初始化工作后,可以通过这个命令来讲node节点加入到这个集群。 node节点操作 1.节点初始化 1.
阅读全文
摘要:本文初期将使用2台服务器作为k8s集群的节点,资源情况如下,免费服务器来源可以查看第二篇文章。 主机名内网IP硬件资源操作系统k8s-master172.21.176.34C8GUbuntu20.04k8s-node01172.21.176.42C4GUbuntu20.04 使用kubeadm来搭建
阅读全文
摘要:在此之前,已经实际操作了一下真实的K8S环境,但是很多名词和操作都不知道到底是什么东西。所以必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石。 下图来自官网,为k8s的一个集群组件概括 Kubernetes 组件 | Kubernetes Kuberne
阅读全文
摘要:创建属于自己的第一个pod controlplane $ kubectl run nginx --image=swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.0 pod/nginx created controlplane
阅读全文
摘要:先爽一把 不管什么教材,不管是上来就给初学者科普基础理论,还是直接就进入正题,都很容易让初学者昏头,那么我们就先从第三方搭建好的k8s集群试玩一下,看看k8s到底有些什么东西,为什么值得我们花时间去学习。 什么是Kubernetes | Killercoda ? Killercoda是一个专为Dev
阅读全文
摘要:寻找免费的服务器 搭建K8S需要服务器,国内的云厂商一般都会给用户提供免费的服务器使用时间,我个人现在用的就是阿里云的免费试用3个月的ECS时长,如果您没有服务器或者本地电脑运行虚拟机不足,也可以使用这个作为短期内学习实验机器。 初期的实验对服务器的硬件资源并不高,这里使用的是2台服务器组成,一台4
阅读全文
摘要:为什么会想到写这个: 记得在17年的时候,那时候刚开始了解K8S,网上文档太多,好坏也参差不齐。也有很多都是抄来抄去,要么就面临收费,只能慢慢寻找对自己有用的而艰难入门。现在从事K8S相关的工作已经快8年,K8S也已经从当时的1.7,1.8版本迭代到目前最新的1.32(截止2025年3月),网上很多
阅读全文
浙公网安备 33010602011771号