在 K8s 中部署主从结构的 MySQL 服务
StatefulSet 旨在与有状态的应用及分布式系统一起使用。然而在 Kubernetes 上管理有状态应用和分布式系统是一个宽泛而复杂的话题。为了演示 StatefulSet 的基本特性,并且不使前后的主题混淆。本文使用 StatefulSet 控制器运行一个有状态的应用程序,主从结构的mysql8数据库。
介绍RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、名字、启停顺序等都是随机分配的,而StatefulSet,管理所有有状态的服务。
StatefulSet为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,一定的启停顺序,在StatefulSet中,Pod名字称为网络标识(hostname),还必须要用到共享存储。
在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service。headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的节点 ...
优化Docker镜像的10个技巧
什么是 docker?Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。
要构建镜像,docker 使用一个名为 Dockerfile 的文件。Dockerfile 是一个包含许多指令(RUN、COPY、EXPOSE 等)的文件。成功执行这些命令后,docker 将创建一个镜像供我们在任何地方使用。
为什么要减小 docker 镜像大小?
安装不必要的软件包会增加攻击面,从而增加安全风险。
镜像传输需要更多时间。
部署大镜像需要更多时间。
我们必须以某种方式创建我们的 Dockerfile,以便从该 Dockerfile 构建的镜像在大小方面得到优化。
在本文中,我们将讨论 10 种减少 docker 镜像大小的有效方法。
1:最小化镜像层我们可以减少 Dockerfile 中的层数。
dockerfile 中的每个 FROM、RUN、COPY 命令都会创建一个单独的层,并增加镜像的整体大小和构建时间。
要减小 docker 镜像大小,请在单个 RUN 或 COPY 指令中执行多个命令来最小化 Doc ...
Kubernetes网络异常排查思路
Overview本文将引入一个思路:“在 Kubernetes 集群发生网络异常时如何排查”。文章将引入 Kubernetes 集群中网络排查的思路,包含网络异常模型,常用工具,并且提出一些案例以供学习。
Pod 常见网络异常分类
网络排查工具
Pod 网络异常排查思路及流程模型
CNI 网络异常排查步骤
案例学习
Pod 网络异常网络异常大概分为如下几类:
网络不可达,主要现象为 ping 不通,其可能原因为:
源端和目的端防火墙(iptables, selinux)限制
网络路由配置不正确
源端和目的端的系统负载过高,网络连接数满,网卡队列满
网络链路故障
端口不可达:主要现象为可以 ping 通,但 telnet 端口不通,其可能原因为:
源端和目的端防火墙限制
源端和目的端的系统负载过高,网络连接数满,网卡队列满,端口耗尽
目的端应用未正常监听导致(应用未启动,或监听为 127.0.0.1 等)
DNS 解析异常:主要现象为基础网络可以连通,访问域名报错无法解析,访问 IP 可以正常连通。其可能原因为
Pod 的 DNS 配置不正确
DNS 服务异常
pod ...
kubectl的多样用法
简述kubectl是K8s官方附带的命令行工具, 可以方便的操作K8s集群. 这篇文章主要介绍一些kubectl的别样用法, 希望读者有基础的K8s使用经验.
打印当前使用的API123# kubectl 的主要作用就是与ApiServer进行交互, 而交互的过程, 我们可以通过下面的方式来打印, # 这个命令尤其适合调试自己的api接口时使用.kubectl get ns -v=9
按状态筛选容器以及删除1234567891011121314151617181920212223242526272829kubectl get pods --all-namespaces --field-selector status.phase=Pending -o json | \ jq '.items[] | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | \ xargs -n 1 bash -c# 这个命令要拆开来看# 首先, 获取所有ns中状态为Pending ...
K8S OOM 和 CPU 节流
介绍使用 Kubernetes 时,内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题。
这是为什么?
云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与您的云成本直接相关。
通过 limits 和 requests ,您可以配置 pod 应如何分配内存和 CPU 资源,以防止资源匮乏并调整云成本。
如果节点没有足够的资源, Pod 可能会通过抢占或节点压力被驱逐。
当一个进程运行内存不足 (OOM) 时,它会被终止,因为它没有所需的资源。
如果 CPU 消耗高于实际限制,进程将开始节流。
但是,如何主动监控 Kubernetes Pod 到达 OOM 和 CPU 节流的距离有多近?
Kubernetes OOMPod 中的每个容器都需要内存才能运行。
Kubernetes limits 是在 Pod 定义或 Deployment 定义中为每个容器设置的。
所有现代 Unix 系统都有一种方法来终止进程,以防它们需要回收内存。这将被标记为错误 137 或OOMKilled.
1234567State: Running Starte ...
CoreDNS 在 K8S 中的作用及监控
CoreDNS 在 K8S 中的作用CoreDNS 是 Kubernetes 环境的DNS add-on[1]组件。它是在控制平面节点中运行的组件之一,使其正常运行和响应是 Kubernetes 集群正常运行的关键。学习如何监控 CoreDNS,以及它最重要的指标是什么,对于运维团队来说是必须的。
DNS 是每个体系结构中最敏感和最重要的服务之一。应用程序、微服务、服务、主机……如今,万物互联,并不一定意味着只用于内部服务。它也可以应用于外部服务。DNS 负责解析域名并关联内部或外部服务和 PodIP。维护 Pod 的 DNS 记录是一项关键任务,尤其是涉及到临时 Pod 时,IP 地址可以在没有警告的情况下随时更改。
如果您在 Kubernetes 中运行您的工作负载,并且您不知道如何监控 CoreDNS,请继续阅读本文:如何使用 Prometheus 来抓取 CoreDNS 指标,您应该检查哪些指标,以及它们的含义。
在本文中,我们将涵盖以下主题:
什么是 Kubernetes CoreDNS?
如何在 Kubernetes 中监控 CoreDNS?
监控 Kubernetes ...
kubernetes各名词缩写
kubernetes各名词缩写
NAME
SHORTNAMES
APIGROUP
NAMESPACED
KIND
bindings
true
Binding
componentstatuses
cs
false
ComponentStatus
configmaps
cm
true
ConfigMap
endpoints
ep
true
Endpoints
events
ev
true
Event
limitranges
limits
true
LimitRange
namespaces
ns
false
Namespace
nodes
no
false
Node
persistentvolumeclaims
pvc
true
PersistentVolumeClaim
persistentvolumes
pv
false
PersistentVolume
pods
po
true
Pod
podtemplates
true
PodTemplate
replicationcontrollers
rc
...
用 Ansible 简化 K8S 部署
一、概述前面我写了关于k8s环境部署的几篇文章,k8s部署还是比较麻烦的,所以是有必要考虑一键部署的方案,这里借助ansible playbook来实现k8s环境的一键部署,实现快速部署的目的。
节点信息
主机名
IP
角色
操作系统
local-168-182-110
192.168.182.110
master,ansible
centos7
local-168-182-111
192.168.182.110
master
centos7
local-168-182-112
192.168.182.110
master
centos7
local-168-182-113
192.168.182.110
node
centos7
k8s 架构图:
基于ansible部署k8s流程图:
二、Ansible 部署123yum -y install epel-releaseyum -y install ansibleansible --version
1)开启记录日志配置文件:/etc/ansible/ansible.cfg
123vi /etc/ansi ...
Nginx高可用方案
准备工作192.168.16.128
192.168.16.129
两台虚拟机。安装好Nginx
安装Nginx更新yum源文件:
12rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装Nginx:
1yum -y install nginx
操作命令:
12systemctl start nginx; #启动Nginxsystemctl stop nginx; #停止Nginx
什么是高可用?高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。
解决的问题?在 ...
Linux SSH 登录错误超时次数自动加入ip黑名单
Linux 系统SSH 登录失败的内容会记录到/var/log/secure文件,通过查找关键字 Failed,可以定位到这些异常的IP地址,比如:
12[root@ghost ~]# cat /var/log/secure |grep Failed #查看所有的异常IP[root@ghost ~]# cat /var/log/secure |grep 181.204.166.58 #查看指定的异常IP
相关文件 :/etc/hosts.deny 禁止哪些IP访问主机:
1[root@ghost ~]# cat /etc/hosts.deny
因此,我们只需要从/var/log/secure文件中提取IP地址,如果次数达到10次则将该IP写到 /etc/hosts.deny中,禁止这些IP访问主机。
脚本如下secure_ssh.sh:
123456789101112131415[root@ghost tmp]# vim secure_ssh. ...