文章 90
评论 0
浏览 575569
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集群通信,需要一个上下文配置文件....

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; 分布式设计:同一文件系统可在上千台服务器同时挂载,高性能并发读写,共享数据; 强一致性:确认的文件修改会在所有服务器上立即可见,保证强一致性; 强悍性能:毫....

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

Job&CronJob

Job&CronJob

一、Job&CronJob介绍 1.1 Job介绍 官方介绍:https://kubernetes.io/zh/docs/concepts/workloads/controllers/job/ Job 会创建一个或者多个 Pods,并将继续重试Pods的执行,直到指定数量的 Pods 成功终止。 随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pods。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。 一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。 你也可以使用 Job 以并行的方式运行多个 Pod。 使用场景:一般用于部署服务时执行初始化操作,一般只需要部署新服务时才会进行创建,执行完毕后一般就没有用了。 1.2 CronJob介绍 官方介绍:https://kub....

k8s存储入门

k8s存储入门

一、Volumes介绍 官方文档:https://kubernetes.io/zh/docs/concepts/storage/volumes/ Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时,各个容器可能需要共享一些文件。Kubernetes Volume可以解决这两个问题。一些需要持久化数据的程序才会用到Volumes,或者一些需要共享数据的容器需要volumes。 日志收集的需求:需要在应用程序的容器里面加一个sidecar,这个容器是一个收集日志的容器,比如filebeat,它通过volumes共享应用程序的日志文件目录。 Docker也有卷的概念,但是在Docker中卷只是磁盘上或另一个Container中的目录,其生命周期不受管理。虽然目前Docker已经提供了卷驱动程序,但是功能非常有限,例如从Docker 1.7版本开始,每个Container只允许一个卷驱动程序,并且无法将参数传递给卷。 另一方面,Kubernetes....

生而为人