暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开源容器编排引擎Kubernetes

IT那活儿 2021-07-08
1751

主要内容:

K8s介绍

K8s组件介绍

K8s中zookeeper集群部署

K8s常见故障及处理方法

一. K8s介绍
kubernetes是一种开源的容器编排工具,通过调度系统维持用户预期数量和状态的容器正常运行。kubernetes提供的功能:

1. 服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

2. 存储编排

Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等

3. 自动部署和回滚

您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。

4. 自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

5. 密钥与配置管理

Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

K8s架构图

二. k8s组件介绍

1.  etcd

etcd 是兼具一致性和高可用性的键值数据库,用于存储K8S中资源对象,如集群中Pod,Node等状态以及配置数据等。生产中需要对etcd进行高可用部署,通常为三个节点到七个节点之间的奇数节点,并且需要定期进行数据备份。etcd各个节点使用raft共识算法进行数据复制。当节点数量过多会导致仲裁和数据复制的效率降低!

在kubernetes集群中,仅apiserver会和etcd集群进行通信。在k8s集群中,etcd的性能至关重要!

2. master组件

master和node是两个逻辑上节点,当服务器资源充足时,可以将其分开在不同的机器上部署,当服务器资源不足时,也可以放到同一台机器上部署。master节点在部署的时候必须要考虑高可用方案,至少部署两个master。

  • apiserver

主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端。是整个集群中资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。

apiserver提供了集群管理的restful api接口(鉴权、数据校验、集群变更等),负责和其它模块之间进行数据交互,承担了通信枢纽功能。

apiserver是无状态的,可以横向扩展,当存在多个apiserver时,前端会采用LB作为负载均衡,如Nginx,LVS,ELB等

  • controller manager

controller manager 译为“控制器管理器”,k8s内部有很多资源控制器,比如:Node Controller、Replication Controller、Deployment Controller、Job Controller、Endpoints Controller等等,为了降低复杂度,将这些控制切都编译成了一个可执行文件,并且在同一个进程中运行。controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。

controller-manager 虽然允许同时运行多个实例,但是只有一个能成为leader,并处理控制器的请求。controller-manager 锁对象存储在 kube-system 名称空间下的 kube-controller-manager endpoints对象中。

  •  scheduler

调度器组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

3. node组件

  • kublet

一个在集群中每个节点上运行的代理,kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理非 Kubernetes 创建的容器。

  • kube-porxy

kube-proxy 是集群中每个节点上运行的网络代理,是实现service资源功能组件之一。kube-proxy 建立了pod网络和集群网络之间的关系,即 cluster ip 和 pod ip 中间的关系。不同node上的service流量转发规则会通过kube-proxy进行更新,其实是调用apiserver访问etcd进行规则更新。

service流量调度方式有三种方式: userspace(废弃,性能很差)、iptables(性能差,复杂)、ipvs(性能好,转发方式清晰)。

  •  container runtime

即容器运行环境,Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。常用的是Docker CE。

三. K8s中zookeeper集群部署

ZK集群是有状态的服务,其选择Leader的方式和ETCD类似,要求集群节点是不低于3的奇数个。

1. 安装JDK

2. 配置DNS解析

3. 安装zk

四. K8s常见故障及处理方法
  • 节点初始化报错

解决方法:

通过 echo 1 > proc/sys/net/ipv4/ip_forward

  • kubectl get 报错

解决方法:

mkdir -p $HOME/.kube

cp -i etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论