etcd 备份与恢复
Write by lyc at 2021-7-12Ucloud ETCD 备份
etcd 备份与恢复1.二进制部署方式备份备份:选择 1~2 个 etcd 节点来执行备份动作,使备份数据冗余。
12345678910# 创建备份目录$ mkdir -p /data/backup/etcd_backup# 备份$ ETCDCTL_API=3 /opt/etcd/bin/etcdctl \snapshot save /data/backup/etcd_backup/snap_`date "+%Y%m%d%H%M%S"`.db \--endpoints=https://192.168.100.190:2379 \--cacert=/opt/etcd/ssl/ca.pem \--cert=/opt/etcd/ssl/server.pem \--key=/opt/etcd/ssl/server-key.pem
恢复:先暂停所有节点的 kube-apiserver(可选) 和 etcd,防止有数据写入 etcd 集群
123systemctl stop kube-apise ...
EFK 采集 Kubernetes Pod 日志
Write by lyc at 2021-12-20filebeat收集K8S日志,写入自动创建的索引Filebeat收集K8S日志ELK在filebeat中堆叠多行无法正常工作
EFK 采集 Kubernetes Pod 日志需求背景:
业务发展越来越庞大,服务器越来越多
各种访问日志、应用日志、错误日志量越来越多
开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
运维需实时关注业务访问情况
容器特性给日志采集带来的难度:
K8s弹性伸缩性:导致不能预先确定采集的目标
容器隔离性:容器的文件系统与宿主机是隔离,导致
日志采集器读取日志文件受阻
完整的ELK K8S POD 日志收集架构:
1filebeat -> Redis(可选) -> Logstash(可选) -> elasticsearch -> Kibana
其他可选的收集器阿里开源的 log-pilot 可以替代 filebeat,参考文档 使用ELK收集k8s日志
1.收集 K8S Pod 日志的前置工作了解 K8S Pod 日志的分类应用程序日志记录体现方式分为两类:
...
kubernetes 弹性伸缩(一):Node弹性伸缩CA
Write by lyc at 2021-11-16
kubernetes 弹性伸缩(一):Node弹性伸缩CA1.kubernetes 弹性伸缩布局在Kubernetes平台中,资源分为两个维度:
Node级别:K8s将多台服务器抽象一个集群资源池,每个Node提供这些资源。当集群资源池不足时,使用CA Cluster Autoscaler自动增加Node。
Pod级别:Pod是K8s最小部署单元,运行实际的应用程序,使用 request 和 limit 为Pod配额。当Pod资源不足时,使用HPA Horizontal Pod Autoscaler 自动增加Pod副本数量。
因此,k8s 实现弹性伸缩也是这两个级别,当Node资源充裕情况下,Pod可任意弹性,当不足情况下需要弹性增加节点来扩容资源池。
2.Node自动扩容/缩容:实现思路自动增加Node:周期性检查是否有充足集群资源来调度新创建的Pod,当资源不足时会创建新的Node
自动减少Node:周期性检查Node资源使用情况,当一个Node长时间资源利用率很低时,自动从集群中下线,原有Pod会自动调度到其他N ...
kubernetes 工作负载控制器(四):Job和Cronjob
Write by lyc at 2021-11-10
kubernetes 工作负载控制器(四):Job和CronjobJob 负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
而 CronJob 则就是在 Job 上加上了时间调度,即定时任务。
1.Job 控制器
Kubernetes Jobs
注意 Job 的 RestartPolicy 仅支持 Never 和 OnFailure 两种,不支持 Always。我们知道 Job 就相当于来执行一个批处理任务,执行完就结束了,如果支持 Always的话是不是就陷入了死循环了。
123456789101112131415161718192021222324252627282930313233---apiVersion: batch/v1kind: Jobmetadata: name: devops-cronjob-demo1 labels: pro: devops app: devops-cronjob-demo1 namespace: defaultspec: backoff ...
kubernetes Pod Probe 容器探针
Write by lyc at 2021-4-7Modify by lyc at 2021-11-4
kubernetes Pod Probe 容器探针
Kubernetes 容器探针
1.三种容器探针
何时该使用存活态探针?何时该使用就绪态探针?何时该使用启动探针?
livenessProbe (存活探针):指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其重启策略决定未来。如果容器不提供存活探针, 则默认状态为 Success。
readinessProbe (就绪探针):指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器 endpoints 将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址(从 endpoints 剔除)。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。
startupProbe (启动探针):指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败 ...
kubernetes metrics-server v0.3.7 组件部署
Write by lyc at 2021-11-3metrics-server GithubKubernetes部署metrics-server 0.3.7
kubernetes metrics-server v0.3.7 组件部署1.metrics-server 介绍metrics-server 是 Kubernetes 集群资源使用情况的聚合器,Kubernetes 中有些组件依赖资源指标API(metric API)的功能 ,如 kubectl top, hpa。如果没有资源指标API接口,这些组件无法运行。
自 Kubernetes 1.8 开始,资源使用指标通过 Metrics API 在 Kubernetes 中获取,从 Kubernetes 1.11 开始 heapster 被废弃不在使用,metrics-server 替代了 heapster。
通过 Metrics API 可以获取指定 node 或者 pod 的当前资源使用情况(而无法获取历史数据)
Metrics API的api路径:/apis/metrics.k8s.io/
Metrics API的使用需要 ...
kubernetes 弹性伸缩(二):Pod弹性伸缩HPA
Write by lyc at 2021-11-3Update by lyc at 2021-11-23
kubernetes 弹性伸缩(二):Pod弹性伸缩HPA
Kubernetes Horizontal Pod AutoscalerKubernetes配置HPA实现应用横向扩展(autoscale)UK8S HPA
一、HPA 基础知识点1.HPA 介绍Horizontal Pod Autoscaler(HPA,Pod 水平自动伸缩):根据资源利用率或者自定义指标自动调整 Deployment 的 Pod 副本数量,提供应用并发。HPA 不适于无法缩放的对象,例如 DaemonSet。
2.HPA 基本工作原理Kubernetes 中的 Metrics Server 组件持续采集所有 Pod 副本的指标数据。HPA 控制器通过 Metrics Server 组件的 API(聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的 Deployment 控制器发 ...
kubernetes cordon 标记节点状态不可调度 SchedulingDisabled
Write by lyc at 2021-11-1k8s命令对node调度 cordon,drain,delete 区别Kubernetes 手动节点管理
kubernetes cordon 标记节点状态不可调度 SchedulingDisabled如果标记节点为不可调度(unschedulable),将阻止新 Pod 调度到该节点之上,但不会影响任何已经在其上的 Pod。 这是重启节点或者执行其他维护操作之前的一个有用的准备步骤。
说明: 被 DaemonSet 控制器创建的 Pod 能够容忍节点的不可调度属性。DaemonSet 通常提供节点本地的服务,即使节点上的负载应用已经被腾空,这些服务也仍需运行在节点之上。
1.kubectl cordon 与 uncordon
kubectl cordon 将 node 状态标记为 SchedulingDisabled 不可调度,之后再创建的 pod不会被调度到该节点。旧有的pod不会受到影响,仍正常对外提供服务。**cordon 影响最小**。
kubectl uncordon 将 node 重新再标记为可调度的状态。
12$ ...
kubernetes drain 驱逐节点上的 Pod(安全地清空一个节点)
Write by lyc at 2021-11-1k8s命令对node调度 cordon,drain,delete 区别Kubernetes 使用 kubectl drain 从服务中删除一个节点
kubernetes drain 驱逐节点上的 Pod(安全地清空一个节点)1.kubectl drain 驱逐节点上的 Pod对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod。安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisruptionBudgets 执行优雅的中止。
注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod
执行 drain 命令做了两件事情:
设定此 node 为不可调度状态,即执行了 cordon
evict 驱逐该节点上的 pod
12$ kubectl drain ${NODE_NAME} --ignore-daemonsets $ kubectl drain ${NODE_NAME} ...
docker 构建php7项目环境
Write by lyc at 2021-9-30PHP DockerHubdocker 从入门到自动化构建 PHP 环境Docker php安装扩展步骤详解
docker 构建php7项目环境1.构建 php7 基础镜像php 的官方 docker 镜像,默认是没有带我们业务要用的扩展的,所以我们要在官方镜像上构建一层为业务提供服务的 php 基础镜像。
12# 获取官方指定版本镜像$ docker pull php:7.3.14-fpm
按需安装业务所需要的扩展,构建符合业务要求的基础镜像。这个基础镜像尽量能够通用,适用于多个项目。
12345678910111213141516171819202122# 编写 Dockerfile$ vim DockerfileFROM php:7.3.14-fpmMAINTAINER lyc7456 lyc7456@qq.com# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc ...