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

一、环境准备

硬件参数

操作系统和安装要求

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

Docker安装

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

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

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

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文件夹, 内容如下

    tar xvpf docker-18.09.8.tgz
    

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

    cp -p docker/* /usr/bin
    

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

    setenforce 0systemctl stop firewalldsystemctl disable firewalld
    

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

    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的状态。

    systemctl daemon-reloadsystemctl status dockersystemctl restart dockersystemctl status dockersystemctl enable dockersystemctl 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源,操作步骤如下所示:

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.gpghttp://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  1. 刷新yum缓存
 yum makecache

安装基础组件

  1. 启用NET.BRIDGE.BRIDGE-NF-CALL-IPTABLES内核选项。
sysctl -w net.bridge.bridge-nf-call-iptables=1
  1. 禁用交换分区。
swapoff -acp -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组件。
yum install -y kubelet kubeadm kubectl kubernetes-cni
  1. 查看安装情况。
rpm -qa | grep kubeletrpm -qa | grep kubeadmrpm -qa | grep kubectlrpm -qa | grep kubernetes-cni
  1. 设置iptables。
echo "net.bridge.bridge-nf-call-iptables=1" > /etc/sysctl.d/k8s.conf
  1. 使能kubelet服务。
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

  1. 从DockerHub上下载镜像。
docker pull docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2docker pull docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2docker pull docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2docker pull docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2docker pull docker.io/mirrorgooglecontainers/pause-arm64:3.1docker pull docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10docker pull docker.io/coredns/coredns:1.3.1
  1. 修改已下载的镜像标签。
docker tag docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2docker tag docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2docker tag docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2docker tag docker.io/mirrorgooglecontainers/pause-arm64:3.1 k8s.gcr.io/pause:3.1docker tag docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
  1. 删除旧镜像。
docker rmi docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2docker rmi docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2docker rmi docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2docker rmi docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2docker rmi docker.io/mirrorgooglecontainers/pause-arm64:3.1docker rmi docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10docker rmi docker.io/coredns/coredns:1.3.1

配置hosts文件

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

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

配置主节点

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

  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. 配置集群
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configexport KUBECONFIG=/etc/kubernetes/admin.conf
  1. 在主节点查看集群节点信息
kubectl get node

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

kubectl get pods --all-namespaces -o wide

配置计算节点

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

    export -n http_proxyexport -n https_proxyexport -n no_proxy
    
  2. 计算节点加入集群
    使用前面初始化主节点的信息加入
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

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

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

  1. arm架构服务器安装系统教程,docker服务在arm平台上部署安装方法

    docker服务在arm平台上部署安装方法 本教程使用的硬件平台是全志A40I,操作系统采用的是ubuntu18.04,内核是3.10.108(内核很老导致docker兼容性不好) 1.获取最新版本的 ...

  2. [嵌入式基础]-arm架构和x86架构区别

    ARM架构过去称作进阶精简指令集机器(AdvancedRISCMachine,更早称作:AcornRISCMachine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设 ...

  3. ARM系列处理器和架构

    从一只ARM到另一只ARM! ARM处理器和架构 当前可用的处理器 ARM1 ARM2 ARM3 ARM4和5 ARM6 ARM7 ARM8 强壮有力的ARM ARM9 ARM10 ARM架构 v1 ...

  4. ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析

    ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析 PSA要求是什么? C1.1 硬件级别的隔离环境 C1.2 安全启动 C1.3 生命周期管理 C1.4 密钥管理 差异总结 熟悉A ...

  5. ARM架构版本及处理器系列详细介绍

    目录 1 ARM发展 2 ARM版本 3ARM系列说明 3.1ARM7系列 3.2ARM9系列 3.3ARM11系列 3.4Cortex-R系列 3.5Cortex-M系列 3.6Cortex-A系列 ...

  6. 从零开始系列(四):一文看懂arm架构和x86架构有什么区别

    从零开始系列(四):一文看懂arm架构和x86架构有什么区别 相关系列文章推荐:   从零开始系列(一):在github上搭建自己的博客   从零开始系列(二):数据库基础篇   从零开始系列(三): ...

  7. 华为鲲鹏arm架构linux服务器安装mysql教程

    遇到一个项目是华为鲲鹏arm架构linux服务器(CentOS 7.5 with ARM),刚开始一直按照X86的教程在执行,后来mysql的本地编译命令出现了二进制的错误,于是想到了这个是鲲鹏arm ...

  8. 【优化系列】汇编优化技术(六):ARM架构64位(AARCH64)汇编优化及demo

    DATE:2021.8.15 文章目录 1.arm架构64位优化基础知识 2.ARMv8/AArch64 neon指令格式 3.ARM相关编译参数 4.查看状态标记位NZCV的方法 5.A64指令集特 ...

  9. 超详细的ARM架构适配介绍

    本文主要介绍云联壹云平台如何适配ARM,并运行在ARM CPU架构的机器上. 背景介绍 1.平台服务运行架构 云联壹云平台采用容器化,分布式的架构运行在 Kubernetes(K8s)之上.下面是平台 ...

  10. Arm架构CPU服务器

    Arm架构CPU服务器 CPU作为计算机设备的运算和控制核心,负责指令读取.译码与执行,因研发门槛高.生态构建难,被认为是集成电路产业中的"珠穆朗玛峰".纵观全球,Intel.AM ...

最新文章

  1. redis单机版安装
  2. 初步了解mac下C源码的编译过程
  3. 在阿里写了8年代码后,我才明白这些道理
  4. 窗体中实现按 回车键 跳到下一个可选的TabIndex控件
  5. macos 此服务器的证书无效_网易出现重大失误,忘记续费HTTPS证书导致大量用户受影响...
  6. 【网络安全工程师面试合集】——网络安全基础知识大总结
  7. php根据类名字符串,PHP 5.5 新特性 ::class 获取类名字符串
  8. 再回首,Java温故知新(六):Java基础之变量
  9. windows无法完成格式化U盘与U盘修复对几种解决方法
  10. 打印机扫描显示计算机故障或繁忙,打印机无法扫描_如何用打印机进行扫描,如何用打印机扫描文件...
  11. linux根据uid反查用户名
  12. ios-AddressBook框架
  13. redhat linux rsh设置
  14. 使用word进行图片的有序命名
  15. ANTV/G6 绘制网络拓扑图
  16. 泰拉瑞亚指令代码大全 无限钱无敌作弊码一览
  17. 避免使用std::dynamic_pointer_cast
  18. 达梦数据库表新增字段速度测试
  19. PCB工程师分享——PCB布线技巧和心得
  20. java毕业设计物资物流管理系统Mybatis+系统+数据库+调试部署

热门文章

  1. 19|雨季来临,聊些轻松的吧
  2. 计算机断层扫描法原理,能谱计算机断层扫描成像的概念和基本原理.PDF
  3. 企业内部网路怎么防止网络出现环路?
  4. LiJian-kaldi搭建在线语音识别系统 资料汇总
  5. 分享几个免费IP地址查询API接口
  6. Flutter 自定义下拉菜单
  7. 字节跳动测开发实习面试
  8. ps端午节计算机辅助设计,PS教程:端午节的字体设计
  9. CSS相对定位和绝对定位
  10. Mac删除Python缓存文件