银河麒麟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: 需要的人多的话,每个人都发邮箱实在有些麻烦,我有点懒,不介意的话可以用几个积分下载一下。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
2天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
2天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
2天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
2天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
|
2天前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
|
3天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
3天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
|
7天前
|
Kubernetes 应用服务中间件 nginx
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
【博客大赛】搭建一套完整的企业级Kubernetes高可用集群(v1.20,二进制)
|
7天前
|
Kubernetes 负载均衡 应用服务中间件
部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下
部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下
部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下

推荐镜像

更多