文章 94
评论 0
浏览 455141
kubernetes集群镜像

kubernetes集群镜像

一、kubernetes集群镜像相关内容 kubernetes中每个pod的运行都需要指定相关镜像,kubelet在收到创建pod的命令后会进行拉取相关的镜像,镜像的拉取有相应的拉取策略,如下 1.1 镜像拉取策略 pod中容器的imagePullPolicy和镜像的标签会影响kubelet尝试拉取(下载)指定的镜像。 以下列表包含了 imagePullPolicy 可以设置的值,以及这些值的效果: IfNotPresent 只有当镜像在本地不存在时才会拉取。 Always 每当 kubelet 启动一个容器时,kubelet 会查询容器的镜像仓库, 将名称解析为一个镜像。 如果 kubelet 有一个容器镜像,并且对应的摘要已在本地缓存,kubelet 就会使用其缓存的镜像; 否则,kubelet 就会使用解析后的摘要拉取镜像,并使用该镜像来启动容器。 Never Kubelet 不会尝试获取镜像。如果镜像已经以某种方式存在本地, kubelet 会尝试启动容器;否则,会启动失败。 默认镜像拉取策略 当你(或控制器)向 API 服务器提交一个新的 Pod 时,你的集群....

kubectl备忘录

kubectl备忘录

一、kubectl备忘录 1.1 kubectl的bash自动补全 在bash中设置当前shell的自动补全,需先安装bash-completion包否则会报错 #方法1:临时生效退出重新登录会失效 source <(kubectl completion bash) #方法2:永久生效写入到/etc/profile文件中,这样会导致所有用户都会生效,如果只给一个用户生效请写到~/.bashrc文件中 echo 'source <(kubectl completion bash)' >>/etc/profile 您还可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用 cat ~/.bashrc source <(kubectl completion bash) alias k=kubectl #别名 complete -F __start_kubectl k #设置completion #执行命令如下 k get pod 1.2 kubectl认证文件 kubectl客户端工具与k8s集群通信,需要一个上下文配置文件....

ansible之k8s模块

ansible之k8s模块

一、模块安装 这里使用centos7进行说明。 yum install python2-kubernetes python-openshift ansible 验证 ansible-doc k8s 二、模块使用详解 前提:需要在主机安装kubectl命令并且可以正常执行连接集群 2.1 k8s模块 可以用来创建删除k8s中各种资源 注意:模块具有幂等性,如果监测到资源以及存在则不会进行创建,判断依据为是否有这个相同名称的资源。如果资源内容进行修改资源存在不会进行更新。 1.直接创建 - hosts: localhost tasks: - name: create namespace k8s: #使用k8s模块 kubeconfig: /root/.kube/config #k8s连接的认证文件,如果不指定默认值为~/.kube/config name: zhangzhuo #创建资源名称 api_version: v1 #资源的api kind: Namespace #资源类型 state: present #动作创建present,删除absent 2.使用definition....

Windows搭建k8s实验环境

Windows搭建k8s实验环境

一、Workstation的容器环境 依赖项: Workstation Pro 17 Windows 10 1809或更高版本 需要互联网以及科学上网 在新版本的Workstation中官方提供了一个vctl工具可进行容器的启动与管理,与docker功能基本相同,此外vctl还提供了KIND支持,以便KIND可以使用vctl容器作为节点来运行本地Kubernetes 集群。 相关的可执行文件捆绑在Workstation Pro应用程序中,可在C:\Program Files (x86)\VMware\VMware Workstation文件夹中找到这些文件。 以下部分简要说明了vctl命令行实用程序的三个可执行文件 containerd.exe:这是一个在后台运行的运行时守护进程。必须先启动containerd守护进程,然后才能运行任何与容器相关的操作。要启动该守护进程,请使用vctl system start命令,要停止该守护进程,请使用vctl system stop命令。 containerd-shim-crx-v2.exe:启动新容器时,将启动一个新的 container....

OpenKruise插件

OpenKruise插件

一、OpenKruise介绍 OpenKruise是一个基于Kubernetes的扩展套件,他提供的绝大部分能力都是基于CRD扩展来定义,他们不存在任何外部依赖,可以运行在任意纯净的Kubernetes集群中。简单来说OpenKruise对于Kubernetes是一个辅助扩展角色。Kubernetes自身已经提供了一些应用部署管理的功能,比如一些基础工作负载。 但对于大规模应用与集群的场景,这些基础功能是远远不够的。OpenKruise可以被很容易地安装到任意Kubernetes集群中,它弥补了Kubernetes在应用部署、升级、防护、运维等领域的不足。 OpenKruise包含了一系列增强版本的Workloads(工作负载),比如CloneSet、Advanced StatefulSet、Advanced DaemonSet、BroadcastJob等,它们不仅支持类似于 Kubernetes 原生 Workloads 的基础功能,还提供了如原地升级、可配置的扩缩容/发布策略、并发操作等。其中,原地升级是一种升级应用容器镜像甚至环境变量的全新方式,它只会用新的镜像重建 Pod 中....

Coredns

Coredns

一、Coredns简介 官方文档:https://coredns.io/plugins/ CoreDNS是一个DNS服务器,它是用Go编写的。CoreDNS与其他DNS服务器不同,因为它非常灵活几乎所有功能都包含到插件中。 kubernetes中使用coredns提供service资源名称的域名解析,使用kubernetes插件。 当然coredns还有许多的实用插件,官方网站:https://coredns.io/plugins/ 二、Coredns使用 2.1 Coredns配置文件 .:53 { hosts { 10.0.0.1 example.org fallthrough } forward . 114.114.114.114:53 #上面无法处理的请求会传到这里 prometheus loadbalance log } 2.2 插件 1.errors 在查询处理过程中遇到的任何错误都将打印到标准输出。特定类型的错误可以在一段时间内合并和打印一次。 基本语法: errors 2.health 启用进程范围的健康探测接口。当CoreDNS启动并运行时,它会返回200 OK ....

k8s网络策略

k8s网络策略

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

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....

基于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....

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....

生而为人