前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >鲲鹏+欧拉部署KubeSphere3.4

鲲鹏+欧拉部署KubeSphere3.4

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

1.安装docker

1.1 下载docker离线包

地址:https://download.docker.com/linux/static/stable/

进入aarch64目录,下载需要的docker版本

下载后上传至服务器解压

代码语言:javascript
复制
tar -xvf docker-20.10.7.tgz
# 将 docker 文件移动到 /usr/bin 目录下
cp -p docker/* /usr/bin

1.2 编写docker.service

代码语言:javascript
复制
vim docker.service

内容如下:

代码语言:javascript
复制

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
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 the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

添加到系统服务

代码语言:javascript
复制
# 将 docker.service 移到 /etc/systemd/system/ 目录
cp docker.service /etc/systemd/system/
# 设置 docker.service 文件权限
chmod +x /etc/systemd/system/docker.service
代码语言:javascript
复制

代码语言:javascript
复制
# 重新加载配置文件
systemctl daemon-reload

# 启动docker
systemctl start docker

# 设置 docker 开机自启
systemctl enable docker.service
代码语言:javascript
复制

1.3 验证docker的安装

2.安装KS

服务器配置 (华为云服务器)

主机名

IP

CPU

内存

master-1

192.168.0.115

4

8

master-2

192.168.0.150

4

8

master-3

192.168.0.58

4

8

2.1下载KK

在master节点操作(后续没有特殊说明都是在此节点)下载最新版的 KubeKey

代码语言:javascript
复制
export KKZONE=cn

curl -sfL https://get-kk.kubesphere.io | sh -
代码语言:javascript
复制

下载后查看kk版本,可以看到版本信息以及架构

代码语言:javascript
复制
[root@node1 kubekey]# ./kk version
kk version: &version.Info{Major:"3", Minor:"0", GitVersion:"v3.0.13-dirty", GitCommit:"ac75d3ef3c22e6a9d999dcea201234d6651b3e72", GitTreeState:"dirty", BuildDate:"2023-11-07T08:43:42Z", GoVersion:"go1.19.2", Compiler:"gc", Platform:"linux/arm64"}
[root@node1 kubekey]# 
代码语言:javascript
复制

查看 KubeKey 支持的 Kubernetes 版本列表

代码语言:javascript
复制
./kk version --show-supported-k8s
代码语言:javascript
复制

k8s 1.24后不再直接使用docker管理容器,我们为方便继续使用docker减少研发和运维工作量,使用1.22.12版本k8s

2.2创建k8s配置文件

代码语言:javascript
复制
./kk create config -f kubesphere-v340-v12212.yaml --with-kubernetes v1.22.12 --with-kubesphere v3.4.0

创建后编辑配置文件 kubesphere-v340-v12212.yaml,修改节点信息,hosts节点信息中添加arch为arm64

修改k8s中的containerManager为docker

代码语言:javascript
复制
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 192.168.0.115, internalAddress: 192.168.0.115, user: root, password: "123456", arch: arm64}
  - {name: node2, address: 192.168.0.150, internalAddress: 192.168.0.150, user: root, password: "123456", arch: arm64}
  - {name: node3, address: 192.168.0.58, internalAddress: 192.168.0.58, user: root, password: "123456", arch: arm64}
  roleGroups:
    etcd:
    - node1
    - node2
    - node3
    control-plane:
    - node1
    - node2
    - node3
    worker:
    - node1
    - node2
    - node3
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    internalLoadbalancer: haproxy

    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.22.12
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: docker
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  storage:
    openebs:
      basePath: /data/openebs/local # base path of the local PV provisioner
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []
代码语言:javascript
复制

2.3服务器基础配置和初始化

将kk拷贝到各节点服务器,执行

代码语言:javascript
复制
./kk init os
代码语言:javascript
复制

2.4部署

代码语言:javascript
复制
export KKZONE=cn
./kk create cluster -f kubesphere-v340-v12212.yaml
代码语言:javascript
复制

输入yes后开始执行安装部署

安装过程日志输出比较多,本文只展示重要的一点,一定要观察下载的二进制包,格式为 arm64(篇幅所限,只展示了部分日志输出)

代码语言:javascript
复制
Continue this installation? [yes/no]: yes
16:26:32 CST success: [LocalHost]
16:26:32 CST [NodeBinariesModule] Download installation binaries
16:26:32 CST message: [localhost]
downloading arm64 kubeadm v1.26.5 ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 43.3M  100 43.3M    0     0  1016k      0  0:00:43  0:00:43 --:--:-- 1065k
代码语言:javascript
复制

实际部署时如果不手工干预,必然会出现下面的情况 :

代码语言:javascript
复制
clusterconfiguration.installer.kubesphere.io/ks-installer created
18:13:51 CST skipped: [ksp-master-3]
18:13:51 CST skipped: [ksp-master-2]
18:13:51 CST success: [ksp-master-1]
Please wait for the installation to complete:  <---<<
20:13:51 CST skipped: [ksp-master-3]
20:13:51 CST skipped: [ksp-master-2]
20:13:51 CST failed: [ksp-master-1]
error: Pipeline[CreateClusterPipeline] execute failed: Module[CheckResultModule] exec failed:
failed: [ksp-master-1] execute task timeout, Timeout=2h
代码语言:javascript
复制

当出现等待安装完成的滚动条后,应该立即新开终端,使用 kubectl get pod -A 关注所有 Pod 的部署情况。

根据报错信息,参考下文的「异常组件解决方案」及时排查解决创建和启动异常的组件。

3. 异常组件及解决方案

此处需要使用kubectl get pods -A查看服务部署在哪个节点,并到该节点重新拉取镜像。为高可用实现,建议每个节点都操作一遍。

3.1 解决 metrics-server 异常

这个异常是第一个要处理的,在 kk 部署任务的最后,出现等待部署完成的任务滚动条时就要关注,如果该 Pod 出现异常需要立即处理。

  • 获取适配的 ARM 版镜像(相同版本 KubeSphere 官方 ARM 版镜像
代码语言:javascript
复制
# 拉取 arm64 镜像
代码语言:javascript
复制
docker pull registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2-arm64  --platform arm64
代码语言:javascript
复制
镜像重新打 tag(可不做 )
代码语言:javascript
复制
代码语言:javascript
复制
# 删除 amd64 镜像
#docker rmi registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2

# 重新打 tag
# docker tag registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2-arm64 registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2
代码语言:javascript
复制
重新部署组件
代码语言:javascript
复制
代码语言:javascript
复制
# 修改 Deployment 使用的镜像,并重启
kubectl set image deployment/metrics-server metrics-server=registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2-arm64 -n kube-system
kubectl rollout restart deployment/metrics-server -n kube-system
代码语言:javascript
复制

3.2 解决 Argo CD 异常

  • 获取适配的 ARM 版镜像(相同版本 KubeSphere 官方 ARM 版镜像
代码语言:javascript
复制
# 找个相同版本的 ARM 架构的镜像
代码语言:javascript
复制
docker pull kubespheredev/argocd-applicationset-arm64:v0.4.1
代码语言:javascript
复制
镜像重新打 tag(为了保持镜像名称风格一致)
代码语言:javascript
复制
代码语言:javascript
复制
docker tag docker.io/kubespheredev/argocd-applicationset-arm64:v0.4.1 registry.cn-beijing.aliyuncs.com/kubesphereio/argocd-applicationset-arm64:v0.4.1
代码语言:javascript
复制
重新部署组件
代码语言:javascript
复制
代码语言:javascript
复制
# 修改 Deployment 使用的镜像,并重启
kubectl set image deployment/devops-argocd-applicationset-controller applicationset-controller=registry.cn-beijing.aliyuncs.com/kubesphereio/argocd-applicationset-arm64:v0.4.1 -n argocd
kubectl rollout restart deployment/devops-argocd-applicationset-controller -n argocd
代码语言:javascript
复制
验证新的 Pod 创建并启动成功
代码语言:javascript
复制
代码语言:javascript
复制
kubectl get pods -o wide -n argocd | grep applicationset-controller
代码语言:javascript
复制
3.3解决 Minio 异常

注意节点分配

  • 获取适配的 ARM 版镜像(相近版本 Minio 官方 ARM 版镜像
代码语言:javascript
复制
代码语言:javascript
复制
# 找个相近版本的 ARM 架构的镜像
# minio
docker pull minio/minio:RELEASE.2020-11-25T22-36-25Z-arm64

# mc
docker pull minio/mc:RELEASE.2020-11-25T23-04-07Z-arm64
代码语言:javascript
复制
  • 镜像重新打 tag
代码语言:javascript
复制
代码语言:javascript
复制
# minio
docker rmi registry.cn-beijing.aliyuncs.com/kubesphereio/minio:RELEASE.2019-08-07T01-59-21Z
docker tag docker.io/minio/minio:RELEASE.2020-11-25T22-36-25Z-arm64 registry.cn-beijing.aliyuncs.com/kubesphereio/minio:RELEASE.2019-08-07T01-59-21Z

# mc
docker rmi registry.cn-beijing.aliyuncs.com/kubesphereio/mc:RELEASE.2019-08-07T23-14-43Z
docker tag docker.io/minio/mc:RELEASE.2020-11-25T23-04-07Z-arm64 registry.cn-beijing.aliyuncs.com/kubesphereio/mc:RELEASE.2019-08-07T23-14-43Z
代码语言:javascript
复制
重新部署组件
代码语言:javascript
复制
代码语言:javascript
复制
# 重新部署,删除旧的 Pod,系统会自动重建(此步的操作也可以使用修改 minio 对应的 deployment 使用的镜像名称的方式)
kubectl delete pod minio-757c8bc7f-tlnts -n kubesphere-system
kubectl delete pod minio-make-bucket-job-fzz95 -n kubesphere-system
代码语言:javascript
复制
3.4解决组件异常通用方案

在部署 ARM 的 KubeSphere 和 Kubernetes 集群时,遇到的异常多数都是因为镜像架构不匹配造成的,当遇到本文没有涉及的异常组件时,可以参考以下流程解决。

  • 查看异常 Pod
  • 查看异常 Pod 的日志
  • 查看异常 Pod 使用的镜像
  • 查看异常 Pod 镜像架构
  • 获取适配的 ARM 版镜像
  • 镜像重新打 tag
  • 重新部署组件

当确定镜像架构没问题时,有些问题可以通过多次删除重建的方式解决。

4.日志收集

由于KubeSphere3.4抛弃了ES,使用了opensearch。由于项目中对接的是es,这里手动部署es。

先创建工作负载再创建服务(下面顺序只是参考)

4.1创建es服务

先开启日志审计组件,开启后在kubesphere-logging-system项目下新建服务名为elasticsearch-logging-data的服务

添加容器选择elasticsearch:7.17.14(该版本支持arm架构),端口设置9200

4.2修改fluent-bit配置

日志收集使用的fluent-bit守护进程,该进程将收集的日志发送的配置文件中的服务中。

修改配置字典fluent-bit-config中的fluent-bit.conf

ks3.4开启日志审计后默认配置为输出到opensearch,需要修改为新建的es服务

修改为3.3中的配置:

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.安装docker
    • 1.1 下载docker离线包
      • 1.2 编写docker.service
        • 1.3 验证docker的安装
          • 服务器配置 (华为云服务器)
      • 2.安装KS
        • 2.2创建k8s配置文件
          • 2.3服务器基础配置和初始化
            • 2.4部署
            • 3. 异常组件及解决方案
              • 3.1 解决 metrics-server 异常
                • 3.2 解决 Argo CD 异常
                • 4.日志收集
                  • 4.1创建es服务
                    • 4.2修改fluent-bit配置
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档