Kubernetes的数据管理

与Docker中一样,同样是通过Volume来管理存储资源,Kubernetes的Volume比Docker的类型多,支持的存储也多,如:nfs、fastdfs、iscsi等

在Rolling Update中使用Health Check

试想一个场景

现在有一个正常运行的多副本应用,要对应用进行更新(比如更新image),Kubernetes会启动新副本来代理旧副本,然后发生了以下事件:

1、正常情况下新副本需要10s左右来完成准备工作,在此之前无法响应更新后的业务请求。

2、但由于人为配置错误,副本始终无法完成准备工作(比如无法连接后端数据库)

Kubernetes的Health Check

强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查,进而实现如下需求:

  1. 零停机部署。
  2. 避免部署无效的镜像。
  3. 更加安全的滚动升级。

在docker swarm中可以使用命令检查服务是否健全(探测某个目录或者某个文件),来判断是否可以提供正常的服务。

Kubernetes的Rolling update和Robackup

当想要更新启动的pod镜像时,可以通过滚动更新,不停止Pod的情况下,将版本更新完成,非常简单 滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新。滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性。

通过Service访问Pod集群

Kubernetes中的Pod是很容易因为各种原因发生故障而死掉。Deployment等Controller会通过动态创建和销毁Pod来保证应用整体的健壮性。换句话说,Pod是脆弱的,但应用是健壮的。

每个Pod都有自己的IP地址。当Controller用新的Pod替代发生故障的Pod时,新Pod会分配到新的IP地址。这样就会产生一个问题:访问的地址也会发生变化,怎么保证在替换Pod后依然可以访问这个服务。

在docker run和swarm中使用-p来映射端口来解决这一问题,而Kubernetes给出的解决方案是Service,这里的Service与swarm中的Service是不一样的。同样它的解决方案也是映射端口的原理。

Kubernetes控制器---Job

容器安装持续运行的时间可分为两类:服务类容器和工作类容器

服务类容器通常持续提供服务,需要一直运行,比如web server,daemon等。工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。

Kubernetes的Deployment、ReplicaSet和DaemonSet都用于管理服务类容器;对于工作类容器,就可以使用Job

Kubernetes控制器---DaemonSet

在前面介绍组件的时候说过DaemonSet,和swarm集群的global模式是一样的,每个Node最多只能运行一个副本。

DaemonSet的典型的应用场景

1、在集群的每个节点上运行存储Deamon,比如glusterd或ceph

2、在每个节点上运行日志收集Daemon,比如flunentd或logstash

3、在每个节点上运行监控Daemon,比如Prometheus Node Export或collectd

Kubernetes使用labels控制Pod运行位置

默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node。不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。

Kubernetes是通过label来实现这个功能的,同之前的docker swarm集群的label是一样的,通过对节点进行label的设置,将Pod运行的指定的label节点上。

Kubernetes控制器---ReplicaSet

ReplicationController确保在任何时候都有特定数量的Pod副本处于运行状态,也叫作期望值,换句话说,ReplicationController确保一个Pod或一组同类的Pod总是可用的。ReplicationController的功能已经被ReplicaSet接管

现在推荐使用配置 ReplicaSetDeployment 来建立副本管理机制。

Kubernetes的Deployment Scale Up or Down(伸缩)

标题中所说的Scale Up or Down也就是伸缩,Deployment的伸缩也是主要对pod的伸缩,达到高可用以及负载的目的。

Docker+k8s+GitLab+Jenkins(生产环境可CI/CD模拟)

这个环境是生产环境中的真实项目,仅做参考 通过Docker+k8s来部署web集群,GitLab+Jenkins实现代码自动化部署,在Jenkins中通过构建脚本,实现k8s对容器web集群代码自动更新

Kubernetes的yaml文件使用语法及简单操作

本文中主要说明在编写k8s的yaml文件的一些必要格式,仅供参考。新手建议观看,也不是很全,老手要参考格式写,还是得多百度/google来写,本文可参考的资源有限。

apiVersion版本

当编写一个yml文件时,第一行必须先写入apiVersion的版本

不同的apiVersion可以实现不同的功能,或者配合不同的组件去使用

官方文档也没有给出一个充分的解释

使用kubectl api-version查看当前系统下的k8s支持的apiVersion有那些

Kubernetes简单应用部署

上篇文档中了解到新版本1.18的Kubernetes不能使用kubectl run--replicas,这篇文章中将会使用另一种方法来创建K8S资源deployment

在k8s部署之前,回忆以下之前说过的Deployment,可以创建应用程序(docker image)的实例(docker container),这个实例被包含在称为Pod的概念中,Pod是k8s最小的可管理单元。 在k8s集群中发布Deployment后,它将指示k8s如何创建和更新应用程序实例,master节点的Scheduler将应用程序实例调度到集群中的具体节点上。 之后Deployment会持续监控这些实例。一旦实例所在节点发生故障,会在其他节点重新创建一个新的实例。

Kubernetes架构理论理解

Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务。

CentOS搭建Discuz论坛

Discuz 是基于PHP网页,在 Linux 和 windows 两平台均可部署的
论坛工具。





正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0