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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 银河麒麟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搭建和管理企业级网站应用
目录
相关文章
|
2天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
45 17
|
1天前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
|
4天前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
8天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
20天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
17天前
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
30 1
|
1天前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
|
1天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
|
5月前
|
数据处理 编译器 数据库
x64 和 arm64 处理器架构的区别
x64 和 arm64 处理器架构的区别
|
2月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
下一篇
无影云桌面