百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

off999 2025-02-18 12:50 23 浏览 0 评论

为什么要在 arm64 平台上部署 Kubernetes,而且还是鲲鹏 920 的架构。说来话长 。。。此处省略5000 字。

介绍下系统信息;

?架构:鲲鹏 920(Kunpeng920)

?OS:openEuler 20.03 (LTS-SP1)

?CPU:4c

?内存:16G

?硬盘:若干

整个过程虽然参考了鲲鹏论坛的帖子[1],不过还是颇费周折。

TL;DR

整个过程中要注意 arm64 平台上安装 Kubernetes 及网络组件,需要使用 arm64 版本的镜像。

环境配置

1.关闭 selinux

#临时关闭
setenforce 0
#永久关闭 SELINUX=disabled
vim /etc/sysconfig/selinux

2. 关闭swap分区

#临时关闭
swapoff -a
#永久关闭 注释 swap 行
vim /etc/fstab

3. 关闭防火墙

systemctl stop firewalld
ssystemctl disable firewalld

4. 网络配置

对iptables内部的nf-call需要打开的内生的桥接功能

vim /etc/sysctl.d/k8s.conf

修改如下内容:

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm_swappiness=0

修改完成后执行:

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

5. 添加 Kubernetes 源

在文件 /etc/yum.repos.d/openEuler.repo 中追加如下内容:

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装配置 iSula

yum install -y iSulad

修改 iSula 配置,打开文件 /etc/isulad/daemon.json,按照下面的部分:

{
"registry-mirrors": [
"docker.io"
],
"insecure-registries": [
"rnd-dockerhub.huawei.com"
],
"pod-sandbox-image": "k8s.gcr.io/pause:3.2", // 按照对应 Kubernetes 版本进行修改,后面会有说明
"network-plugin": "cni",
"cni-bin-dir": "",
"cni-conf-dir": "",
"hosts": [
"
unix:///var/run/isulad.sock"

]
}

修改之后重启 isulad

systemctl restart isulad
systemctl enable isulad

Kubernetes 部署

1. 安装 kubelet、kubeadm、kubectl

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

2. 准备镜像

由于某种未知的网络问题,会导致拉取 k8s.gcr.io 的镜像失败。需要提前下载好。

通过 kubeadm config images list --kubernetes-version 1.20.0 命令,获取初始化所需的镜像。这里需要注意通过 --kubernetes-version 参数指定版本号,否则 kubeadm 是打印出最高的 1.20.x 版本的初始化镜像(比如,1.20.x 的最高版本是 1.20.4)。

k8s.gcr.io/kube-apiserver:v1.20.0
k8s.gcr.io/kube-controller-manager:v1.20.0
k8s.gcr.io/kube-scheduler:v1.20.0
k8s.gcr.io/kube-proxy:v1.20.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.

对应的 arm64 版本镜像为:


k8s.gcr.io/kube-apiserver-arm64:v1.
20.0

k8s.gcr.io/kube-controller-manager-arm64:v1.
20.0

k8s.gcr.io/kube-scheduler-arm64:v1.
20.0

k8s.gcr.io/kube-proxy-arm64:v1.
20.0
k8s.gcr.io/pause-arm64:3.2
k8s.gcr.io/etcd-arm64:3.4.2-0 #支持 arm64 的 3.4.x 的最高版本
k8s.gcr.io/coredns:1.7.0 #无需特别的 arm64 版本

凭“运气”下载好镜像后,再通过 isula tag 命令修改成我们需要的:

isula tag k8s.gcr.io/kube-apiserver-arm64:v1.20.0 k8s.gcr.io/kube-apiserver:v1.20.0
isula tag k8s.gcr.io/kube-controller-manager-arm64:v1.20.0 k8s.gcr.io/kube-controller-manager:v1.20.0
isula tag k8s.gcr.io/kube-scheduler-arm64:v1.20.0 k8s.gcr.io/kube-scheduler:v1.20.0
isula tag k8s.gcr.io/kube-proxy-arm64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0
isula tag k8s.gcr.io/pause-arm64:3.2 k8s.gcr.io/pause:3.2
isula tag k8s.gcr.io/etcd-arm64:3.4.2-0 k8s.gcr.io/etcd:3.4.13-0
isula tag k8s.gcr.io/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0

3. 初始化 master 节点

注意需要指定 --cri-socket 参数使用 isulad 的 API。

kubeadm init --kubernetes-version v1.20.0 --cri-socket=/var/run/isulad.sock --pod-network-cidr=10.244.0.0/16

安装成功的话,会看到如下的内容

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

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 12.0.0.9:6443 --token 0110xl.lqzlegbduz2qkdhr \
--discovery-token-ca-cert-hash sha256:42b13f5924a01128aac0d6e7b2487af990bc82701f233c8a6a4790187ea064af

4. 配置集群环境

然后根据上面的输出进行配置

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

5. 向集群添加 Node 节点

重复前面的步骤:环境配置安装配置 iSula 以及 Kubernetes 部署 的 1 和 2。

同样使用上面输出的命令,再加上 --cri-socket 参数:

kubeadm join 12.0.0.9:6443 --token 0110xl.lqzlegbduz2qkdhr \
--discovery-token-ca-cert-hash \
--cri-socket=/var/run/isulad.sock

配置网络插件

完成 master 节点初始化并配置完集群环境后就可以执行 kubectl 的命令了。

kubectl get nodes
NAME STATUS ROLES AGE VERSION
host-12-0-0-9 NotReady control-plane,master 178m v1.20.0

看下节点,发现节点是 NotReady 的状态,这是因为网络插件还没安装。如果此时通过命令 journalctl -uf kubelet 查看 kubelet 的日志,会看到日志提示网络插件没有 ready。

kubelet.go:2160] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:iSulad: network plugin is not ready: cni config uninitialized

还记得 isulad 的配置么?

"network-plugin": "cni",
"cni-bin-dir": "", //使用默认 /opt/cni/bin
"cni-conf-dir": "", //使用默认 /etc/cni/net.d

实际上两个目录都是空的内容,如果目录不存在,先创建:

mkdir -p /opt/cni/bin
mkdir -p /etc/cni/net.d

这里使用 calico 做为网络插件,先下载 manifest。

wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

因为是 arm64 的硬件,同样需要使用对应 arm64 版本的镜像,先查看要用哪些镜像:

grep 'image:' calico.yaml | uniq
image: calico/cni:v3.14.2
image: calico/pod2daemon-flexvol:v3.14.2
image: calico/node:v3.14.2
image: calico/kube-controllers:v3.14.2

对应的 arm64 版本,操作步骤参考上面,不再赘述。

calico/cni:v3.14.2-arm64
calico/pod2daemon-flexvol:v3.14.2-arm64
calico/node:v3.14.2-arm64
calico/kube-controllers:v3.14.2-arm64

搞定镜像之后执行:

kubectl apply -f calico.yaml

之后就可以看到节点变成了 Ready 状态。

测试

通常都是用 nginx 的镜像创建 pod 进行测试,但是 nginx 并没有 arm64 的版本,这里就用 docker 官方提供的 hello-world 镜像。没错,支持 arm64。

注意:容器里的进程打印出信息就会退出了,因此 pod 会不停的重启,但用来测试是足够的。

kubectl run hello-world --image hello-world:latest

kubectl logs hello-world --previous

可以看到

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

总结

至此,我们就完成了在鲲鹏平台上基于 openEuler + iSula 部署 Kubernetes 的工作。

引用链接

[1] 鲲鹏论坛的帖子: https://bbs.huaweicloud.com/forum/thread-94271-1-1.html

相关推荐

python:从 12 分钟到 20 秒的奇迹之旅

大家好,我是一个常年与代码和数据打交道的程序员。最近,我经历了一次令人头疼的性能挑战。我的一个Python脚本需要处理一个超过一百万行的数据集,任务是对数据进行筛选、清洗并导出结果。然而,这个本该...

玩星露谷还能学Python?比刷题更上瘾的学习方法

最近朋友在玩星露谷,想起之前网上安利的星露谷编程游戏,然后就被带入坑了。本以为是普通种田游戏,结果全程用Python写代码通关,边摸鱼边学,打工人狂喜!举个游戏里怎么用Python?比如“自动收...

大数据计算学习,难度究竟几何?_大数据算法怎么学

大数据计算学习,难度究竟几何?在当今这个数字化的时代,大数据计算就像是一颗闪耀的明星,吸引着无数人的目光。很多小伙伴都对学习大数据计算充满了好奇,但又担心它的难度太高,自己学不会。那么,大数据计算学习...

不是活爹们 你们学Python都不刷项目的吗

在当今这个科技飞速发展的时代,编程语言就像是一把把神奇的钥匙,能为我们打开不同的职业大门。而Python,无疑是其中最耀眼的那一把。但现在问题来了,Python实操项目怎么学习呢?今天咱们就来好好唠唠...

Python的 10 个“天坑”:搞懂这些,才算真正迈入高手之列

引言:Python的“表里不一”作为一名从业多年的Python开发者,我深知Python的魅力所在:它语法简洁,入门门槛低,似乎几个月的学习就能让你自信满满地写出代码。然而,正是这种“表面上...

Python:开启编程世界的万能钥匙_python编程窗口怎么打开

一、引言嘿,老铁们!在当今的编程世界里,Python就像一把万能钥匙,能打开无数扇门。它以其简洁的语法、丰富的库和广泛的应用领域,受到了越来越多人的喜爱。无论是初出茅庐的编程小白,还是经验丰富的开发者...

这 6 个 Python 项目,带你从新手蜕变为实战高手

你是不是也有过这样的经历?刷完了YouTube上所有的Python教程,写了不下五六个“待办事项”应用,却依然感到自己离一个真正的开发者遥不可及。打开Udemy,课程列表满满当当,但总感觉...

用Python做WiFi嗅探?5分钟上手黑客同款技能(附代码)

本文是【Python网络安全】入门教学文章,建议收藏!适合安全学习者、网络审计员、Python进阶者阅读。有没有想过,你的电脑其实可以像个“监听器”,实时捕捉周围WiFi的蛛丝马迹?是的,哪怕你不是...

用 Python 守护你的 API:从入门到实践的安全监测指南

今天我们聊聊一个既技术又务实的话题——如何用Python进行API安全监测。在互联网快速发展的今天,API已成为现代应用程序的核心桥梁,从前端到后端,从移动端到物联网设备,几乎无处不在。可与...

学计算机专业,到底学些啥玩意儿?

#计算机专业##学计算机#跟你们说个真事儿:我表弟去年报志愿,听人说“学计算机能拿高薪”,咔咔就选了软件工程。结果开学第一周就给我发消息:“哥,啥是‘数据结构’?老师讲指针的时候,我感觉自己脑子像...

Python 12 个鲜为人知的宝藏库,让运维工作量减少 90%

Python12个鲜为人知的宝藏库,让运维工作量减少90%作为一名开发者,你可能对Jenkins流水线、繁琐的配置和午夜紧急回滚习以为常。尽管你可能是Python编程高手,但面对运维的日...

别小看“拖延症”:Python 惰性(Lazy)求值的 9 种用法

如果要选出一个最能体现Python优雅之处的特性,我会毫不犹豫地选择——惰性(lazy)求值。所谓惰性求值(LazyEvaluation),就是将计算延迟到真正需要的时候才执行。这种机制让P...

学 Python 就像谈恋爱:从暧昧到正式牵手,我用 8 个瞬间讲透了!

你有没有发现,人生里很多重要的事情,第一步都是最难的。第一次约会、第一次上台讲话、第一次进健身房……总有点怯场。学Python也一样。很多人一听到“编程”两个字,脑海里浮现的画面是:黑屏幕上飞...

Python 入门不用愁!5 个核心知识 + 3 个偷懒技巧,小白 3 天就能上手

提到编程,很多人会觉得“太难了,学不会”。但Python不一样,它就像编程语言里的“白话文”,语法简单、逻辑清晰,哪怕是零基础小白,掌握几个核心知识点和小技巧,也能快速上手。今天就带大家解锁...

信息技术专业学什么?从敲代码到搞安全,这些内容要掌握

提到信息技术专业,很多人第一反应是“写代码的”。其实这个专业的学习内容远不止于此,它更像一个“数字时代工具箱”,既教你搭建系统,也教你维护网络,还能让你搞懂数据背后的逻辑。下面就用大白话讲讲这个专...

取消回复欢迎 发表评论: