BasicLab基础架构实验室
本人深耕基础架构领域,曾在国内500强大厂研发企业级百亿量级吞吐中间件,擅长Java语言、Go语言、Python语言、C语言、NodeJS、Web、Linux、深度学习、大数据、云原生等
展开
-
Kubernetes实战(六)-污点与容忍(Taints 和 Tolerations)
前面介绍的 NodeAffinity 节点亲和性,是在 Pod 上定义的一种属性,使得 Pod 能够调度到某些 Node 上运行(优先选择或强制要求)。Taint 则正好相反,它让 Node拒绝 Pod 的运行。Taint 需要和 Toleration 配合使用,让 Pod 避开那些不合适的 Node。在 Node 上设置一个或多个 Taint 之后,除非 Pod 明确生命能够容忍这些污点,否则无法在这些 Node 上运行。Toleration 是 Pod 的属性,让 Pod 能够(注意,只是能够,而非原创 2020-04-21 10:17:36 · 712 阅读 · 0 评论 -
Kubernetes实战(四)-亲和性调度(NodeAffinity)
NodeAffinity 就是节点亲和性,相对应的是Anti-Affinity,就是反亲和性,这种方法比上面的nodeSelector更加灵活,它可以进行一些简单的逻辑组合了,不只是简单的相等匹配。 目前有两种节点亲和性表达。requiredDuringSchedulingIgnoredDuringExecution:必须满足指定的规则才可以调度 Pod 到 Node 上(功能与 NodeSelector 很像,但是使用的是不同的语法),相当于硬限制。preferredDuringSchedulin原创 2020-04-21 10:15:01 · 1546 阅读 · 3 评论 -
Kubernetes实战(二)-全自动调度(Deployment 或 RC)
在Kubernetes上,很少会直接创建一个Pod,在大多数情况下,会通过RC、Deployment、DaemonSet、Job等控制器完成对一组Pod副本的创建、调度和整个生命周期的自动化控制。1、控制器类型在最早的Kubernetes版本里没有这么多Pod副本控制器的,只有一 个Pod副本控制器RC(Replication Controller),这个控制器是这样设计 实现的:RC独立于所控制的Pod,并通过Label标签这个松耦合关联关系 控制目标Pod实例的创建和销毁,随着Kubernete原创 2020-04-21 10:11:51 · 920 阅读 · 5 评论 -
Kubernetes实战(三)-定向调度(NodeSelector)
Kubernetes定向调度,通过NodeSelector标签实现,Master上的Scheduler服务(kube-scheduler进程)负责实现Pod的调度,整个调度过程通过执行一系列复杂的算法,最终为每个Pod都计算出一个最佳的目标节点,这一过程是自动完成的,通常我们 无法知道Pod最终会被调度到哪个节点上。在实际情况下,也可能需要将Pod调度到指定的一些Node上,可以通过Node的标签(Label)和Pod的nodeSelector属性相匹配,来达到上述目的。首先通过kubectl la原创 2020-04-21 10:13:19 · 2314 阅读 · 2 评论 -
Kubernetes实战(一)-Kubernetes集群搭建
从两年前开始就一直在关注着Kubernetes的技术发展,说来惭愧,直到两年后的今天才来写这个专栏,容器化发展到今天已经是非常成熟的技术,各大公司争相使用Kubernetes做容器化管理,今后也会将更多的重心转移到容器相关技术的学习上,比如Kubernetes、Istio、Prometheus、Knative等等,慢慢朝着运维方向去培养自己。我始终相信合久必分,分久必合的道理,天下如此,微服务...原创 2019-07-06 21:40:43 · 2861 阅读 · 3 评论 -
Kubernetes实战(三十三)-外部Etcd集群部署与调优(更安全的数据存储策略)
Etcd集群作为kubernetes集群的大脑,重要性不言而喻,但我好像没有对etcd集群做过一个全方面的总结,部署手法也只是单调的使用ansible快速部署,很多细节并没有说清楚,并且对于etcd集群部署后的性能调优也没有过多的提及。因此,本文将对etcd集群的由来,etcd集群的特点,etcd集群的部署手法,etcd应该注意的调优方案这些做一个全面的总结。原创 2023-11-06 09:42:06 · 557 阅读 · 0 评论 -
Kubernetes实战(三十二)-Kubeadm 安装 Kubernetes v1.24.0
Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。K8S集群中有管理节点与工作节点两种类型。管理节点主要负责K8S集群管理,集群中各节点间的信息交互、任务调度,还负责容器、Pod、NameSpaces、PV等生命周期的管理。...原创 2022-08-17 15:58:43 · 358 阅读 · 0 评论 -
Kubernetes实战(三十一)-Calico网络部署(推荐)
Calico 是一种容器之间互通的网络方案。在虚拟化平台中,比如 OpenStack、Docker 等都需要实现 workloads 之间互连,但同时也需要对容器做隔离控制,就像在 Internet 中的服务仅开放80端口、公有云的多租户一样,提供隔离和管控机制。......原创 2022-08-17 14:29:56 · 692 阅读 · 0 评论 -
Kubernetes实战(三十)-HTTP 7层路由机制(Ingress)
Kubernetes Ingress 资源对象,用于将不同URL的访问请求转发到后端不同的Service,以实现HTTP层的业务路由机制。Kubernetes使用一个Ingress策略定义和一个具体的Ingress Controller,Ingress Controller 基于 Ingress 规则将客户请求直接转发到 Service 对应的后端 Endpoint 上,两者结合并实现了一个完整的Ingress负载均衡器。注:Ingress 路由机制会跳过 kube-proxy 的转发功能,kube-p原创 2020-08-31 17:07:45 · 1665 阅读 · 5 评论 -
Kubernetes实战(二十九)-集群资源管理(CPU & Memory)
Kubernetes 是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配给容器使用,并且要保证容器生命周期内有足够的资源来保证其运行,这些资源可以被分成两种不同的情形:期望情形(规格)和当前情形(状态)。资源需求和资源容量可被认为是规格(期望情形),资源使用可被认为是状态(当前情形)。Kubernetes 调度器可以利用这两种情形来推断节点容量,资源需求等。我们可以用术语“限额”和“请求”来描述资源的规格:请求:一个容器请求的资源数量。如果一个容器超过了它的原创 2020-08-31 16:38:18 · 736 阅读 · 2 评论 -
Kubernetes实战(二十八)-环境共享与隔离(Namespace)
Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题。命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制。无论是应用自定义的访问控制策略,还是为了测试环境而分离所有组件,命名空间都是一个按照组来处理对象。Namespace即命名空间,主要有两个方面的作用:资源隔离:可为不同的团队/用户(或项目)提供虚拟的集群空间,共享同一个Kubernetes集群的资源。比如可以为团队A创建一个Namespace ns-a,团队A的项目都部署运行在 ns-a 中,团队B创建另原创 2020-08-31 16:19:49 · 1787 阅读 · 3 评论 -
Kubernetes实战(二十七)-集群访问外部服务(Endpoints)
Kubernetes 访问内网集群外独立的服务,由于不在相同的网段(容器内的网段是独立的)所以不能够互相访问通信,这种情况下我们可以创建 Kubernetes 的 Endpoints 资源,将外部服务映射为集群的内部服务进行访问通信。在实际的生产环境使用中,通过分布式存储来实现的磁盘在 Mysql 这种IO密集性应用中,性能问题会显得非常突出。所以在实际应用中,一般不会把 Mysql 这种应用直接放入 Kubernetes 中管理,而是使用专用的服务器来独立部署,而像 Web 这种无状态应用依然会运行在原创 2020-08-31 15:50:01 · 4201 阅读 · 7 评论 -
Kubernetes实战(二十六)-高可用负载均衡与外部服务(Service)
Kubernetes可以方便的为容器应用提供了一个持续运行且方便扩展的环境,但是,应用最终是要被用户或其他应用访问、调用的。要访问应用pod,就会有以下两个问题: pod是有生命周期的。它会根据集群的期望状态不断的在创建、删除、更新,所以pod的ip也在不断变化,如何访问到不断变化的pod? 通常一个应用不会单只有一个pod,而是由多个相同功能的pod共同提供服务的。那么对这个应用的访问,如何在多个pod中负载均衡? service主要就是用来解决这两个问题的。简单来说,它是一个抽象的a原创 2020-08-31 15:19:43 · 868 阅读 · 3 评论 -
Kubernetes实战(二十五)-Flannel 网络部署(不推荐,不支持 Etcd3)
Flannel 是 cereos 开源的 CNI 网络插件,下图 Flannel 官网提供的一个数据包经过封包、传输以及拆包的示意图,从这个图片中可以看出两台机器的docker0分别处于不同的段:10.1.20.1/24 和 10.1.15.1/24 ,如果从Web App Frontend1 pod(10.1.15.2)去连接另一台主机上的Backend Service2 pod(10.1.20.3),网络包从宿主机192.168.0.100发往192.168.0.200,内层容器的数据包被封装到宿主机的原创 2020-08-30 19:45:52 · 1819 阅读 · 3 评论 -
Kubernetes实战(二十四)-kubernetes二进制文件方式部署集群(安全)(下)
本文是基于前文的基础上进行的后续工作,如果不了解前文则不建议直接浏览本文的内容,相关传送门如下:kubernetes二进制文件方式部署集群(上)(非安全)kubernetes二进制文件方式部署集群(下)(非安全)Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程,kubelet 负责 pod 容器的创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能,kube-proxy 则是 kub原创 2020-08-28 23:59:08 · 870 阅读 · 2 评论 -
Kubernetes实战(二十三)-kubernetes二进制文件方式部署集群(安全)(上)
本文是基于前文的基础上进行的后续工作,如果不了解前文则不建议直接浏览本文的内容,相关传送门如下:kubernetes二进制文件方式部署集群(上)(非安全)kubernetes二进制文件方式部署集群(下)(非安全)在一个安全的内网环境中,Kubernetes 的各个组件与 Master 之间可以通过 kube-apiserver 的非安全端口 http://<kube-apiserver-ip>:8080 进行访问。但如果 API Server 需要对外提供服务,或者集群中的某些.原创 2020-08-28 22:37:15 · 611 阅读 · 1 评论 -
Kubernetes实战(二十二)-Etcd 集群部署(安全)
kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤。1、准备etcd软件包并分发etcd文件[root@master ~]# cd /usr/local/src[root@master src]#wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz[root@master src]# tar zxf etc原创 2020-08-23 16:09:52 · 671 阅读 · 2 评论 -
Kubernetes实战(二十一)-CFSSL 制作 CA 证书(核心组件间通信验证需要)
Kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 和其它证书。1、CFSSL安装[root@k8s-master ~]# cd /usr/local/src[root@k8s-master src]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64[root@k8s-master src]# .原创 2020-08-23 15:51:55 · 967 阅读 · 2 评论 -
Kubernetes实战(二十)-kubernetes二进制文件方式部署集群(非安全)(下)
上文我们讲解了Master 节点上的 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、docker服务的部署,本文我们来介绍 Node 上的 kubelet、kube-proxy 服务部署。一、准备工作在工作 Node 上需要预先安装好 Docker 并且正常启动,二进制 Kubernetes 集群的 docker 是v19.03.12 版本,相关文章已经为各位客官准备好了(版本注意选择 v19.03.12),传送门如下:...原创 2020-08-23 14:33:08 · 509 阅读 · 1 评论 -
Kubernetes实战(十九)-kubernetes二进制文件方式部署集群 (非安全)(上)
Kubernetes 二进制部署方式是生产环境的主流搭建方式,已在生产环境验证,kubeadm也可以搭建生产环境,不过kubeadm应该还没有被大规模在生产环境验证,所以不推荐在生产环境使用 kubeadm 方式搭建 Kubernetes集群,二进制搭建方式由于内容量大,扩展性强,我会将二进制集群部署分为多个文章进行讲解。本篇文章主要讲解 Master 节点上的 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、docker服务的部署.原创 2020-08-21 20:14:30 · 798 阅读 · 1 评论 -
Kubernetes实战(十八)-共享卷子路径划分(Subpath)
在Pod中共享卷以供多方使用是很有用的。VolumeMounts.subPath属性可用于指定所引用的卷内的子路径,而不是其根路径1个Pod中可以有多个容器,这里将不同容器的路径挂载在存储卷volume的子路径,这种场景需要使用到subpath; volume支持将configMap/secret挂载到容器的路径,但是会覆盖容器路径下原有的文件。如何支持选定configmap/secret的key-value挂载到容器中,且不会覆盖掉原目录下的文件,这个时候可以用subpath。1、存储卷挂载原创 2020-08-21 07:23:53 · 2241 阅读 · 1 评论 -
Kubernetes实战(十七)-动态存储供应(StorageClass)
Kubernetes动态存储供应(StorageClass)是相对于 存储卷管理(PV) 来说的,如果要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的需求,比如我们有一个应用需要对存储的并发度要求比较高,而另外一个应用对读写速度又要求比较高,特别是对于 StatefulSet 类型的应用简单的来使用静态的 PV 就很不合适了,这种情况下我们就需要用到动态 PV,也就是指本文的StorageClass。Kubernetes支持的分布式存储方式有很多种,这原创 2020-07-23 20:50:45 · 748 阅读 · 2 评论 -
Kubernetes实战(十六)-存储卷管理(PV & PVC)
PersistentVolume (持久化卷) 是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph、GlusterFS、NFS等,都是通过插件机制完成与共享存储的对接PersistenVolumeClaim (持久化卷声明)是用户存储的一种声明,PVC和Pod比较相似,Pod是消耗节点资源,PVC消耗的是PV资源,Pod可以请求CPU的内存,而PVC可以请求特定的存储空间和访问模式,用户不需要关心底层的存储实现细节。原创 2020-07-23 20:49:11 · 464 阅读 · 1 评论 -
Kubernetes实战(十五)-敏感数据管理(Secret)
Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。一、Secret 分类Secret 分为三种场景应用,本文只讲解第一种场景和第二种场景,第三种场景涉及到Kubernetes数据访问权限认证方面的内容,由于可扩展性太强,牵涉到 二进制部署、Token、SSL、ABAC、RBAC、Role、RoleBinding、ClusterRole、ClusterRoleBinding、KubeConfig等内容,后面原创 2020-07-23 20:44:26 · 501 阅读 · 1 评论 -
Kubernetes实战(十四)-配置管理(ConfigMap)
ConfigMap 核心用途就是容器和配置的分离解耦,如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦,配置文件也能够实现和容器的分离解耦,也就是说mysql容器能够直接读取并使用预先配置好的配置文件(而不是使用容器中默认自带的配置文件),同时也可以保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 secret 很类似,但它可以更方便地处理不包含敏感信息的字符串原创 2020-07-23 20:42:40 · 764 阅读 · 2 评论 -
Kubernetes实战(十二)-集群资源监控工具(metrics-server)
在日常工作中,有时我们需要了解当前正在运行的集群中每个服务实际占用资源情况,此时我们就需要Kubernetes的集群资源采集服务Metrics-Server,通过Metrics-Server采集Node和Pod的内存、磁盘、CPU、网络的使用情况。metrics-server架构示意图:一、metrics-server部署1. 下载资源文件$ git clone -b release-0.3 https://github.com/kubernetes-incubator/metri..原创 2020-07-05 17:59:23 · 1053 阅读 · 0 评论 -
Kubernetes实战(十三)-标签选择器(Label)
在某些特殊情况下,需要将某些服务固定在一台宿主机上, k8s可以使用label给node节点打上标签来满足这种需求。1、添加Label# 语法kubectl label nodes <node-name> <label-key>=<label-value> # 查看现有node及label[root@master ~]# kubectl get nodes --show-labels NAME STATUS ROLES AGE原创 2020-07-05 17:27:32 · 1694 阅读 · 1 评论 -
Kubernetes实战(十一)-包管理工具(Helm)
很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成原创 2020-07-05 17:13:28 · 662 阅读 · 2 评论 -
Kubernetes实战(十)-升级和回滚(Deployment)
Kubernetes 提供了为容器升级和回滚的功能,当集群中的某个服务需要升级时,我们需要停止目前与该服务相关所有的 Pod,然后根据改动后的内容创建新的 Pod。如果集群规模较大,这个工作将变成一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用,Kubernetes 提供了滚动升级功能来解决上述问题,同时如果在升级过程中出现了差错,可以通过回滚功能回滚到之前部署的任意版本。原创 2020-04-21 10:21:48 · 728 阅读 · 2 评论 -
Kubernetes实战(九)-初始化容器(Init Container)
Kubernetes 的新特性 init container 用于在启动应用容器(app container)之前启动一个或多个初始化容器,init container 与应用容器本质上是一样的,但他们是仅运行一次就结束的任务,并且必须在成功执行完后,系统才能继续执行下一个容器。原创 2020-04-21 10:20:29 · 1394 阅读 · 0 评论 -
Kubernetes实战(八)-定时任务(Cronjob)
Kubernetes 从1.5版本开始增加了一种新的类型 Job,即类似 Linux Cron 的定时任务 Cron Job,但两者之间也有一些区别,支持 ", - * / "四个字符,*:表示匹配任意值,如果在Minutes 中使用,表示每分钟 /: 表示起始时间开始触发,然后每隔固定时间触发一次,例如:在Minutes 设置的是5/20,则表示第一次触发是在第5min时,接下来每20min触发一次,即,第25min,45min等时刻触发原创 2020-04-21 10:19:39 · 1489 阅读 · 0 评论 -
Kubernetes实战(七)-优先级调度(Pod Priority Preemption)
对于运行各种负载(如Service、Job)的中等规模或者大规模的集群来说,出于各种原因,我们需要尽可能提高集群的资源利用率。而提高资源利用率的常规做法是采用优先级方案,即不同类型的负载对应不同的优先级,同时允许集群中的所有负载所需的资源总量超过集群可提供的资源,在这种情况下,当发生资源不足的情况时,系统可以选择释放一些不重要的负载(优先级最低的),保障最重要的负载能够获取足够的资源稳定运行。Kubernetes 1.8版本之前,当集群的可用资源不足时,在用户提交新的Pod创建请求后,该Pod会一直处于原创 2020-04-21 10:18:50 · 951 阅读 · 0 评论 -
Kubernetes实战(五)-亲和与互斥调度策略(PodAffinity)
Pod 间的亲和与互斥从 Kubernetes 1.4 版本开始引入。这一功能让用户从另一个角度来限制 Pod 所能运行的节点:根据在节点上正在运行的 Pod 的标签而不是节点的标签进行判断和调度,要求对节点和 Pod 两个条件进行匹配。这种规则可以描述为:如果在具有标签 X 的 Node 上运行了一个或者多个符合条件 Y 的 Pod,那么 Pod 应该(如果是互斥的情况,那么就变成了拒绝)运行在这个 Node 上。这里 X 指的是一个集群中的节点、机架、区域等概念,通过 Kubernetes 内置节点原创 2020-04-21 10:16:11 · 2124 阅读 · 1 评论