文章 86
评论 0
浏览 124460
k8s网络策略

k8s网络策略

一、NetworkPolicy基础概念 如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。 NetworkPolicies 适用于一端或两端与 Pod 的连接,与其他连接无关。 Pod 可以通信的 Pod 是通过如下三个标识符的组合来辩识的 其他被允许的 Pods(例外:Pod 无法阻塞对自身的访问) 被允许的名字空间 IP 组块(例外:与 Pod 运行所在的节点的通信总是被允许的, 无论 Pod 或节点的 IP 地址) 配置前置条件 网络策略通过网络插件来实现。要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。 创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的。使用支持网络策略的网络插件才可以正常使用网络策略如calico。 Pod 隔离的两种类型 Pod 有两种隔离: 出口的隔离和入口的隔离。它们涉及到可以建立哪些连接。 这里的“隔离”不是绝对的,而是意味着“有一些限制”。 另外的,....

Restic文件备份工具

Restic文件备份工具

一、Restic介绍 Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。Restic 使用加密技术来保证你的数据安全性和完整性,可以将本地数据加密后传输到指定的存储。Restic 同样支持增量备份,可随时备份和恢复备份。Restic 支持大多数主流操作系统,比如:Linux、macOS、Windows 以及一些较小众的操作系统 FreeBSD 和 OpenBSD 等。 官方文档:https://restic.readthedocs.io/en/stable/index.html Restic优势 Restic 每次备份都会生成一个快照,记录当前时间点的文件结构,可以找回特定时间点的文件。通常可以实现在不清理快照时同一个文件的版本记录。 Restic 配置信息直接写在仓库,只要有仓库密码,在任何安装了Restic的计算机上都可以操作仓库。 Restic 面向的是文件备份和加密,文件先加密再传输备份,而且是增量备份,即每次只备份变化的部分。 Restic 可以备份数据到不同的类型的数据仓库如本地存储、SFTP、Minio等。 Restic 支持多种操作系统....

postgres数据库备份

postgres数据库备份

一、使用Postgres自带工具进行备份 pg数据库远程备份命令pg_dump 命令参数介绍 dbname #指定要被转储的数据库名。如果没有指定,将使用环境变量PGDATABASE。如果环境变量也没有设置,则使用指定给该连接的用户名 -h #连接数据库IP地址 -p #连接数据库端口 -U #连接数据库用户名 -W #连接密码 --create #备份文件中生存数据库创建命令 备份执行命令 pg_dump 数据库名称 -h 地址 -p 端口 -U postgres >文件名称.sql 恢复命令 psql -h 地址 -p 端口 -U postgres -f eg_app.sql 备份脚本 [17:46:05 root@centos7 ~]#cat pg_backup.sh #!/bin/bash PG_HOST="10.202.63.55" PG_PORT="5000" PG_USER="postgres" PG_PWD="Gridsum2022" export export PGPASSWORD=${PG_PWD} databases=$(psql -h ${PG_HO....

Mysql数据备份

Mysql数据备份

xtrabackup工具 官方网站:https://www.percona.com/software/mysql-database/percona-xtrabackup 如果数据库数据量比较大推荐使用xtrabackup工具进行数据备份 1.1 xtrabackup介绍 xtrabackup命令 #常用参数 --user #该选项表示备份账号 --password #该选项表示备份的密码 --port #该选项表示备份数据库的端口 --host #选项表示备份数据库的地址 --socket #该选项表示mysql.sock所在位置,以便备份进程登录mysql。 --defaults-file #该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置 --databases #该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如:"db1 db2",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表。此外,此选项也可以接受一个文件为参数,文件中每....

DevOps自动化构建应用

DevOps自动化构建应用

一、基于k8s相关流水线准备 jenkins使用kubernetes插件可以实现,动态创建流水线相关的任务Pod在流水线执行结束后会删除相应的任务Pod以达到资源的释放。 具体kubernetes的agent使用详解 pipeline { agent { kubernetes { cloud 'kubernetes' //这里需要指定相关jenkins中创建的kubernetes对接信息的名称 slaveConnectTimeout 1200 //超时配置 workspaceVolume emptyDirWorkspaceVolume() //jenkins的工作目录,必须设置起到一个Pod中不同container的目录共享jenkins工作目录 yaml ''' //这里以下都是Pod定义信息 kind: Pod metadata: name: jenkins-agent namespace: jenkins spec: containers: - args: [\'$(JENKINS_SECRET)\', \'$(JENKINS_NAME)\'] image: '192.168.1....

Jenkins的流水线详解

Jenkins的流水线详解

一、什么是流水线 jenkins有2中流水线分为声明式流水线与脚本化流水线,脚本化流水线是jenkins旧版本使用的流水线脚本,新版本Jenkins推荐使用声明式流水线。文档只介绍声明流水线。 1.1 声明式流水线 在声明式流水线语法中,流水线过程定义在 Pipeline{}中,Pipeline 块定义了整个流水线中完成的所有工作,比如 参数说明: agent any:在任何可用的代理上执行流水线或它的任何阶段,也就是执行流水线过程的位置,也可以指定到具体的节点 stage:定义流水线的执行过程(相当于一个阶段),比如下文所示的 Build、Test、Deploy, 但是这个名字是根据实际情况进行定义的,并非固定的名字 steps:执行某阶段具体的步骤。 //Jenkinsfile (Declarative Pipeline) pipeline { agent any stages { stage('Build') { steps { echo 'Build' } } stage('Test') { steps { echo 'Test' } } stage('Deploy') {....

基于k8s的DevOps环境构建

基于k8s的DevOps环境构建

一、基于k8s的DevOps环境构建 IP地址配置服务名称 192.168.10.114C/8G/50Gk8s-master 192.168.10.124C/8G/50Gk8s-node1 192.168.10.134C/8G/50Gk8s-node2 192.168.10.144C/4G/50Ggitlab 192.168.10.154C/4G/50Gharbor 192.168.10.164C/4G/50Gjenkins 二、下载并部署 gitlab 1.gitlab 安装及使用 安装包下载地址:https://packages.gitlab.com/gitlab/gitlab-ce rpm 包国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/ ubuntu 国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/ 2.下载安装gitlab 需事先下载安装包,准备一台4G内存服务器。 #这里事先从清华源下载最新版gitlab #内....

Longhorn云原生存储

Longhorn云原生存储

一、Longhorn基础介绍 官方github:https://github.com/longhorn/longhorn 官方网站:https://longhorn.io Longhorn是一个轻量级、可靠且功能强大的分布式块存储系统,适用于 Kubernetes。使用容器和微服务实现分布式块存储。Longhorn 为每个块储存设备卷创建一个专用的存储控制器,并在存储在多个节点上的多个副本之间同步复制该卷。存储控制器和副本本身是使用 Kubernetes 编排的。Longhorn 是免费的开源软件。它最初由Rancher Labs开发,现在作为云原生计算基金会的孵化项目进行开发。 Longhorn 支持以下架构: AMD64 ARM64(实验性) 使用Longhorn,您可以: 使用 Longhorn 卷作为 Kubernetes 集群中分布式有状态应用程序的持久存储 将您的块存储分区为 Longhorn 卷,以便您可以在有或没有云提供商的情况下使用 Kubernetes 卷。 跨多个节点和数据中心复制块存储以提高可用性 将备份数据存储在外部存储(如 NFS 或 AWS S3)中....

JuiceFS文件系统

JuiceFS文件系统

一、JuiceFS介绍 官方网站:https://juicefs.com/ github:https://github.com/juicedata/juicefs JuiceFS 是一款面向云原生设计的高性能共享文件系统,在 Apache 2.0 开源协议下发布。提供完备的POSIX兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。JuiceFS 采用「数据」与「元数据」分离存储的架构,从而实现文件系统的分布式设计。使用 JuiceFS 存储数据,数据本身会被持久化在对象存储(例如,Amazon S3),相对应的元数据可以按需持久化在 Redis、MySQL、TiKV、SQLite 等多种数据库中。 核心特性 POSIX 兼容:像本地文件系统一样使用,无缝对接已有应用,无业务侵入性; 云原生:通过 CSI Driver 轻松地在 Kubernetes 中使用 JuiceFS; 分布式设计:同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据; 强一致性:确认的文件修改会在所有服务器上立即可见,保证强一致性; 强悍性能:毫....

k8s的playbook部署脚本

k8s的playbook部署脚本

ansible-k8s脚本使用说明 适用系统centos7 x86架构 本脚本采用anisble-playbook进行编写,全程实现离线二进制安装k8s集群,可以进行简单自定义配置,集群规模可自行进行设置,本脚本只适合k8s学习人员快速搭建二进制集群,内部添加了一些k8s集群的常用插件,nfs存储类插件,velero备份插件,dashboard插件,loki日志收集插件,calico网络插件,ingress-nginx插件,kube-prometheus监控项目集成,如果有其他感觉好用的插件作者可以根据情况帮助集成,添加到脚本当中。 不合适在生产环境使用!!!!不合适在生产环境使用!!!!不合适在生产环境使用!!!! 如有疑问联系方式微信:18586178046 使用说明如下 1.下载离线包 链接:https://pan.baidu.com/s/1k45Mj7MgsjJubUKOszoM5A 提取码:mjt5 分享失效请联系作者 [21:56:30 root@centos7 ~]#ll total 3404968 -rw-r--r-- 1 root root 541179502 May....

Playbook详解

Playbook详解

一、Playbook基础知识 1.1 playbook介绍 playbook 剧本是由一个或多个"play"组成的列表 play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。Task 实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作 Playbook 文件是采用YAML语言编写的 ansible-playbook重要参数 -i:指定主机清单文件 -e:指定变量文件 ANSIBLE_CONFIG:环境变量,用于指定自己的ansible配置文件 #命令执行示例 ansible-playbook ../playbooks/9.nfs.yml -i ../config/hosts -e "@../config/config.yml" 1.2 ansible配置文件 [19:28:32 root@nexus ansible-k8s]#cat config/ansible.cfg [defaults] inventory = /etc/ansible/....

运维自运化之ANSIBLE

运维自运化之ANSIBLE

一、Ansible 介绍和架构 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案? 1.1 Ansible发展史 作者:Michael DeHaan( Cobbler 与 Func 作者) ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布1.5亿美元收购 官网:https://www.ansible.com/ 官方文档:https://docs.ansible.com/ 1.2 Ansible 特性 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块 Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块 基于Python....

CNI插件之Calico

CNI插件之Calico

一、Calico基础介绍 官方网站:https://www.tigera.io/project-calico/ Calico 是一个 CNI 插件,为 Kubernetes 集群提供容器网络。它使用 Linux 原生工具来促进流量路由和执行网络策略。它还托管一个 BGP 守护进程,用于将路由分发到其他节点。Calico 的工具作为 DaemonSet 在 Kubernetes 集群上运行。这使管理员能够安装 Calico, kubectl apply -f ${CALICO_MANIFESTS}.yaml而无需设置额外的服务或基础设施。 Calico部署建议: 1.使用 Kubernetes 数据存储。 2.安装 Typha 以确保数据存储可扩展性。 3.对单个子网集群不使用封装。 4.对于多子网集群,在 CrossSubnet 模式下使用 IP-in-IP。 5.根据网络 MTU 和选择的路由模式配置 Calico MTU。 6.为能够增长到 50 个以上节点的集群添加全局路由反射器。 7.将 GlobalNetworkPolicy 用于集群范围的入口和出口规则。通过添加 names....

k8s之监控告警

k8s之监控告警

一、k8s监控架构介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。 Prometheus Server:Prometheus 生态最重要的组件,主要用于抓取和存储时间 序列数据,同时提供数据的查询和告警策略的配置管理; Alertmanager:Prometheus 生态用于告警的组件,Prometheus Server 会将告警发送给 Alertmanager,Alertmanager 根据路由配置,将告警信息发送给指定的人或组。Alertmanager 支持邮件、Webhook、微信、钉钉、短信等媒介进行告 警通知; Grafana:用于展示数据,便于数据的查询和观测; Push Gateway:Prometheus 本身是通过 Pull 的方式拉取数据,但是有些监控数 据可能是短期的,如果没有采集数据可能会出现丢失。Push Gatew....

k8s之Ingress详解

k8s之Ingress详解

一、Ingress介绍 ingress主要解决集群中东西流量的访问也就是外部客户端访问k8s内部服务的流量,具体架构图如下 k8s如果使用Ingress功能,需要安装Ingress控制器,直接创建Ingress规则是没有任何效果的,官方维护的Ingress控制器有: AWS GCE nginx Ingress 控制器 二、Ingress控制器安装 2.1 安装Ingress nginx控制器 需要首先安装helm管理工具:https://github.com/helm/helm Ingress nginx控制器官方:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm 首先安装helm [20:05:16 root@master01 ~]#ls helm-v3.7.2-linux-amd64.tar.gz [20:05:40 root@master01 ~]#tar xf helm-v3.7.2-linux-amd64.tar.gz [20:05:59 root@master01 ~]#cp linux-amd....

k8s日志收集

k8s日志收集

一、k8s日志收集介绍 1.1 Pod日志收集 应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的。而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中。对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件之中,同样我们也可以通过 docker logs 或者 kubectl logs 来查看到对应的日志信息。 但是,通常来说容器引擎或运行时提供的功能不足以记录完整的日志信息,比如,如果容器崩溃了、Pod 被驱逐了或者节点挂掉了,我们仍然也希望访问应用程序的日志。所以,日志应该独立于节点、Pod 或容器的生命周期,这种设计方式被称为 cluster-level-logging,即完全独立于 Kubernetes 系统,需要自己提供单独的日志后端存储、分析和查询工具。 k8s中大多数的Pod日志被输出到控制台,在宿主机的文件系统每个Pod会创建一个存放日志的文件夹/var/log/pods/这里会存放所有....

k8s高级调度污点与容忍

k8s高级调度污点与容忍

一、Taint与Toleration 官方文档:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/taint-and-toleration/ 生产环境中的Pod并非随便调度,某些node节点可能并不一样,比如GPU节点一般比较昂贵,并不是所有Pod都需要GPU资源,所有需要管理员进行控制。节点亲和性是Pod 的一种属性,它使 Pod 被吸引到一类特定的节点(这可能出于一种偏好,也可能是硬性要求)。 污点(Taint)则相反它使节点能够排斥一类特定的 Pod。容忍度(Toleration)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上。 污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod,是不会被该节点接受的。 设计理念:Taint在一类服务器上打上污点,让不能容忍这个污点的Pod不能部署在打了污点的服务器上。Toleration是让Pod容忍节点上配置的污点,可以让....

helm仓库详解

helm仓库详解

一、Helm仓库介绍 Helm在k8s 中的作用类似与centos中的yum工具,Chart代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。所以生成的Chart也需要Repository(仓库)用来提供Chart的统一管理。 Helm仓库的构成,仓库中主要的的文件有俩部分分别是Chart的压缩包以及index.yaml文件,最重要的文件其实是index.yaml文件,他的作用主要是为整个仓库的Chart包提供索引,以供helm客户端进行读取检索仓库中有那些Chart包,在helm工具第一次添加仓库时客户端会把这个文件下载到本地,如果仓库中新添加了Chart包,客户端必须使用helm repo update进行仓库的更新以获取最新的index.yaml文件。如果自行使用http服务进行仓库的搭建需要手动维护index.yaml文件。文件的生成命令为helm repo index。 这里介绍俩个Reposit....

k8s细颗粒度权限控制RBAC

k8s细颗粒度权限控制RBAC

一、RBAC介绍 官方文档:https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/ 基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对 计算机或网络资源的访问的方法。RBAC 鉴权机制使用 rbac.authorization.k8s.io API 组来驱动鉴权决定,允许你通过 Kubernetes API 动态配置策略。要启用 RBAC,在启动api-server服务器时将 --authorization-mode 参数设置为一个逗号分隔的列表并确保其中包含 RBAC。 --authorization-mode=Example,RBAC 1.1 RBAC中的API对象 RBAC API 声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。你可以像使用其他 Kubernetes 对象一样, 通过类似 kubectl 这类工具创建对象, 或修改对象。 1.Role 和 ClusterRole RB....

k8s调度准入控制

k8s调度准入控制

一、ResourceQuota 官方文档:https://kubernetes.io/zh/docs/concepts/policy/resource-quotas/ 当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。资源配额是帮助管理员解决这一问题的工具。资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。 ResourceQuota作用于namespace,限制命名空间可用的资源。创建在那个命名空间就对这个命名空间生效。 示例文件 apiVersion: v1 kind: ResourceQuota metadata: name: resource-test labels: app: resourcequota spec: hard: #以下为常用的配置,其他配置请查看官方文档 pods: 50 #Pod的最大数量 requests.cpu: 0.5 #请求最大的cpu reques....

生而为人