文章 86
评论 0
浏览 124464
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....

TLS bootstrapping原理详解

TLS bootstrapping原理详解

一、TLS启动引导介绍 官方文档:https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/ 启动引导这些组件的正常过程,尤其是需要证书来与 kube-apiserver 安全通信的工作节点,可能会是一个具有挑战性的过程,因为这一过程通常不受 Kubernetes 控制, 需要不少额外工作。 这也使得初始化或者扩缩一个集群的操作变得具有挑战性。 为了简化这一过程,从 1.4 版本开始,Kubernetes 引入了一个证书请求和签名 API 以便简化此过程。 1.1 kubelet 初始化过程 当工作节点启动时,kubelet 执行以下操作 寻找自己的 kubeconfig 文件 检索 API 服务器的 URL 和凭据,通常是来自 kubeconfig 文件中的 TLS 密钥和已签名证书 尝试使用这些凭据来与 API 服务器通信 假定 kube-apiserver 成功地认证了 kubelet 的凭据数据,它会将 kubelet 视为 一个合法的节点并开....

kubernetes集群备份与恢复

kubernetes集群备份与恢复

一、k8s集群备份与恢复 k8s集群服务所有组件都是无状态服务,所有数据都存储在etcd集群当中,所以为保证k8s集群的安全可以直接备份etcd集群数据,备份etcd的数据相当于直接备份k8s整个集群。 但是备份etcd及备份整个集群,有些场景比如迁移服务,只想备份一个namespace,就无法使用备份etcd的方式来备份,所以我们这里引用velero工具,Velero(以前称为Heptio Ark)可以为您提供了备份和还原Kubernetes集群资源和持久卷的能力,你可以在公有云或本地搭建的私有云环境安装Velero。 二、k8s备份-备份etcd etcd有多个不同的API访问版本,v1版本已经废弃,etcd v2 和 v3 本质上是共享同一套 raft 协议代码的两个独立的应用,接口不一样,存储不一样,数据互相隔离。也就是说如果从 Etcd v2 升级到 Etcd v3,原来v2 的数据还是只 能用 v2 的接口访问,v3 的接口创建的数据也只能访问通过 v3 的接口访问。 2.1 etcd v2版本数据备份与恢复 备份数据 #V2版本帮助信息 [16:11:16 root@k8....

kubernetes之二进制安装1.24.+版本

kubernetes之二进制安装1.24.+版本

一、基础环境准备 集群规划信息: 主机名称IP地址说明 master01192.168.10.11master节点 master02192.168.10.12master节点 master03192.168.10.13master节点 node01192.168.10.14node节点 node02192.168.10.15node节点 master-lb127.0.0.1:6443nginx代理监听地址 说明: master节点为3台实现nginx进行代理master流量实现高可用,master也安装node组件。 node节点为2台 nginx在所有节点安装,监听127.0.0.1:6443端口 系统使用centos7.X 1.1 基础环境配置 1.所有节点配置hosts cat >>/etc/hosts<<EOF 192.168.10.11 master01 192.168.10.12 master02 192.168.10.13 master03 192.168.10.14 node01 192.168.10.15 node02 EOF ....

ConfigMap&Secret

ConfigMap&Secret

一、ConfigMap 官方文档:https://kubernetes.io/zh/docs/concepts/configuration/configmap/ 1.1 ConfigMap介绍 在微服务架构中,大多数的服务的配置文件都是与服务本身分开的,由统一的配置中心进行管理,服务启动后会到配置中心读取自己的配置文件之后启动服务。Kubernetes中也提供了一个配置文件的api就是configmap。 ConfigMap 将您的环境配置信息和容器镜像解耦,便于应用配置的修改。 注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。 ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,你可能希望考虑挂载存储卷或者使用独立的数据库或者文件服务。 1.2 ConfigMap的创建 创建方式 可以编写yaml文件,使用kubectl命令指定yaml文件进行创建 可以直接使....

Service

Service

一、kubernetes的服务调用 服务的访问分为俩种形式分别是服务之间的调用(南北流量),用户流量的访问(东西流量),k8s中提供的南北流量的解决方法是使用service,东西流量的解决方案是ingress。当然这里只介绍service。 传统架构的南北流量架构图 k8s中使用service的南北流量 Service架构 二、Service资源介绍 Service主要用于Pod之间的通信,由于Pod是一种临时资源可能随时会被调度重建,重建后Pod的IP地址也会进行变化,由于Pod的IP地址不确定性,我们无法使用Pod的IP地址来进行服务的访问,所以k8s中加入了一个service资源用来解决Pod的访问。Service一般会通过选择器选择一个或一组Pod,之后通过iptables或者ipvs的方式进行代理,service的请求会被转发到自己所代理的Pod。service资源创建后只要不进行修改他的IP地址就不会变化相对来说他的IP地址是固定的,k8s中还引用了dns组件用来解析service资源的名称得到他的IP地址,所以集群中访问service,可以直接通过service的名....

HPA

HPA

Horizontal Pod Autoscaler(HAP),是一个Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。 Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性地调整副本控制器或 Deployment 中的副本数量,以使得类似 Pod 平均 CPU 利用率、平均内存利用率这类观测到的度量值与用户所设定的目标值匹配。 一、HAP自动扩缩容 HAP的api版本有三个分别是: HPA v1为稳定版自动水平伸缩,只支持CPU指标,需要安装metrics-server V2为beta版本,分为v2beta1(支持CPU、内存和自定义指标) v2beta2(支持CPU、内存、自定义....

Label与Selector

Label与Selector

Label:对k8s中各种资源进行分类、分组,添加一个具有特别属性的一个标签。 Selector:通过一个过滤的语法进行查找到对应标签的资源 一、Label & Selector 官方文档:https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/ 当Kubernetes对系统的任何API对象如Pod和节点进行“分组”时,会对其添加Label(key=value形式的“键-值对”)用以精准地选择对应的API对象。而Selector(标签选择器)则是针对匹配对象的查询方法。注:键-值对就是key-value pair。 例如,常用的标签tier可用于区分容器的属性,如frontend、backend;或者一个release_track用于区分容器的环境,如canary、production等。 1.1 Label的介绍 label可以给k8s中大多数资源进行标签的定义,主要作用为用于指定对用户有意义且相关的对象的标识属性,但并不对资源工作参数任何影响。 标签是键值对。有效的标签键有两个段....

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集群通信,需要一个上下....

kubernetes之kubeadm安装1.24.+版本

kubernetes之kubeadm安装1.24.+版本

一、基础环境准备 集群规划信息: 主机名称IP地址说明 master01192.168.10.51master节点 master02192.168.10.52master节点 master03192.168.10.53master节点 node01192.168.10.54node节点 node02192.168.10.55node节点 master-lb127.0.0.1:16443nginx组件监听地址 说明: master节点为3台实现高可用,并且通过envoy进行代理master流量实现高可用,master也安装node组件。 node节点为2台 nginx在所有节点安装,监听127.0.0.1:16443端口 系统使用centos7.X 1.1 基础环境配置 1.所有节点配置hosts cat >>/etc/hosts<<EOF 192.168.10.11 master01 192.168.10.12 master02 192.168.10.13 master03 192.168.10.14 node01 192.168.10.15 n....

kubernetes之控制器资源

kubernetes之控制器资源

一、 RC&RS Replication Controller(复制控制器,RC)和ReplicaSet(复制集,RS)是两种简单部署Pod的方式。因为在生产环境中,主要使用更高级的Deployment等方式进行Pod的管理和部署,这俩个控制器一般很少使用。 1.1 Replication Controller 官方文档:https://kubernetes.io/zh/docs/concepts/workloads/controllers/replicationcontroller/ Replication Controller(简称RC)可确保Pod副本数达到期望值,也就是RC定义的数量。换句话说,Replication Controller可确保一个Pod或一组同类Pod总是可用。 如果存在的Pod大于设定的值,则Replication Controller将终止额外的Pod。如果太小,Replication Controller将启动更多的Pod用于保证达到期望值。与手动创建Pod不同的是,用Replication Controller维护的Pod在失败、删除或终止时会....

kubernetes之Pod资源

kubernetes之Pod资源

一、Pod介绍 官方文档:https://kubernetes.io/zh/docs/concepts/workloads/pods/ Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。 Pod在生产环境中基本不单独使用,一般都是配合控制器来使用 Pod结构图 二、Pod示例文件 yaml演示文件 apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: pod # 必选,符合RFC 1035规范的Pod名称 namespace: default # 可选,Pod所在的命名空间,不指定默认为default,可以使用-n 指定namespace labels: # 可选,标签选择器,一般用于过滤和区分Pod app: pod #可以写多个 annotations: #可选,注释列表,可以写多个 a....

kubernetes基础概念

kubernetes基础概念

一、kubernetes基础 Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。 有了docker为什么还需要使用kubernetes 在真正的业务场景中一般会部署大量的业务容器,而直接使用裸容器的方式来管理业务容器环境是比较吃力的,但是也有一些其他工具提供了docker单机编排的功能如docker-compose,并且在某些程序需要使用多个副本来实现高可用或增加负载节点时docker也无法直接提供支持而kubernetes可以使用控制器来实现容器的多个副本以及一些更高级的功能。并且在某些业务容器运行过程当中会出现一些假死的状态,需要请求健康检查接口来判断容器是否存活的场景时dockers也无法提供支持而kubernetes中可以直接使用探针进行监控检测。kubernetes会极大的减少运维人员的工作量。 集群架构如下 集群架构说明 kubernetes分为master节点与node节点是一个主从架构,master节点是整个集群的管理控制中是不建议运....

生而为人