kubernetes 工作负载控制器(三):StatefulSet
Write by lyc at 2021-05-17
kubernetes 工作负载控制器(三):StatefulSet1.StatefulSet 控制器Deployment 控制器设计原则:管理的所有 Pod 一模一样,提供同一个服务,也不考虑在哪台 Node 运行,可以随意扩容和缩容。这种称为 “无状态”,例如 Web 服务。
在实际的场景中,并不能满足所有应用,尤其是分布式应用,会部署多个实例,这些实例之间往往有依赖关系,例如主从关系、主备关系,这种应用称为 “有状态” ,例如 MySQL 主从、Etcd
StatefulSet 控制器用于部署有状态应用,满足一些有状态应用的需求
Pod 有序的部署、扩容、删除和停止
Pod 分配一个稳定的且唯一的网络标识
Pod 分配一个独享的存储
2.StatefulSet 控制器:特点稳定的网络标识:
使用 Headless Service 来维护 Pod 网络身份。(相比普通 Service 只是将 spec.clusterIP 定义为 None)
会为每个 Pod 分配一个数字编号并且按照编号顺序部署
还需要在 Statef ...
kubernetes 工作负载控制器(二):DaemonSet
Write by lyc at 2021-5-16Kubernetes DaemonSet
kubernetes 工作负载控制器(二):DaemonSet1.DaemonSet 控制器DaemonSet 功能:
在每一个 node 上运行一个 Pod,新加入的 node 也同样会自动运行一个 Pod
与 Deployment 特性大致相同,如支持滚动更新,但不支持 spec.replicas 副本数字段设置
DaemonSet 应用场景:网络插件 kube-proxy, calico, 其他 Agent 等
2.DaemonSet 控制器部署123456789101112131415161718192021$ vim daemonset.yaml apiVersion: apps/v1kind: DaemonSetmetadata: name: filebeat namespace: kube-systemspec: selector: matchLabels: name: filebeat template: metadata: la ...
YAML 语法基础
Write by lyc at 2021-5-14
一、YAML 语法基础
YAML demo博文参考原作者 Kubernetes YAML 学习,提升编写能力
1.YAML 语法特点
大小写敏感
通过缩进表示层级关系
禁止使用 Tab 缩进,只能使用空格键
缩进的空格数目不重要,只要相同层级左对齐
使用 # 表示注释
2.YAML 数据结构
对象: 键值对的字典
数组: 一组按次序排列的列表
纯量: 单个的且不可再分的值
12345678910# 对象animal: pets# 数组- Cat- Dog- Goldfish# 纯量hello
3.引号区别
单引号 '': 特殊字符作为普通字符串处理
双引号 "": 特殊字符作为本身想表示的意思
12345# 单引号name: 'Hi,\nTom'# 双引号name: "Hi,\nTom"
4.内置类型列表
YAML允许使用单个感叹号 ! 强制转换数据类型
单叹号通常是自定义类型,双感叹号 !! 是内置类型
12345money: !!str ...
kubernetes Taint污点 与 Tolerations 污点容忍
Write by lyc at 2021-11-1Kubernetes 污点和容忍度
kubernetes Taint污点 与 Tolerations 污点容忍1.Taint 污点 与 Tolerations 污点容忍
Taints 避免 Pod 调度到特定的 node 上
Tolerations 允许 Pod 调度到特有的 Taints 的 node 上
应用场景:
专用节点:根据业务线将 node 分组管理,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配
配备特殊硬件:部分 node 配有SSD硬盘、GPU,希望在默认情况下不调度该节点,只有配备了污点容忍才允许分配
基于 Taint 的驱逐。Kubernetes 基于污点的驱逐
2.Taint 配置污点12345678910111213# 为节点配置一个污点$ kubectl taint node ${NODE_NAME} key1=value1:[effect]# 删除节点的一个污点$ kubectl taint node ${NODE_NAME} key:[eff ...
kubernetes Pod resources 资源配额
Write by lyc at 2021-5-13
kubernetes Pod resources 资源配额Kubernetes 会根据 resources.request 的值去查找集群中是否有足够资源的 Node 来调度 Pod
1.requests 与 limitsresources.requests 创建 Pod 所需的最小资源配额,Pod 被创建会立即从总资源中分配出去
resources.requests.cpu CPU单位 1000m 或浮点数 1.0 为 1个 CPU
resources.requests.memory 内存单位 512Mi, 1024 Mi
resources.limits Pod 最大允许使用的资源配额
resources.limits.cpu
resources.limits.memory
12345678910111213141516$ vim pod-resource.yamlapiVersion: v1kind: Podmetadata: name: pod-resource spec: containers: - n ...
Kubernetes secret 存储凭据
Write by lyc at 2021-5-12Kubernetes secret
Kubernetes secret 存储凭据K8S Secret 是什么?
Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 将这些信息放在 Secret 中比放在 Pod 的定义或者 容器镜像 中来说更加安全和灵活。
Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。
Secret 需要注意 base64 编解码:
Secret 对象的名称必须是合法的 DNS 子域名。
在为创建 Secret 编写配置文件时,你可以设置 data 与/或 stringData 字段。 data 和 stringData 字段都是可选的。
data 字段中所有键值都必须是 base64 编码的字符串。12345# base64编码$ echo "" | base64# base64解码$ echo "" | base64 -d
如果不希望执行这种 base64 字符串 ...
kubernetes configmap 存储配置文件
Write by lyc at 2021-5-12
kubernetes configmap 存储配置文件1.ConfigMap 介绍
Kubernetes ConfigMap
ConfigMap 是 K8S 资源对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将您的环境配置信息和 容器镜像 解耦,便于应用配置的修改。
ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷 或者使用独立的数据库或者文件服务。
创建 ConfiMap 后,数据实际会存储在 k8s 中 Etcd,然后通过创建 Pod 时引用该数据。
Pod 使用 ConfigMap 数据有两种方式:
变量注入
数据卷挂载
2.ConfigMap 对象创建1234567891011121314151617---apiVersion: v1kind: ConfigMapmetadata: name: co ...
二进制部署kubernetes v1.20集群
Write by lyc at 2021-5-10kubernetes 官网kubernetes 官方文档kubernetes 二进制包下载参考原文作者 李振良OK 搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
一、服务器整体规划1.服务器规划先部署单 Master 架构,而后再增加 Master2 以及 Nginx 高可用组成多 Matser 架构
节点角色
hostname
IP
操作系统
部署服务
Master1
k8s-master1
192.168.99.101
CentOS 7.9
etcd,docker,apiserver,kube-controller-manager,kube-scheduler,kubelet,kube-proxy
Node1
k8s-node1
192.168.99.102
CentOS 7.9
etcd,docker,kubelet,kube-proxy
Node2
k8s-node2
192.168.99.103
CentOS 7.9
etcd,docker,kubelet,kube-pr ...
keepalived+nginx 高可用
Write by lyc at 2021-05-10
1.Master Nginxkeepalived + nginx kube-apiserver高可用配置案例
Master Nginx keepalived.conf1234567891011121314151617181920212223242526272829$ vim /usr/local/keepalived/etc/keepalived/keepalived.confglobal_defs { router_id test_k8s_nginx1}vrrp_script check_nginx { script "/usr/local/keepalived/etc/keepalived/check_nginx.sh"}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 56 priority 100 advert_int 1 ...
由binlog恢复一行误删数据的故障记录
Write by lyc at 2021-4-28
由binlog恢复一行误删数据的故障记录1.故障背景程序或编辑人为的误删了mysql数据表的一行数据,导致线上某个业务异常。
业务方十万火急的过来请运维们帮忙恢复误删的那一行数据。
2.关键信息落实此时作为运维的我们需要向对方落实几个关键问题:
数据库实例, database名, tables名
误删行 主键ID
删除准确时间点
删除的sql语句
12345# 获得的信息如下1. 数据库信息:xxx.xxx.xxx.xxx:3306, database1, tables12. 主键:id=862853. 删除准确时间点:2021-04-27 18:20:544. 删除的sql语句:无
业务敏感关键字用 xxx 代替
3.导出 binlog先缩小 binlog记录范围先导出时间大范围所覆盖的 binlog 文件 mysql-bin.002194
再逐步缩小查询覆盖范围导出,先覆盖故障 10分钟 前后的 binlog 文件 1.sql
1$ mysqlbinlog -v --base64-output=decode-rows ...