DaemonSet简介DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。使用 DaemonSet 的一些典型用法: 在每个节点上运行集群守护进程,例如在每个 Node 上运行 glusterd 、 ceph 在每个节点上运行日志收集守护进程,例如 fluentd 、 logstash 在每个节点上运行监控守护进程,例如 Prometheus Node Exporter、 collectd 、Datadog 代理、New Relic 代理,或 Ganglia gmond 一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。 一个稍微复杂的用法是为同一种守护进程部署多个 DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。 DaemonSet模板查看DaemonSet必要字段 DaemonSet的描述文件和Deployment非常相似,只 ...
HPA简介官方文档 | Kubernetes HPA(Horizontal Pod Autoscaler)的实现是一个控制循环,由controller manager的–horizontal-pod-autoscaler-sync-period参数指定周期(默认值为15秒)。每个周期内,controller manager根据每个HorizontalPodAutoscaler定义中指定的指标查询资源利用率。controller manager可以从resource metrics API(pod 资源指标)和custom metrics API(自定义指标)获取指标。 对于每个pod的资源指标(如CPU),控制器从资源指标API中获取每一个 HorizontalPodAutoscaler指定的pod的指标,然后,如果设置了目标使用率,控制器获取每个pod中的容器资源使用情况,并计算资源使用率。如果使用原始值,将直接使用原始数据(不再计算百分比)。然后,控制器根据平均的资源使用率或原始值计算出缩放的比例,进而计算出目标副本数。需要注意的是,如果pod某些容器不支持资源采集,那么控制器将 ...
Deployment更新机制 Deployment控制器支持两种更新策略:滚动更新(rolling update)和重新创建(recreate),默认为滚动更新。 滚动升级是默认的更新策略,它在删除一部分旧版本Pod资源的同时,补充创建一部分新版本的Pod对象进行应用升级,其优势是升级期间,容器中应用提供的服务不会中断,但要求应用程序能够应对新旧版本同时工作的情形,例如新旧版本兼容同一个数据库方案等。不过,更新操作期间,不同客户端得到的响应内容可能会来自不同版本的应用。 Deployment控制器的滚动更新操作并非在同一个ReplicaSet控制器对象下删除并创建Pod资源,而是将它们分置于两个不同的控制器之下:旧控制器的Pod对象数量不断减少的同时,新控制器的Pod对象数量不断增加,直到旧控制器不再拥有Pod对象,而新控制器的副本数量变得完全符合期望值为止,如图所示。 滚动更新时,应用升级期间还要确保可用的Pod对象数量不低于某阈值以确保可以持续处理客户端的服务请求,变动的方式和Pod对象的数量范围将通过spec.strategy.rollingUpdate.maxSurge和 ...
简介本文介绍了如何通过 Ansible Playbook 的 roles 功能,自动化部署 Kubernetes 集群。本文将重点讲解如何使用离线方式批量安装 Kubernetes 二进制文件及必要的依赖组件,尽可能减少外部网络访问。考虑到 Kubernetes 集群的正常运行,某些插件(如 CoreDNS、Ingress、Dashboard 等)需要从外部镜像仓库拉取相应镜像,因此在完全离线的环境下,可能需要进行额外的处理。此外,本教程还将介绍如何选择适当的 Kubernetes 和 etcd 版本,并为 flannel 网络插件提供了非容器化版本的安装方式。 Kubernetes 版本选择 在本文的部署过程中,支持多个版本的 Kubernetes,用户可以根据需求选择合适的版本。支持的 Kubernetes 版本从 v1.24.x 到 v1.32.x,同时也会兼容不同版本的 etcd。 软件环境准备 操作系统:是基于 CentOS 操作系统编写的。 etcd:https://github.com/etcd-io/etcd/releases 证书签发工具CFSSL:https:/ ...
Deployment介绍官方介绍 一个 Deployment 为 Pods 和 ReplicaSets提供声明式的更新能力 负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。 而是通过管理ReplicaSet来间接管理pod,即:deployment管理ReplicaSet,ReplicaSet管理pod。所以Deployment比ReplicaSet的功能更强大。 一个Deployment产生三个资源: Deployment资源所有功能 ReplicaSet资源的所有功能 POD资源 Deployment控制RS,RS控制POD副本数 Kubernetes官方强烈建议避免直接使用ReplicaSet,而应该通过Deployment来创建RS和Pod。 Deployment资源清单详解12345678910111213141516 ...
为容器设置一个环境变量创建 Pod 时,可以为其下的容器设置环境变量。通过配置文件的 env 或者 envFrom 字段来设置环境变量。 本示例中,将创建一个只包含单个容器的 Pod。Pod 的配置文件中设置环境变量的名称为 DEMO_GREETING, 其值为 "Hello from the environment"。下面是 Pod 的配置清单: 123456789101112131415apiVersion: v1kind: Podmetadata: name: envar-demo labels: purpose: demonstrate-envarsspec: # 指定规格信息 containers: # 指定要启动一个什么样的容器 - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: # 设置环境变量 - name: DEMO_GREETING value: " ...
YAML 基础 它的基本语法规则如下: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字符一直到行尾,都会被解析器忽略。 Pods基本原理Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。 除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。 Pod 简单模版1234567891011121314151617181920apiVersion: v1 # ...
Ansible部署keepalived高可用keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件. keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,他能够保证当个别节点宕机时,整个网络可以不间断地运行.Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。 思路: 安装keepalived 配置keepalived配置文件 使用到yum、file、service等模块。 启动服务测试 环境准备: 1[root@ansible01 ~/roles]$mkdir keepalived/{ ...
Ansible批量部署编译安装MySQL本文是通过ansible-playbook的roles功能实现批量编译安装mysql-5.7.31和初始化,使用Ansible角色来编译安装MySQL,来对之前学的做总结。 思路:安装MySQL的编译环境下载文件、解压、创建软连接初始化使用到yum、user、get_url、file、unarchive、shell等模块。 环境准备: 1[root@ansbile01 ~/roles]$ mkdir mysql/{vars,tasks,templates,handlers,files} -p 创建启动MySQL用户12345[root@ansbile01 ~/roles]$ cat mysql/tasks/user.yml - name: Create MySQL group group: name={{ group }} gid={{ gid }} system=yes- name: Create MySQL user user: nam ...
Ansible批量部署编译安装nginx使用Ansible角色来编译安装Nginx,来对之前学的做总结。 思路:安装nginx的编译环境下载文件、解压编译安装使用yum、user、get_url、file、unarchive、shell等模块。 创建启动nginx用户12345[root@ansbile01 ~/roles]$ cat nginx/tasks/user.yml - name: create nginx group group: name={{ group }} gid={{ gid }} system=yes- name: create nginx user user: name={{ user }} group={{ group }} uid={{ uid }} system=yes shell=/sbin/nologin create_home=no 安装依赖软件 ...
自动化运维
未读ansible角色概念角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。 roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。 我理解的就是把多个节点都会用到的功能将其定义成模块,以后谁用到就调用该模块即可,而ansible中它有一个特有名称,即角色(rolers)官方文档:https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 角色目录规划官方的目录结构,必须这样定义! 123456789[root@ansible /etc/ansible/roles]# tree.├── init # 角色名称│ ...
Linux运维
未读rpmbuild方式定制rpm包rpmbuid是用于制作rpm格式包的工具。rpm 4.4.x版本之前,rpmbuid工具默认的工作车间为/usr/src/redhat,所以造成普通用户不能制作rpm包。rpm 4.5.x版本开始,将rpmbuid工具默认的工作车间为$HOME/rpmbuild(用户家目录),并且推荐用户尽量不用root账号制作rpm包。 123456789101112#rpm版本查看方法:[root@moban ~]# rpm -qa|grep rpmredhat-rpm-config-9.1.0-88.el7.centos.noarchrpm-sign-4.11.3-45.el7.x86_64rpm-4.11.3-45.el7.x86_64rpm-build-libs-4.11.3-45.el7.x86_64python-srpm-macros-3-34.el7.noarchperl-srpm-macros-1-8.el7.noarchrpm-libs-4.11.3-45.el7.x86_64rpm-python-4.11. ...