1 介绍
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。Kubernetes在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计概念为松耦合和可扩展的,这样可以使之满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes API提供,此API主要被作为扩展的内部组件以及Kubernetes上运行的容器来使用。
建议使用的版本为"docker-18.09.8"。
2 环境环境
2.1 硬件环境
这是笔者使用的环境,正常情况下,K8s对系统硬件环境没有特殊的新要求。
类别 | 项目 | 要求 |
---|---|---|
硬件 | 服务器 | Taishan 200 2280服务器 * 3 |
硬件 | CPU | Kunpeng 920 |
硬件 | 网卡 | 板载电口网卡TM210 |
2.2 软件要求
类型 | 获取方法 |
---|---|
操作系统 | 操作系统版本Centos7.4 |
操作系统软件选择 | server with GUI |
网络需求 | DockerHub(https://hub.docker.com/)网络可达,docker下载地址(https://download.docker.com/linux/static/stable/aarch64/)网络可达。集群各个节点之间网络可达, flannel插件代码(https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)网络可达。 |
搭建K8S集群,每台节点均需要按照文档安装docker及K8S的全部组件
2.3 集群组网
K8S集群由一个管理节点(Master)与多个计算节点(Node)组成,集群创建、管理工作均在Master节点执行,计算节点通过kubeadm join操作加入集群。因此,Master与Node需要处在同一个网络下,且可以互通。规划的集群组网如图1-1所示。
1. Master为集群管理节点,Worker为集群计算节点。
2. 为验证集群搭建功能,至少需要两个节点。如果要验证亲和性调度功能,至少需要三台节点,安装配置工作在每台节点都需要执行。
注:192.168.35.230作为公司部分业务的验证机器,暂时没有加入到集群中。
角色 | IP |
---|---|
Master | 192.168.7.240 |
node1 | 192.168.7.241 |
node2 | 192.168.35.230 |
3 安装Kubernetes
3.1 安装与配置docker
具体部署参考:02.10.03 arm架构下docker安装
3.2 安装Kubernetes
本章节介绍基于Taishan服务器的Docker&K8S的安装方法。
本章介绍了Docker及K8S的安装方法。
1 集群的所有节点均需按本章节的指导进行安装。
2 如果仅需要安装Docker, 请参考02.10.03 arm架构下docker安装 安装与配置Docker。如果需要配置一个用以组成K8S集群的节点,请参考本章全部章节。
3.2.1 配置华为yum源
考虑到国内的网络情况,安装K8S之前,需要配置华为云yum源,操作步骤如下所示:
步骤 1 配置华为云yum源。
命令如下所示:
|
3.2.2 安装基础组件
步骤 1 启用NET.BRIDGE.BRIDGE-NF-CALL-IPTABLES内核选项。
命令如下所示:
sysctl -w net.bridge.bridge-nf-call-iptables=1
echo "net.bridge.bridge-nf-call-iptables=1" > /etc/sysctl.d/k8s.conf
步骤 2 禁用交换分区。
命令如下所示:
swapoff -a
cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab
步骤 3 安装K8S组件。
命令如下所示:
yum install -y kubelet kubeadm kubectl kubernetes-cni
步骤 4 并使能kubelet服务。
命令如下所示:
systemctl enable kubelet
3.2.3 通过docker下载其他组件
集群内所有节点均需执行以下操作步骤。
步骤 1 查看下载节点初始化所需镜像。
命令如下所示,命令执行结果如图2-8所示。
kubeadm config images list
图2-8 镜像列表
K8S所需镜像版本有可能会变动,因此查看列表并以此匹配需要下载的docker镜像,文档中的镜像版本仅做参考。
步骤 2 列出节点初始化所需镜像。
步骤 3 从DockerHub上下载镜像。
步骤 4 修改已下载的镜像标签。需要将镜像repository修改与kubeadm列出的镜像名保持一致。
步骤 5 删除旧镜像(如果有磁盘空间限制问题)。命令如下所示,命令执行结果如图3-10所示。
注意:以上需要在各个节点执行
4 部署Kubernaetes集群
4.1 配置host组件
步骤 1 执行cat /etc/hosts命令,修改hosts文件。
步骤 2 添加集群所有节点的IP及hostname信息。
步骤 3 hostnamectl --static set-hostname centos-1依次执行
步骤 4 重复步骤1和步骤2,步骤3 为每台节点修改/etc/hosts文件。
4.2 配置主节点
重复搭建集群时,请先执行 如下命令,清除旧的K8S集群设置。
|
步骤 1 在主节点上执行集群初始化命令。
命令如下所示:
kubeadm init --pod-network-cidr=10.244.0.0/16
1. 计算节点不需要执行集群初始化操作。
2. 如果在主节点初始化的时候提示:
/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
可以通过执行echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables命令将其置为1(vim不可修改此文件)。
图4-2 主节点成功初始化信息
如果打印此信息如图4-2所示,则主节点成功被初始化。
在图4-2中,黄框信息表示在配置物理机上的主节点需要拷贝的配置信息,红框信息表示计算节点加入集群的token命令,请保存该段命令。
说明:
--pod-network-cidr 选项用于指定kubernetes网络可以使用的IP地址段,由于后续使用Flannel网络插件,该插件固定使用的IP段为:10.244.0.0/16 。
步骤 2 查看集群信息
命令如下所示:
|
步骤 3 查看集群节点信息
命令如下所示:
kubectl get node
步骤 4 保存主节点生成的加入集群信息。
该信息在成功初始化主节点后生成并打印,集群信息如下所示:
kubeadm join 192.168.1.235:6443 --token a9020j.vnfgqk7n30p5d9z0 --discovery-token-ca-cert-hash sha256: c465651177b41c545fe20f8dc052b9661a8375afdeac7e7ecf52029fc66a506a(例)
该token命令可以用于二十四小时内计算节点加入集群。
注意:
集群加入token是随机生成的,在搭建集群时需要使用实际生成的指令。
4.3 配置计算节点
步骤 1 删除代理
如果kubernets工作节点已经配置了https和https代理,需要执行如下命令删除代理。
|
步骤 2 计算节点加入群集。
1. 在计算节点中执行以下命令用以加入集群。
|
2. 等待一分钟左右,执行kubectl get nodes 命令,查看集群中加入的计算节点,如下所示:
|
步骤 3 配置节点kubectl
将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后如提示配置环境变量:
|
也可以简单方法
|
4.4 配置flannel网络插件
步骤 1 安装Flannel网络插件。
在主节点上执行如下命令安装Flannel网络插件。
docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm64
步骤2 修改名称
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm64 quay.io/coreos/flannel:v0.11.0-amd64
步骤3 下载yml并上传到服务器任一目录
步骤4 执行flannel pod
kubectl create -f kube-flannel.yml
步骤 5 查看节点状态。
执行kubectl get node命令,可以看到节点的状态变成了Ready,如下所示:
|
5 验证kubernetes集群
步骤 1 下载yaml
步骤 2 创建完毕后执行命令,部署节点。
kubectl create -f nginx_delpoy.yaml
步骤 3 执行pod指令,查看K8S创建这个deployment的过程。
命令如下所示,执行结果如图4-3所示,可以看到有两个新的属于nginx-delpoyment的pod正在被创建。
6 删除Kubernetes集群
如果不需要使用K8S集群时,可以按本章节操作,删除K8S集群。
步骤 1 在集群的节点上执行kubeadm reset命令,清除集群设置。
步骤 2 在集群内所有节点上重复kubeadm reset命令,即可删除整个集群。
步骤 3 删除基础组件镜像。
基础组件通过Docker镜像部署,因此只需要强制删除对应镜像即可卸载,请自行结合本机镜像删除。