04-7.job
简介作用Kubernetes jobs主要是针对短时和批量的工作负载。它是为了结束而运行的,而不是像deployment、replicasets、replication controllers和DaemonSets等其他对象那样持续运行。 场景1.批处理任务: 比如说你想每天运行一次批处理任务,或者在指定日程中运行。它可能是像从存储库或数据库中读取文件那样,将它们分配给一个服务来处理文件。 2.运维/ad-hoc任务: 比如你想要运行一个脚本/代码,该脚本/代码会运行一个数据库清理活动,甚至备份一个Kubernetes集群。 原理当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量。当成功结束的pod达到指定的数量时,Job将完成执行 示例基本示例 .spec.completions:完成该Job需要执行成功的Pod数 .spec.parallelism:能够同时运行的Pod数 .spec.backoffLimit:允许执行失败的Pod数,默认值是6,0表示不允许Pod执行失败。如果Pod是restartPolicy为Nerver,则...
08 Pod网络
容器网络网络类型 Node Network: 外部网络接口。集群节点所在的网络,这个网络就是你的主机所在的网络,通常情况下是你的网络基础设施提供。如果node处于不同的网段,那么你需要保证路由可达。如上图中的 192.168.10.0/24和10.0.0.0/8这两个网络 Service Network:K8S服务网络,ipvs规则当中的网络,由特定组件提供路由和调度。 service_cluster_ip_range(如图,默认的配置是的10.0.0.1/24)。在上图中,扩充的节点(基础网络是10.0.0.0/8)和 服务网络(10.0.0.1/24)冲突,会造网络问题。 Pod Network: 节点当中pod的内部网络无法与外界通信。第三个网络是Pod的网络, K8s中一个Pod由多个容器组成,但是一个pod只有一个IP地址,Pod中所有的容器共享同一个IP。这个IP启动pod时从一个IP池中分配的, 叫做 pod CIDR, 或者叫network_cidr(如图,默认配置是10.1.0.0/16)。 可以在...
07 有无状态服务
1 有无状态服务对比无状态服务 数据方面:无状态服务不会在本地存储持久化数据.多个实例可以共享相同的持久化数据 结果方面:多个服务实例对于同一个用户请求的响应结果是完全一致的 关系方面:这种多服务实例之间是没有依赖关系 影响方面:在k8s控制器 中动态启停无状态服务的pod并不会对其它的pod产生影响 示例方面:nginx实例,tomcat实例,web应用 资源方面:相关的k8s资源有:ReplicaSet、ReplicationController、Deployment 创建方式:Deployment被设计用来管理无状态服务的pod。每个pod完全一致,原因如下: 无状态服务内的多个Pod创建的顺序是没有顺序的 无状态服务内的多个Pod的名称是随机的.pod被重新启动调度后,它的名称与IP都会发生变化 无状态服务内的多个Pod背后是共享存储的 缩容方式:随机缩容。由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容也是随机,并不会明确缩容某一个pod。因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以 有状态服务 数据方面:有状态服务需要在本...
11.优雅下线
原理容器终止在 Kubernetes 中,Pod 停止时 kubelet 会先给容器中的主进程发 SIGTERM 信号来通知进程进行 shutdown 以实现优雅停止,如果超时进程还未完全停止则会使用 SIGKILL 来强行终止。 容器的终止流程 Pod 被删除,状态置为 Terminating。 kube-proxy 更新转发规则,将 Pod 从 service 的 endpoint 列表中摘除掉,新的流量不再转发到该 Pod。 如果 Pod 配置了 preStop Hook ,将会执行。 kubelet 对 Pod 中各个 container 发送 SIGTERM 信号以通知容器进程开始优雅停止。 等待容器进程完全停止,如果在 terminationGracePeriodSeconds 内 (默认 30s) 还未完全停止,就发送 SIGKILL 信号强制杀死进程。 所有容器进程终止,清理 Pod 资源。 优雅退出处理实现prestop逻辑123456lifecycle: preStop: exec: command: - sleep ...
01 简介
简介功能
02 mapping
简介作用mapping 通过rest 资源与k8s 的service进行关联,ambassador 必须有一个或者多个提供访问servide 的mapping定义 用法mapping字段详解 rewrite rule。修改URL 对于k8s service 的访问 weight指定流量路由的权重 host指定请求的host header mapping 排序ambassador 对于mappings 会进行排序 较多约束的会优先于较低的约束, 请求前缀的长度,请求的方法,以及约束的header 都会有影响, 如果有必须可以使用precedence 进行修改,但是通常来说没有必要,除非使用了regex_headers 以及host_regex的mapping 特性 示例mapping实例最简单的例子 123456789101112131415161718192021---apiVersion: ambassador/v0kind: Mappingname: qotm_mappingprefix: /qotm/service: http://qotm一个cqrs 的例子--...
01 简介
Helm1 简介概念Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来管理 Charts。 类似于:Ubuntu 中的 APT、CentOS 中的 YUM。主要功能: 创建:创建新的charts 打包:将charts打包成tgz文件 交互:与chart仓库交互 安装:安装和卸载K8s的应用 管理:管理使用Helm安装的charts的生命周期 2 安装与仓库前置条件 kubernets集群 安装配置helm 安装1curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash 自动补全123#设置命令自动补全echo 'source <(helm completion bash)' >> /etc/profile. /etc/profile #重载环境变量 配置helm仓库123456789#查看其仓库信息helm repo listNAME URL ...
05 client-go
Client-go简介client-go是对K8s集群的二次开发工具,所以client-go是k8s开发者的必备工具之一。client-go实现对kubernetes集群中资源对象(包括deployment、service、ingress、replicaSet、pod、namespace、node等)的增删改查等操作。 client-go主要提供了四种类型的客户端: RESTClient: 是对HTTP Request进行了封装,实现了RESTful风格的API。其他客户端都是在RESTClient基础上的实现。可与用于k8s内置资源和CRD资源 ClientSet:是对k8s内置资源对象的客户端的集合,默认情况下,不能操作CRD资源,但是通过client-gen代码生成的话,也是可以操作CRD资源的。 DynamicClient:不仅能对K8S内置资源进行处理,还可以对CRD资源进行处理,不需要client-gen生成代码即可实现。 DiscoveryClient:用于发现kube-apiserver所支持的资源组、资源版本、资源信息(即Group、Version、Re...
06 client-go创建资源
### 创建Ingress方法 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131package janimport ( janv1 "develop-operator/apis/jan/v1" appv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/networking/v1" metav1 &q...














