K8s-GC(垃圾回收)
K8s-GC(垃圾回收)什么是GC Kubernetes garbage collector(垃圾回收器)的作用是删除那些曾经有 owner,后来又不再有 owner 的对象。 通过metadata.ownerReferences可以知道Pod所属的对象 垃圾收集器如何删除从属对象当删除某个对象时,可以指定该对象的从属对象是否同时被自动删除,这种操作叫做级联删除(cascading deletion)。级联删除有两种模式:后台(background)和前台(foreground) 如果删除对象时不删除自动删除其从属对象,此时,从属对象被认为是孤儿(或孤立的 orphaned)。 Foreground级联删除在 foreground 级联删除模式下,根对象(直接被删除的对象)先进入“正在删除”(deletion in progress)状态,此时: 对象仍然可以通过 REST API 查询到(可通过 kubectl 或 kuboard 查询到) 对象的 deletionTimestamp 字段被设置 对象的 metadata.finalizers 包含值 foregroundDe...
K8s[控制器]-StatefulSet
K8s[控制器]-StatefulSet什么是StatefulSetStatefulSet 顾名思义,用于管理 Stateful(有状态)的应用程序。 StatefulSet 管理 Pod 时,确保其 Pod 有一个按顺序增长的 ID。 StatefulSet 使用场景对于有如下要求的应用程序,StatefulSet 非常适用: 稳定、唯一的网络标识(dnsname) 每个Pod始终对应各自的存储路径(PersistantVolumeClaimTemplate) 按顺序地增加副本、减少副本,并在减少副本时执行清理 按顺序自动地执行滚动更新 如果一个应用程序不需要稳定的网络标识,或者不需要按顺序部署、删除、增加副本,您应该考虑使用 Deployment 这类无状态(stateless)的控制器。 StatefulSet 的限制 Pod 的存储要么由 storage class 对应的 PersistentVolume Provisioner (opens new window)提供,要么由集群管理员事先创建 删除或 scale down 一个 StatefulSet 将不会删除...
K8s[控制器]-Job
K8s[控制器]-Job什么是JobKubernetes中的 Job 对象将创建一个或多个 Pod,并确保指定数量的 Pod 可以成功执行到进程正常结束: 当 Job 创建的 Pod 执行成功并正常结束时,Job 将记录成功结束的 Pod 数量 当成功结束的 Pod 达到指定的数量时,Job 将完成执行 删除 Job 对象时,将清理掉由 Job 创建的 Pod 创建一个 Job 对象用来确保一个 Pod 的成功执行并结束。在第一个 Pod 执行失败或者被删除(例如,节点硬件故障或机器重启)的情况下,该 Job 对象将创建一个新的 Pod 以重新执行。 Example: 1234567891011121314apiVersion: batch/v1kind: Jobmetadata: name: pispec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi"...
K8s[控制器]-DaemonSet
K8s[控制器]-DaemonSet什么是DaemonSetDaemonSet 控制器确保所有(或一部分)的节点都运行了一个指定的 Pod 副本。 每当向集群中添加一个节点时,指定的 Pod 副本也将添加到该节点上 当节点从集群中移除时,Pod 也就被垃圾回收了 删除一个 DaemonSet 可以清理所有由其创建的 Pod DaemonSet 的典型使用场景有: 在每个节点上运行集群的存储守护进程,例如 glusterd、ceph 在每个节点上运行日志收集守护进程,例如 fluentd、logstash 在每个节点上运行监控守护进程,例如 Prometheus Node Exporter (opens new window)、Sysdig Agent (opens new window)、collectd、Dynatrace OneAgent (opens new window)、APPDynamics Agent (opens new window)、Datadog agent (opens new window)、New Relic agent (opens new w...
K8s[控制器]-CronJob
K8s[控制器]-CronJobCronJob 按照预定的时间计划(schedule)创建 Job。一个 CronJob 对象类似于 crontab (cron table) 文件中的一行记录。该对象根据 Cron (opens new window)格式定义的时间计划,周期性地创建 Job 对象 本质上:CronJob 只负责按照时间计划的规定创建 Job 对象,由 Job 来负责管理具体 Pod 的创建和执行 CronJob限制当以下两个条件都满足时,Job 将至少运行一次: startingDeadlineSeconds 被设置为一个较大的值,或者不设置该值(默认值将被采纳) concurrencyPolicy 被设置为 Allow 对于每一个 CronJob,CronJob 控制器将检查自上一次执行的时间点到现在为止有多少次执行被错过了。如果错过的执行次数超过了 100,则 CronJob 控制器将不再创建 Job 对象,并记录如下错误 当以下两个条件都满足时,Job 将至少运行一次: startingDeadlineSeconds 被设置为一个较大的值,或者不设置...
K8s[内核优化]-大规模下集群优化
K8s[内核优化]-大规模下集群优化最大线程数和文件打开数。 编辑 /etc/security/limits.conf 。 12345678root soft nofile 655350root hard nofile 655350root soft nproc 655350root hard nproc 655350* soft nofile 655350* hard nofile 655350* soft nproc 655350* hard nproc 655350 内核优化,重点优化以下参数。 编辑 /etc/sysctl.conf 1234567891011121314151617181920212223242526272829303132333435363738# 容器环境下,优化这些参数可以避免 NAT 过的 TCP 连接带宽上不去。net.netfilter.nf_conntrack_tcp_be_liberal = 1 net.netfilter.nf_conntrack_tcp_loose = 1 net....
K8s-服务发现、负载均衡、网络
K8s-服务发现、负载均衡、网络ServiceService 是 Kubernetes 中的一种服务发现机制: Pod 有自己的 IP 地址 Service 被赋予一个唯一的 dns name Service 通过 label selector 选定一组 Pod Service 实现负载均衡,可将请求均衡分发到选定这一组 Pod 中 Service基础基本操作123456789101112apiVersion: v1kind: Servicemetadata: name: my-servicespec:# 管理的Pod的label selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 无label模式 123456789apiVersion: v1kind: Servicemetadata: name: my-servicespec: ports: - protocol: TCP port: 80 targetPo...
K8s-集群内的通信
K8s-集群内的通信Master-WorkNodeCluster to Master集群访问K8s Master,其实本质就是对于apiserver的通信(通信不是节点之间的通信,而是进程之间的通信) K8s安装K8s,apiserver默认是监听HTTPS端口(443),并且配置了客户端认证模式,提供授权模式.节点上必须配置集群(apiserver)的公钥根证书(public root certificate),此时,在提供有效的客户端身份认证的情况下,节点可以安全地访问 APIServer。 kubelet提供TLS认证过程 对于需要调用 APIServer 接口的 Pod,应该为其关联 Service Account,此时,Kubernetes将在创建Pod时自动为其注入公钥根证书(public root certificate)以及一个有效的 bearer token(放在HTTP请求头Authorization字段)。所有名称空间中,都默认配置了名为 kubernetes Kubernetes Service,该 Service对应一个虚拟 IP(默认为 10.9...
K8s-对象
K8s-对象对象的spec和status spec:操作员所期望的状态 status:实际上集群中的状态 必填字段在上述的 .yaml 文件中,如下字段是必须填写的: apiVersion 用来创建对象时所使用的Kubernetes API版本 kind 被创建对象的类型 metadata 用于唯一确定该对象的元数据:包括 name 和 namespace,如果 namespace 为空,则默认值为 default spec 描述您对该对象的期望状态 名称Kubernetes REST API 中,所有的对象都是通过 name 和 UID 唯一性确定。 Names可以通过 namespace + name 唯一性地确定一个 RESTFUL 对象,例如: 1/api/v1/namespaces/{namespace}/pods/{name} 同一个名称空间下,同一个类型的对象,可以通过 name 唯一性确定。如果删除该对象之后,可以再重新创建一个同名对象。 下面是三种广泛使用的资源名称的限制类型: DNS Subdomain Name...
K8s-容器
K8s-容器镜像在 Kubernetes 的 Pod 中使用容器镜像之前,您必须将其推送到一个镜像仓库(或者使用仓库中已经有的容器镜像)。在 Kubernetes 的 Pod 定义中定义容器时,必须指定容器所使用的镜像,容器中的 image 字段支持与 docker 命令一样的语法,包括私有镜像仓库和标签。 例如:my-registry.example.com:5000/example/web-example:v1.0.1 由如下几个部分组成: my-registry.example.com:5000/example/web-example:v1.0.1 my-registry.example.com:registry 地址 5000:registry 端口 example:repository 名字 web-example:image 名字 v1.0.1:image 标签 如果您使用 hub.dokcer.com Registry 中的镜像,可以省略 registry 地址和 registry 端口。例如:nginx:latest,eipwork/kub...