银河麒麟v10-arm离线部署k8s集群(v1.23.4)

简介: 银河麒麟v10-arm离线部署k8s集群(v1.23.4)

离线部署的前提(亲测成功,其他的不保证):

       麒麟系统的内核: 4.19.90-25.2.v2101.gfb01.ky10.aarch64

       Docker : v 20.10.7

       k8s:v1.23.4

另外,k8s部署的服务器内存建议预留大一些。

准备相关的包:ipvsadm包(ipvsadm),

docker的二进制包(docker-二进制包),

k8s组件的rpm包(k8s-rpm),

k8s相关的镜像文件(k8s-image),

k8s环境的依赖项(k8s-dependency),

配置文件(yaml),

搭建本地仓库的镜像包(registry-image)

      未部署过k8s的环境,在部署过程中系统会提示缺少一些依赖项,相关的依赖项放置在k8s-dependency中。

      本次部署基于两台银河麒麟v10计算机,一台作为k8s的调度节点master,一台作为k8s的工作节点node,修改两台计算机的网络配置(如果是多网卡的话,配置ip对应的网络配置文件),设置静态ip:

cd  /etc/sysconfig/network-scripts     //网络配置文件在这里
ls
cp ./ifcfg-ens33 ./ifcfg-ens33.bak     //修改系统文件前养成做备份的习惯
vim ifcfg-ens33

修改以下内容:

BOOTPROTO=static
ONBOOT=yes

添加以下内容:

IPADDR=192.168.0.190
NETMASK=255.255.255.0
GATEWAY=192.168.0.2
DNS=8.8.8.8

修改域名解析文件:

vim /etc/resolv.conf
添加:
nameserver  8.8.8.8

重启网络服务:

service network restart
systemctl restart network

查看系统ip:

ip addr

两台计算机都要进行的操作(1,2,3,4,5)

1.查看麒麟系统的内核

uname -a

2. 环境初始化

1)主机名解析

vim /etc/hosts
192.168.0.190 master
192.168.0.193 node

190的机子:

vim /etc/hostname
master

193的机子:

vim /etc/hostname
node

  2) 时间同步(麒麟系统自带了chronyd)

systemctl start chronyd      //开启时间同步
systemctl enable chronyd     //设置时间同步开机自启
date    //验证

其实,时间同步这样操作并没有真的实现时间同步,也是在后续学习中知道的,实现时间同步的操作,我另外写了一篇小博客,感兴趣的请移步:

https://blog.csdn.net/q_hsolucky/article/details/125737244?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125737244%22%2C%22source%22%3A%22q_hsolucky%22%7D&ctrtid=GLSF3

   3) 禁用iptables和firewalld

systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

   4) 禁用selinux(linux下的一个安全服务,必须禁用)

vim /etc/selinux/config
SELINUX=disabled  

正常情况下selinux=enforcing

    5) 禁用swap分区(主要是注释最后一行)

vim /etc/fstab
 UUID=455cc753-7a60-4c17-a424-7741728c44a1 /boot    xfs     defaults        0 0
 /dev/mapper/centos-home /home                      xfs     defaults        0 0
# /dev/mapper/centos-swap swap                      swap    defaults        0 0 //注释这条

     6) 修改系统的内核参数

vim /etc/sysctl.d/kubernetes.conf
添加以下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

重新加载配置:

sysctl -p

也可能是下面的内容:

加载网桥过滤模块:

modprobe br_netfilter

查看网桥过滤模块是否加载成功:

lsmod | grep br_netfilter

    7)  配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。

麒麟系统自带了Ipset,因此安装ipvsadm:

rpm -ivh ipvsadm-1.31-2.ky10.aarch64.rpm

做软连接:

ln -sf /usr/lib64/libLLVM-7.so /usr/lib64/libLLVM-7.0.0.so

貌似不做也行,目前没看出会有影响。

添加需要加载的模块写入脚本文件:

cat <<EOF >  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

为脚本文件添加执行权限:

chmod +x /etc/sysconfig/modules/ipvs.modules

执行脚本文件:

/bin/bash /etc/sysconfig/modules/ipvs.modules

查看对应的模块是否加载成功:

lsmod | grep -e ip_vs -e nf_conntrack

  8)  重启服务器

上述操作修改了很多系统的配置文件,必须重启,不能省略。

reboot

3. 安装docker

具体操作参看docker-二进制安装部分。

https://blog.csdn.net/q_hsolucky/article/details/124253860?spm=1001.2014.3001.5501

4. 安装k8s组件

rpm -ivh *.rpm

可能会提示缺少conntrack和socat依赖项:

需要安装k8s-dependency下的包:

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

重新安装k8s的组件rpm包:

rpm -ivh *.rpm

配置kubelet的cgroup:

vim /etc/sysconfig/kubelet
添加:
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置kubelet开机自启

systemctl enable kubelet

会有创建link的信息生成。

查看安装的k8s相关的包:

rpm -qa | grep kube

5. 准备镜像

(k8s组件及网络插件calico及界面管理工具kuboard)

加载k8s集群镜像(在镜像所在的文件夹执行下面的命令):

给dockerload.sh文件添加执行权限并运行:

chmod +x dockerload.sh
./dockerload.sh

查看镜像加载结果:

docker images

k8s.gcr.io/coredns需要重打标签:

docker tag k8s.gcr.io/coredns:1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6

最终镜像结果如下:

6. 在master上操作

创建集群:

kubeadm init \
--kubernetes-version=v1.23.4 \
    --pod-network-cidr=10.244.0.0/16 \
    --service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.0.190

出现集群创建成功:

按照提示进行操作:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7. 在node1上操作

把创建集群最下面的命令粘贴过来:

kubeadm join.....   //每个人的都不一样,请复制自己的

出现可以使用kubectl get nodes查看节点信息证明集群初步搭建好了

另外加入节点时,需要相应的kubeadm join命令,可能会有没有及时记下集群初始化的命令或者过了几天后又需要增加节点的情况,临时生成的token只有24小时时效,使用kubeadm token list查看token没有结果时,说明token过期,需要重新生成:

kubeadm token create --print-join-command (生成临时的token,若生成永久token,再加上 --ttl=0)

报错ipv4的问题,请修改:

net.ipv4.ip_forward=0需要将其值改为1,具体修改在/proc/sys/net/ipv4/ip_forward文件

8. 在master上查看节点信息

kubectl get nodes -o wide

至此,初步搭建好集群,master和node1的状态为Notready,原因是未安装网络插件。

9. 安装网络插件calico

(请按照自己的镜像包名字进行docker load)

加载calico镜像(在master,node1上均加载):

docker load < calico-kube-controllers.tar
docker load < calico-pod2daemon-flexvol.tar
docker load < calico-node.tar
docker load < calico-cni.tar

基于进行安装(在master上执行即可),在该文件所在目录下执行:

kubectl apply -f calico.yaml

ps:部署的时候由于服务器是多网卡不是很顺利,因此指定了calico的网卡,使用的话请注意修改为你自己的网卡名称。

稍等一会,查看节点状态,可以先看一下组件的状态:

kubectl get pod -n kube-system

Ps: 组件的状态为“初始化”或“容器在创建”时表示服务在启动过程中,不用着急,继续等一会,状态会变为running,说明k8s集群及组件服务都正常工作了。

组件的状态为“镜像拉取失败”等内容说明配置有问题或者镜像版本不匹配,

具体可以使用命令查看:

kubectl describe pod pod名称 -n kube-system

拉取镜像太慢导致net/http:TLS handshake timeout错误,重启docker服务:

service docker restart

pod状态为running后查看节点的状态:

kubectl get nodes
kubectl get nodes -o wide

此时应该为ready,不代表部署成功了,还是要看看kube-system下pob的状态

ready,不代表部署成功了,还是要看看kube-system下pob的状态,不要着急状态不是running,多等一会再次查看,直到所有组件的服务都为running:

kubectl get pod -n kube-system
kubectl get pod --all-namespaces -o wide

10. 安装界面化管理工具

在安装的节点上加载kuboard镜像,metrics-server的镜像包每个节点上都要有:

docker load < kuboard.tar
docker load < metrics-server_v0.5.0.tar

Ps: yaml文件对空格非常敏感,尽量不要动原始内容,不要随便点空格

安装(在master上执行):

kubectl apply -f kuboard-v3.yaml

Kuboard-v3版本使用默认的账号密码登录:

账号:admin

密码:Kuboard123

访问方式:http://192.168.0.190:30080

将下面的命令信息粘贴到master上,会生成kuboard-agent.yaml文件,安装文件:

kubectl apply -f kuboard-agent.yaml

集群没有成为已就绪状态,执行该页面验证命令

Metrics-server是集群核心监控数据的聚合器,通俗的说,它存储了集群中各节点的监控数据,并且提供了API以供分析和使用。

Metrics-server在kubernetes集群中表现为一个deployment对象。不过准确的说,它是deployment,service,clusterrole,clusterrolebinding,apiservice,rolebinding资源对象的综合体。

Metrics-server的主要作用为为kube-scheduler,HorizontalPodAutoscaler等k8s核心组件,以及kubectl top命令和dashboard等UI组件提供数据来源。

在master上执行:

kubectl apply -f metrics-server-v0.5.0.yaml

污点

Master一般默认作为调度节点,让其工作的话 ,将master作为node加入node:

kubectl taint nodes --all node-role.kubernetes.io/master-

给master打上污点:NoSchedule:一定不能被调度

kubectl taint nodes k8s-master1 node-role.kubernetes.io/master=NoSchedule-

查看污点:

kubectl describe node k8s-master1 | grep Taints

最终部署好的k8s通过可视化管理工具kuboard查看结果:

总结:k8s离线部署也是趟了n多坑,至今还会遇到各种问题,希望可以和谐的与大家共同探讨、学习与进步,撒花~~~~,可以正确安装的话希望可以点个赞,非常感谢~~~

如果需要上述的安装包的话,请移步:

k8s-v1.23.4-arm版本的离线包-kubernetes文档类资源-CSDN下载

PS: 需要的人多的话,每个人都发邮箱实在有些麻烦,我有点懒,不介意的话可以用几个积分下载一下。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
17天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
2天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
22 12
|
2天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
|
2天前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
|
9天前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
介绍如何使用ACK Edge与虚拟节点满足DeepSeek部署的弹性需求。
|
22天前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
23天前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
12天前
|
Kubernetes 持续交付 数据库
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
|
11天前
|
存储 网络协议 网络安全
【Azure 环境】部署ARM Linked Template时候 Blob SAS Token不能正常工作
Unable to retrieve url https://<stroage account name>.blob.core.chinacloudapi.cn/arm/azuredeploy.json?sp=r 'st' is not recognized as an internal or external command, operable program or batch file. 'se' is not recognized as an internal or external command, operable program or batch file. 'spr' is no
|
17天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。

热门文章

最新文章