《伸手系列》之arm架构服务器安装kubernetes

《伸手系列》之arm架构服务器安装kubernetes

前段时间买了两台华为云服务器没有用,最近看了一下发现是arm架构的,刚好没有在arm上装过k8s,特意装一下顺便记录一下

一、环境准备

硬件参数

在这里插入图片描述

操作系统和安装要求

在这里插入图片描述

以上是华为云服务器的情况,直接官网搬的信息

Docker安装

注意:
采用静态包而非yum install的方式,是因为默认yum源的Docker版本过旧,容易出错且出现问题难以定位。

  1. 进入Docker官方下载地址,查看Docker静态安装包列表。
    下载地址:https://download.docker.com/linux/static/stable/aarch64/
    在这里插入图片描述
  2. 选择所需版本的安装包并下载至本地。如上图所示。

    注意:
    在离线场景下,可以先通过网络下载安装包再传入目标主机的目标目录。

1
wget https://download.docker.com/linux/static/stable/aarch64/docker-18.09.8.tgz

在这里插入图片描述

  1. 获取Docker静态包及组件
    3.1 执行cat /etc/redhat-release,确认物理机的操作系统版本。
    在这里插入图片描述
    3.2 将静态安装包在本地解压。解压后本地文件夹下会多一个docker文件夹, 内容如下

    1
    tar xvpf docker-18.09.8.tgz

    3.3 将文件夹中所有内容拷贝至“/usr/bin”文件夹下。

    1
    cp -p docker/* /usr/bin

    3.4 为使Docker可以正常使用,还需要关闭SELinux及防火墙。

    1
    2
    3
    4
    5
    setenforce 0

    systemctl stop firewalld

    systemctl disable firewalld

    此时只是暂时禁用SELinux,如果要长期禁用SELinux,还需要修改/etc/selinux/config文件。
    将SELINUX=enforcing改为SELINUX=permissive或disabled,才能长期有效。重启服务器后,修改的配置文件生效
    3.5 整段执行如下命令,配置docker.service文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    cat >/usr/lib/systemd/system/docker.service <<EOF
    [Unit]
    Description=Docker Application Container Engine
    Documentation=http://docs.docker.com
    After=network.target docker.socket
    [Service]
    Type=notify
    EnvironmentFile=-/run/flannel/docker
    WorkingDirectory=/usr/local/bin
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt max-size=1g
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    EOF

    3.6 随后启动相关服务,输出Docker的状态。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    systemctl daemon-reload

    systemctl status docker

    systemctl restart docker

    systemctl status docker

    systemctl enable docker

    systemctl status docker

    3.7 执行docker version命令,查询Docker版本
    在这里插入图片描述

    K8S安装

    K8s集群由一个管理节点(Master,也称主节点)与多个计算节点(Node)组成,集群创建、管理工作均在Master节点执行,计算节点通过kubeadm join操作加入集群。因此,Master与Node需要处在同一个网络下,且可以互通。

1、云服务器直接内网如果不通的话,同一区域可以建立对等连接从而互通,不通区域的互通也可以但是会收费;
2、搭建K8s集群,每台节点均需要按照文档安装Docker及K8s的全部组件。

集群角色和IP规划
角色 | IP举例
——– | —–
Master | 192.168.0.160
Worker |10.0.0.248

配置华为云yum源

  1. 配置华为云yum源

考虑到国内的网络情况,手动部署K8s之前,需要配置华为云yum源,操作步骤如下所示:

1
2
3
4
5
6
7
8
9
10
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
  1. 刷新yum缓存
1
yum makecache

安装基础组件

  1. 启用NET.BRIDGE.BRIDGE-NF-CALL-IPTABLES内核选项。
1
sysctl -w net.bridge.bridge-nf-call-iptables=1
  1. 禁用交换分区。
1
2
3
4
5
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
  1. 安装K8s组件。
1
yum install -y kubelet kubeadm kubectl kubernetes-cni
  1. 查看安装情况。
1
2
3
4
5
6
7
rpm -qa | grep kubelet

rpm -qa | grep kubeadm

rpm -qa | grep kubectl

rpm -qa | grep kubernetes-cni
  1. 设置iptables。
1
echo "net.bridge.bridge-nf-call-iptables=1" > /etc/sysctl.d/k8s.conf
  1. 使能kubelet服务。
1
systemctl enable kubelet

通过Docker下载其他组件

注意:
集群内所有节点均需执行以下操作步骤。

  1. 查看下载节点初始化所需镜像。
    执行kubeadm config images list命令

    !!! 一定要注意,别弄错了,不然后续肯定有问题, K8s所需镜像版本有可能会变动,因此查看列表并以此匹配需要下载的Docker镜像,文档中的镜像版本仅做参考。
    例如这边是:
    k8s.gcr.io/kube-apiserver:v1.14.2
    k8s.gcr.io/kube-controller-manager:v1.14.2
    k8s.gcr.io/kube-scheduler:v1.14.2
    k8s.gcr.io/kube-proxy:v1.14.2
    k8s.gcr.io/pause:3.1
    k8s.gcr.io/etcd:3.3.10
    k8s.gcr.io/coredns:1.3.1

  2. 从DockerHub上下载镜像。
1
2
3
4
5
6
7
8
9
10
11
12
13
docker pull docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2

docker pull docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2

docker pull docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2

docker pull docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2

docker pull docker.io/mirrorgooglecontainers/pause-arm64:3.1

docker pull docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10

docker pull docker.io/coredns/coredns:1.3.1
  1. 修改已下载的镜像标签。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    docker tag docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2

    docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2

    docker tag docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2

    docker tag docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2

    docker tag docker.io/mirrorgooglecontainers/pause-arm64:3.1 k8s.gcr.io/pause:3.1

    docker tag docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10

    docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
  2. 删除旧镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
docker rmi docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2

docker rmi docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2

docker rmi docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2

docker rmi docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2

docker rmi docker.io/mirrorgooglecontainers/pause-arm64:3.1

docker rmi docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10

docker rmi docker.io/coredns/coredns:1.3.1

配置hosts文件

主节点和计算节点都需要配置hosts文件。

  1. 执行vi /etc/hosts命令,修改hosts文件。
  2. 添加集群所有节点的IP及hostname信息,如下所示,按Esc,输入:wq保存退出。
    在这里插入图片描述

    配置主节点

    重复搭建集群时,请先执行kubeadm reset命令,清除旧的K8s集群设置。

  3. 在主节点上执行集群初始化命令
    1
    kubeadm init --kubernetes-version=1.14.2 --apiserver-advertise-address=192.168.0.160 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

说明:
计算节点不需要执行集群初始化操作。
如果在主节点初始化的时候提示:
/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不可修改此文件)。
执行该操作时,建议排查是否有配置代理(执行env查看),避免kubeadm init初始化超时失败,删除代理的操作:
export -n http_proxy
export -n https_proxy
export -n no_proxy

在这里插入图片描述
如果打印此信息如图所示,则主节点成功被初始化。

在图中,黄框信息表示主节点配置集群需要执行的命令,红框信息表示计算节点加入集群的token命令,请保存该段命令。

  1. 配置集群
1
2
3
4
5
6
7
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
  1. 在主节点查看集群节点信息
1
kubectl get node

也可以通过命令查看当前进度

1
kubectl get pods --all-namespaces -o wide

配置计算节点

  1. 删除代理
    如果kubernetes工作节点已经配置了http和https代理,需要执行如下命令删除代理。

    1
    2
    3
    4
    5
    export -n http_proxy

    export -n https_proxy

    export -n no_proxy
  2. 计算节点加入集群
    使用前面初始化主节点的信息加入

    1
    kubeadm join 192.168.0.160:6443 --token ddrk9r.9quu1gceufqza4pq --discovery-token-ca-cert-hash sha256:4d3484e1700e16f93b71f4b5032ae94534e9d60b368320a8c5e7e116e5b02f2e

须知:
集群加入token是随机生成的,在搭建集群时需要使用实际生成的指令。
token默认有效期为24小时,若token超时,可在K8S主节点通过kubeadm token create –print-join-command命令进行重新生成。

  1. 等待一分钟左右,在主节点执行kubectl get nodes命令,查看集群中加入的计算节点,如下所示
    在这里插入图片描述

k8s的安装工作基本完成,后续的kubernetes-dashboard大家可以自行安装
另外,这边K8S安装的版本偏低,大家如果需要安装较高版本的话最好找到源能提前下载好镜像,有问题欢迎交流


关注Github:1/2极客

关注博客:御前提笔小书童

关注网站:HuMingfeng

关注公众号:开发者的花花世界


本作品采用知识共享署名 4.0 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自御前提笔小书童,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:https://royalscholar.cn/2020/09/19/《伸手系列》之arm架构服务器安装kubernetes/

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×