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

Master192.168.7.240
node1192.168.7.241
node2192.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源。

命令如下所示:

cat >/etc/yum.repos.d/centos7-7.repo<<EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-aarch64

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=http://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg

        http://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

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依次执行

       16.png

步骤 4    重复步骤1步骤2步骤3 为每台节点修改/etc/hosts文件。

4.2 配置主节点

重复搭建集群时,请先执行 如下命令,清除旧的K8S集群设置。

#!/bin/bash

kubeadm reset --ignore-preflight-errors=Swap

 

iptables -F && iptables -t nat -F && iptables -t mangle -F &&iptables -X

 

rm -rf /var/lib/kubelet/ ;rm -rf /var/lib/cni/ ;rm -rf /var/lib/etcd/ ;rm -rf /etc/kubernetes/ ;rm -rf .kube/config

 

ifconfig cni0 down

ip link delete cni0

ifconfig flannel.1 down

ip link delete flannel.1

 步骤 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 主节点成功初始化信息

17.png

如果打印此信息如图4-2所示,则主节点成功被初始化。

图4-2中,黄框信息表示在配置物理机上的主节点需要拷贝的配置信息,红框信息表示计算节点加入集群的token命令,请保存该段命令。

说明:

--pod-network-cidr 选项用于指定kubernetes网络可以使用的IP地址段,由于后续使用Flannel网络插件,该插件固定使用的IP段为:10.244.0.0/16 。

步骤 2    查看集群信息

命令如下所示:

mkdir -p $HOME/.kube

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

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

export KUBECONFIG=/etc/kubernetes/admin.conf

步骤 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代理,需要执行如下命令删除代理。

export -n http_proxy

export -n https_proxy

步骤 2    计算节点加入群集。

1.       在计算节点中执行以下命令用以加入集群。

kubeadm join 192.168.1.235:6443 --token a9020j.vnfgqk7n30p5d9z0 --discovery-token-ca-cert-hash sha256: c465651177b41c545fe20f8dc052b9661a8375afdeac7e7ecf52029fc66a506a

2.       等待一分钟左右,执行kubectl get nodes 命令,查看集群中加入的计算节点,如下所示:

[root@centos-1 etc]# kubectl get node 

 NAME       STATUS     ROLES    AGE   VERSION 

 centos-1   NotReady   master   12h   v1.14.3 

 centos-2   NotReady

步骤 3 配置节点kubectl

将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后如提示配置环境变量:

Your Kubernetes control-plane has initialized successfully!

 

To start using your cluster, you need to run the following as a regular user:

 

mkdir -p $HOME/.kube

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

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

也可以简单方法

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

 

source ~/.bash_profile

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并上传到服务器任一目录

点击下载  kube-flannel.yml

步骤4   执行flannel pod

kubectl create -f  kube-flannel.yml

 步骤 5   查看节点状态。

执行kubectl get node命令,可以看到节点的状态变成了Ready,如下所示:

[root@k8s-master src]# kubectl get node

NAME          STATUS   ROLES    AGE     VERSION

k8s-client1   Ready    <none>   2d18h   v1.14.2

k8s-master    Ready    master   2d19h   v1.14.2

5 验证kubernetes集群

步骤 1 下载yaml

nginx_deploy.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镜像部署,因此只需要强制删除对应镜像即可卸载,请自行结合本机镜像删除。

 

Logo

开源、云原生的融合云平台

更多推荐