前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(二)

信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(二)

作者头像
编码如写诗
发布2024-08-30 11:33:11
3572
发布2024-08-30 11:33:11
举报
文章被收录于专栏:编码如写诗

上一篇中已经介绍了如何基于在线环境制作离线安装包。介于篇幅限制,离线部署部分介绍不够完善。本篇将讲解离线部署的一些问题和注意事项。 天行1st,公众号:编码如写诗信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)

1. 本文介绍

本文主要介绍以下两项

  • 离线部署k8s和kubesphere
  • 修复arm适配中的问题

2. 离线部署

服务器配置

主机名

IP

CPU

OS

核数

内存

用途

master-1

192.168.10.2

Kunpeng-920

Kylin V10 SP2

32H

64GB

离线环境 KubeSphere/k8s-master

master-2

192.168.10.3

Kunpeng-920

Kylin V10 SP2

32H

64GB

离线环境 KubeSphere/k8s-master

master-3

192.168.10.4

Kunpeng-920

Kylin V10 SP2

32H

64GB

离线环境 KubeSphere/k8s-master

实战环境涉及软件版本信息

  • 服务器芯片:Kunpeng-920
  • 操作系统:麒麟V10 SP2/SP3 aarch64
  • Docker: 24.0.7
  • Harbor: v2.7.1
  • KubeSphere:v3.3.1
  • Kubernetes:v1.22.12
  • KubeKey: v2.3.1

制作好的离线包

实际上只要kubesphere.tar.gz就够了,为了大家熟悉过程和展示,这里进行了拆分。百度云地址:https://pan.baidu.com/s/1lKtCRqxGMUxyumd4XIz4Bg?pwd=4ct2‍

2.1 卸载podman

所有节点都需要操作

代码语言:javascript
复制
yum remove podman -y

2.2 初始化系统

所有节点都需要操作。安装k8s的依赖包,上传k8s-init-Kylin_V10-arm.tar.gz并解压后执行install.sh。

install.sh内容

代码语言:javascript
复制
[root@node1 k8s-init]# cat install.sh 
#!/bin/bash
# 

rpm -ivh *.rpm --force --nodeps

2.3 安装docker

2.3~2.6 为拆解步骤,这里分步介绍是为明确安装的服务。该阶段已合并到2.7中执行。

只在安装ks的一个节点操作即可,上传docker-24.0.7-arm.tar.gz解压后执行install.sh,install内容如下:

代码语言:javascript
复制
[root@node1 kubesphere]# ls
create_project_harbor.sh  docker-24.0.7-arm.tar.gz  harbor-arm.tar.gz  install.sh  k8s-init  k8s-init-Kylin_V10-arm.tar.gz  ks3.3.1-images.tar.gz  ks3.3.1-offline  push-images.sh
[root@node1 kubesphere]# tar zxf docker-24.0.7-arm.tar.gz 
[root@node1 kubesphere]# cd docker/
[root@node1 docker]# ls
docker-24.0.7.tgz  docker-compose  docker.service  install.sh
[root@node1 docker]# cat install.sh 
#!/bin/bash
# 

tar zxf docker-24.0.7.tgz
cp -p docker/* /usr/bin

cp docker.service /etc/systemd/system/
chmod +x /etc/systemd/system/docker.service

systemctl daemon-reload
systemctl start docker
systemctl enable docker.service

cp docker-compose /usr/local/bin
cp docker-compose /usr/bin
chmod +x /usr/local/bin/docker-compose
chmod +x /usr/bin/docker-compose

2.4 安装harbor

上传harbor-arm.tar.gz解压后执行install.sh,install内容如下:

代码语言:javascript
复制
[root@node1 kubesphere]# tar zxf harbor-arm.tar.gz 
[root@node1 kubesphere]# cd harbor/
[root@node1 harbor]# ls
create_project_harbor.sh  harbor-offline-installer-arm-v2.7.1.tar.gz  helm-push_0.10.4_linux_arm64.tar.gz  helm.sh  install.sh  ssl.zip
[root@node1 harbor]# cat install.sh 
#!/bin/bash
# 

read -p "请输入harbor仓库要按照的IP地址:" IP
do_ssl() {
    unzip ssl.zip
    mkdir -p /etc/ssl/registry/ssl
    cp ssl/* /etc/ssl/registry/ssl/
}

do_docker() {

    mkdir -p /etc/docker/
    cat > /etc/docker/daemon.json <<EOF
{
  "log-opts": {
    "max-size": "5m",
    "max-file":"3"
  },
  "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["dockerhub.kubekey.local","core.harbor.dked:30002"]
}
EOF
    
    systemctl daemon-reload && systemctl restart docker
    sleep 10
}

do_harbor() {
    tar zxf harbor-offline-installer-arm-v2.7.1.tar.gz
    mv harbor /opt
    cd /opt/harbor/
    ./install.sh  --with-chartmuseum --with-trivy

    echo "$IP  dockerhub.kubekey.local" >> /etc/hosts
    echo "$IP  core.harbor.dked" >> /etc/hosts

    docker login -u admin -p Harbor12345 core.harbor.dked:30002
    docker login -u admin -p Harbor12345 dockerhub.kubekey.local
}

do_ssl
do_docker
do_harbor

2.5 推送k8s和ks相关镜像到harbor

执行create_project_harbor.sh和push-images.sh

create_project_harbor.sh:

代码语言:javascript
复制
#!/usr/bin/env bash   
url="https://dockerhub.kubekey.local"  #修改url的值为https://dockerhub.kubekey.local
user="admin"
passwd="Harbor12345"
   
harbor_projects=(
    kubesphereio
    kubesphere
    other
    csmp
)
   
for project in "${harbor_projects[@]}"; do
    echo "creating $project"
    curl -u "${user}:${passwd}" -X POST -H "Content-Type: application/json" "${url}/api/v2.0/projects" -d "{ \"project_name\": \"${project}\", \"public\": true}" -k #curl命令末尾加上 -k
done

push-images.sh:

代码语言:javascript
复制
[root@node1 kubesphere]# cat push-images.sh 
#!/bin/bash
# 

docker load < ks3.3.1-images.tar.gz

docker login -u admin -p Harbor12345 dockerhub.kubekey.local

docker push dockerhub.kubekey.local/kubesphereio/ks-console:v3.3.1
docker push dockerhub.kubekey.local/kubesphereio/ks-controller-manager:v3.3.1
docker push dockerhub.kubekey.local/kubesphereio/ks-installer:v3.3.1
docker push dockerhub.kubekey.local/kubesphereio/ks-apiserver:v3.3.1
docker push dockerhub.kubekey.local/kubesphereio/openpitrix-jobs:v3.3.1
docker push dockerhub.kubekey.local/kubesphereio/alpine:3.14
docker push dockerhub.kubekey.local/kubesphereio/kube-apiserver:v1.22.12
docker push dockerhub.kubekey.local/kubesphereio/kube-scheduler:v1.22.12
docker push dockerhub.kubekey.local/kubesphereio/kube-proxy:v1.22.12
docker push dockerhub.kubekey.local/kubesphereio/kube-controller-manager:v1.22.12
docker push dockerhub.kubekey.local/kubesphereio/provisioner-localpv:3.3.0
docker push dockerhub.kubekey.local/kubesphereio/linux-utils:3.3.0
docker push dockerhub.kubekey.local/kubesphereio/kube-controllers:v3.23.2
docker push dockerhub.kubekey.local/kubesphereio/cni:v3.23.2
docker push dockerhub.kubekey.local/kubesphereio/pod2daemon-flexvol:v3.23.2
docker push dockerhub.kubekey.local/kubesphereio/node:v3.23.2
docker push dockerhub.kubekey.local/kubesphereio/kube-state-metrics:v2.5.0
docker push dockerhub.kubekey.local/kubesphereio/fluent-bit:v1.8.11
docker push dockerhub.kubekey.local/kubesphereio/prometheus-config-reloader:v0.55.1
docker push dockerhub.kubekey.local/kubesphereio/prometheus-operator:v0.55.1
docker push dockerhub.kubekey.local/kubesphereio/thanos:v0.25.2
docker push dockerhub.kubekey.local/kubesphereio/prometheus:v2.34.0
docker push dockerhub.kubekey.local/kubesphereio/fluentbit-operator:v0.13.0
docker push dockerhub.kubekey.local/kubesphereio/elasticsearch-oss:6.8.22
docker push dockerhub.kubekey.local/kubesphereio/node-exporter:v1.3.1
docker push dockerhub.kubekey.local/kubesphereio/kubectl:v1.22.0
docker push dockerhub.kubekey.local/kubesphereio/notification-manager:v1.4.0
docker push dockerhub.kubekey.local/kubesphereio/notification-tenant-sidecar:v3.2.0
docker push dockerhub.kubekey.local/kubesphereio/notification-manager-operator:v1.4.0
docker push dockerhub.kubekey.local/kubesphereio/alertmanager:v0.23.0
docker push dockerhub.kubekey.local/kubesphereio/kube-rbac-proxy:v0.11.0
docker push dockerhub.kubekey.local/kubesphereio/docker:19.03
docker push dockerhub.kubekey.local/kubesphereio/pause:3.5
docker push dockerhub.kubekey.local/kubesphereio/configmap-reload:v0.5.0
docker push dockerhub.kubekey.local/kubesphereio/snapshot-controller:v4.0.0
docker push dockerhub.kubekey.local/kubesphereio/kube-rbac-proxy:v0.8.0
docker push dockerhub.kubekey.local/kubesphereio/coredns:1.8.0
docker push dockerhub.kubekey.local/kubesphereio/log-sidecar-injector:1.1
docker push dockerhub.kubekey.local/kubesphereio/k8s-dns-node-cache:1.15.12
docker push dockerhub.kubekey.local/kubesphereio/elasticsearch-curator:v5.7.6
docker push dockerhub.kubekey.local/kubesphereio/mc:RELEASE.2019-08-07T23-14-43Z
docker push dockerhub.kubekey.local/kubesphereio/minio:RELEASE.2019-08-07T01-59-21Z
docker push dockerhub.kubekey.local/kubesphereio/defaultbackend-amd64:1.4
docker push dockerhub.kubekey.local/kubesphereio/redis:5.0.14-alpine
docker push dockerhub.kubekey.local/kubesphereio/haproxy:2.3

2.6 部署k8s和kubesphere

上传ks3.3.1-offline,修改kubesphere-v331-v12212.yaml中节点信息,后执行install.sh

代码语言:javascript
复制
[root@node1 ks3.3.1-offline]# cat install.sh 
#!/usr/bin/env bash
rm -rf ./kubekey/pki/*
./kk create cluster -f kubesphere-v331-v12212.yaml --with-packages

2.7 简化2.3~2.6

2.3~2.6可合并执行:上传kubesphere.tar.gz解压后修改ks3.3.1-offline/kubesphere-v331-12212.yaml节点信息后执行install.sh:

代码语言:javascript
复制
[root@node1 kubesphere]# cat install.sh 
#!/usr/bin/env bash
read -p "请先修改机器配置文件ks3.3.1-offline/kubesphere-v331-v12212.yaml中相关IP地址,是否已修改(yes/no)" B 
do_k8s_init(){
  echo "--------开始进行依赖包初始化------"
  tar zxf k8s-init-Kylin_V10-arm.tar.gz
  cd k8s-init && ./install.sh
  cd -
#  rm -rf k8s-init
}

install_docker(){
  echo "--------开始安装docker--------"
  tar zxf docker-24.0.7-arm.tar.gz
  cd docker && ./install.sh
  cd -

}
install_harbor(){
  echo "-------开始安装harbor----------"
  tar zxf  harbor-arm.tar.gz
  cd harbor && ./install.sh
  cd -
  echo "--------开始推送镜像----------"
  source create_project_harbor.sh
  source push-images.sh
  echo "--------镜像推送完成--------"
}
install_ks(){
  echo "--------开始安装kubesphere--------"
#  tar zxf ks3.3.1-offline.tar.gz
  cd ks3.3.1-offline && ./install.sh
}

if [ "$B" = "yes" ] || [ "$B" = "y" ]; then
    do_k8s_init
    install_docker
    install_harbor
    install_ks
else
    echo "请先配置集群配置文件"
    exit 1
fi

等待大约10分钟左右会看到部署成功的消息,若有报错可按以下步骤排查。

3. 遇到的问题

制作离线安装包时,由于着急解决问题,有些问题并未记录。制作过程或者安装过程如有问题,欢迎留言反馈。

3.1 安装ks时coredns报错架构不匹配

根据网友反馈,安装时报错coredns架构不匹配,通过inspect查看确实为"Architecture": "amd64",可是我的两套集群却没报错,很奇怪。本地windows到hub.docker.com拉取coredns/coredns --platform arm64发现,除1.11.0识别为arm外其他都是amd64,比较费解,没搞明白为什么。如若出现此问题可使用1.11.0版本重命名为1.8.0

3.2 nodelocaldns问题

通过查看部署日志,卡在deploying minio。

原因:

  • 查看节点是否已配置dns
  • 是否每个节点卸载了podman

3.3 NFS问题

鲲鹏麒麟v10默认自带了nfs,需要将nfs添加到开机自启动。kylin V10 sp2/sp3启动nfs-server过程中如遇到错误,可通过以下方式排查。主要启动其nfs-idmapd.service依赖服务。

代码语言:javascript
复制
#查看nsf服务的依赖服务
systemctl list-dependencies nfs-server.service
#启动nsf依赖服务
systemctl start nfs-idmapd.service
#设置开机自启动
systemctl enable nfs-server rpcbind --now
#客户端

若nfs依赖服务中还有其他依赖异常,可通过麒麟应用商店下载对应版本rpm包

https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/aarch64/Packages/

3.4 日志es/opensearch

安装ks时启用了日志插件,但是没有es相关镜,因为我司使用的opensearch。若使用es可自行下载es-arm镜像替换。

fluent-bit问题,默认的arm版为1.8.11,该版本在鲲鹏+麒麟时会因为系统的pagesize报错,可使用2.0.6版本。

使用opensearch时,需要替换fluent-bit保密字典中的内容,具体参照 天行1st,公众号:编码如写诗KubeSphere3.3.1更换ES为OpenSearch

代码语言:javascript
复制
[Output]
    Name    es
    Match_Regex    (?:kube|service)\.(.*)
    Host    opensearch-cluster-data.kubesphere-logging-system.svc
    Port    9200
    HTTP_User    admin
    HTTP_Passwd    admin
    Logstash_Format    true
    Logstash_Prefix    ks-whizard-logging
    Time_Key    @timestamp
    Suppress_Type_Name    true
    tls    On
    tls.verify    false

4. 总结

本文主要补充说明了在鲲鹏CPU和ky10.aarch64操作系统离线安装的步骤和遇到的一些问题。

离线安装可简化为

  • 卸载podman
  • 安装k8s依赖包
  • 执行kubesphere.tar.gz中的install.sh

愿为国产发展贡献点滴力量,加油中国!加油kubesphere!

点击查看原文,获取制作好的ks离线安装包。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编码如写诗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 本文介绍
  • 2. 离线部署
    • 2.2 初始化系统
      • 2.3 安装docker
        • 2.4 安装harbor
          • 2.5 推送k8s和ks相关镜像到harbor
            • 2.6 部署k8s和kubesphere
              • 2.7 简化2.3~2.6
              • 3. 遇到的问题
                • 3.1 安装ks时coredns报错架构不匹配
                  • 3.2 nodelocaldns问题
                    • 3.3 NFS问题
                      • 3.4 日志es/opensearch
                      • 4. 总结
                      相关产品与服务
                      容器服务
                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档