openeuler大ep部署

#docker #skopeo

1.安装k8s

首先配置好k8s相关的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.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
EOF

yum install -y kubelet-1.23.0-00 kubeadm-1.23.0-00 kubectl-1.23.0-00
kubelet --version

安装k8s基础镜像

linux主机如果没法连接到k8s镜像仓库
可以先本地机器下载好相关镜像之后导入到远程服务器

#!/bin/bash

IMAGES=(
  "registry.k8s.io/kube-apiserver:v1.23.0"
  "registry.k8s.io/kube-controller-manager:v1.23.0"
  "registry.k8s.io/kube-scheduler:v1.23.0"
  "registry.k8s.io/kube-proxy:v1.23.0"
  "registry.k8s.io/etcd:3.5.0-0"
  "registry.k8s.io/pause:3.6"
  "registry.k8s.io/coredns/coredns:v1.8.6"
  "docker.io/calico/node:v3.23.5"
  "docker.io/calico/cni:v3.23.5"
  "docker.io/calico/kube-controllers:v3.23.5"
)

PLATFORM=linux/arm64

for IMAGE in "${IMAGES[@]}"; do
  echo "Pulling $IMAGE for $PLATFORM"
  docker pull --platform=$PLATFORM "$IMAGE"
done

echo "Saving to k8s-arm64.tar"
docker save -o k8s-arm64.tar "${IMAGES[@]}"

echo "Removing local images"
for IMAGE in "${IMAGES[@]}"; do
  docker image rm "$IMAGE"
done

上面安装涉及到先导入到本地机器系统,也需要安装docker desktop,下面可以通过skopeo来直接下载到本地,不需要导入到系统
这里直接下载,但是会存在问题是镜像文件会丢失repo和tag信息

#!/bin/bash

# 镜像列表
IMAGES=(
  "registry.k8s.io/kube-apiserver:v1.23.0"
  "registry.k8s.io/kube-controller-manager:v1.23.0"
  "registry.k8s.io/kube-scheduler:v1.23.0"
  "registry.k8s.io/kube-proxy:v1.23.0"
  "registry.k8s.io/etcd:3.5.1-0"
  "registry.k8s.io/pause:3.6"
  "registry.k8s.io/coredns/coredns:v1.8.6"
  "docker.io/calico/node:v3.23.5"
  "docker.io/calico/cni:v3.23.5"
  "docker.io/calico/kube-controllers:v3.23.5"
)

ARCH=arm64
OS=linux

mkdir -p k8s-arm64-images

for IMAGE in "${IMAGES[@]}"; do
  # 提取镜像名称和版本(用于生成文件名)
  NAME=$(basename "$(echo $IMAGE | cut -d':' -f1)")
  TAG=$(echo $IMAGE | cut -d':' -f2)
  FILE="k8s-arm64-images/${NAME}-${TAG}.tar"

  echo "📦 正在保存 $IMAGE 为 $FILE"
  skopeo copy \
    --override-arch=$ARCH \
	--override-os=$OS \
    docker://$IMAGE \
    docker-archive:$FILE
done

echo "✅ 所有镜像已保存到 k8s-arm64-images/ 目录中"

使用下面脚本来显式指定写入repo和tag信息到镜像文件

#!/bin/bash

# 镜像列表
IMAGES=(
  "registry.k8s.io/kube-apiserver:v1.23.0"
  "registry.k8s.io/kube-controller-manager:v1.23.0"
  "registry.k8s.io/kube-scheduler:v1.23.0"
  "registry.k8s.io/kube-proxy:v1.23.0"
  "registry.k8s.io/etcd:3.5.1-0"
  "registry.k8s.io/pause:3.6"
  "registry.k8s.io/coredns/coredns:v1.8.6"
  "docker.io/calico/node:v3.23.5"
  "docker.io/calico/cni:v3.23.5"
  "docker.io/calico/kube-controllers:v3.23.5"
)

ARCH=arm64
OS=linux

mkdir -p k8s-arm64-images

for IMAGE in "${IMAGES[@]}"; do
  # 分离 repo 和 tag
  REPO=$(echo "$IMAGE" | cut -d':' -f1)
  TAG=$(echo "$IMAGE" | cut -d':' -f2)
  
  # 只取镜像名最后一段用于文件名,如 "kube-apiserver"
  NAME=$(basename "$REPO")

  FILE="k8s-arm64-images/${NAME}-${TAG}.tar"

  echo "📦 正在保存 $IMAGE 为 $FILE"

  skopeo copy \
    --override-arch=$ARCH \
    --override-os=$OS \
    docker://$IMAGE \
    "docker-archive:${FILE}:${REPO}:${TAG}"
done

echo "✅ 所有镜像已保存到 k8s-arm64-images/ 目录中"

拉起ubuntu基础镜像

skopeo copy \
  --override-arch=arm64 \
  --override-os=linux \
  docker://docker.io/library/ubuntu:22.04 \
  docker-archive:ubuntu-22.04-arm64.tar:ubuntu:22.04

k8s初始化

mkdir /var/lib/kubelet
swapoff -a
kubeadm reset -f
rm -rf /etc/cni/net.d /root/.kube/
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY

以下只需要主节点执行

kubelet_version='1.23.0'
host_ip=175.99.1.2
kubeadm init --kubernetes-version=v${kubelet_version} --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=${host_ip}
mkdir -p $HOME/.kube
cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

all_label.sh

master=