# 开源容器编排引擎Kubernetes

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 解决方案
> 标签: AI, 数据库, Kubernetes
> 原文链接: http://117.50.162.249:3000/yun/articles/1024

---

# 开源容器编排引擎Kubernetes

> 来源: https://www.ucloud.cn/yun/129865.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

开源容器编排引擎Kubernetes

主要内容：

K8s介绍

K8s组件介绍

K8s中zookeeper集群部署

K8s常见故障及处理方法

## 

一. K8s介绍

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

**1. 服务发现和负载均衡**

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

**2. 存储编排**

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

**3. 自动部署和回滚**

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

**4. 自我修复**

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

**5. 密钥与配置管理**

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_000.png)

### K8s架构图

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_001.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_002.png)

## 

二. 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(性能好，转发方式清晰)。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_003.png)

- #### **container runtime**

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

三. K8s中zookeeper集群部署

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_004.png)

### **1. 安装JDK**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_005.png)

### **2. 配置DNS解析**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_006.png)

### **3. 安装zk**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_007.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_008.png)

## 

四. K8s常见故障及处理方法

- ### **节点初始化报错**

### ![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_009.png)

**解决方法：**

通过 echo 1 > /proc/sys/net/ipv4/ip\_forward

- ### **kubectl get 报错**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_010.png)

**解决方法：**

```
mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_011.png)

END

更多精彩干货分享

点击下方名片关注

IT那活儿

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129865/images/129865_012.png)