银河麒麟v10-sp3-x86系统安装k8s-1.30.4

X86-64 和arm架构的区别

x86-64 架构

设计理念:x86-64架构起源于Intel的x86架构,并对其进行了64位扩展。这种架构的设计侧重于高性能和灵活性,适合处理复杂的计算任务。

性能特点:x86-64架构的处理器通常提供高性能的计算能力,支持大量的内存和复杂的操作系统,如Windows、Linux和macOS。它们能够运行要求苛刻的应用程序,并适应各种高性能需求场景。

兼容性:x86-64架构保留了对32位x86软件的兼容性,这使得在升级到64位系统时,用户可以无缝地继续使用现有的32位应用程序。

ARM 架构

设计理念:ARM架构采用RISC(精简指令集计算)设计理念,指令集精简,执行速度快。这种设计使得ARM处理器在功耗和性能之间取得了良好的平衡。

性能特点:ARM处理器以低功耗著称,非常适合电池供电的设备。尽管在绝对性能上可能不如x86-64架构的处理器,但ARM处理器在能效比方面表现优异,即在消耗较少能量的同时提供足够的计算性能。

应用场景:ARM架构广泛应用于移动设备和嵌入式系统,如智能手机、平板电脑、智能手表、家用电器、汽车电子和工业控制等领域。

我们选用的系统为银河麒麟高级服务器操作系统(X86版)V10

系统优势

**1、**内生安全体系,支持可信计算、国密算法,通过CGL5.0,公安部等保四级等各类安全认证

2、银河麒麟高级服务器操作系统V10 SP3是一款直接面向kernel根社区,基于openEuler社区构建强安全、高可靠的国产Linux操作系统。具备自主平台优化、云能力增强、可管理性强、高安全可用性、生态广泛五大特性优势。

3、产品可支撑构建大型数据中心服务器高可用集群、负载均衡集群、分布式文件系统、虚拟化应用服务和容器云平台等。

4、配合银河麒麟服务器的评估和迁移能力,降低用户业务系统适配国产架构平台难度,实现业务系统中服务器操作系统的无感迁移。

5、持续性的安全漏洞更新管理服务,提供安全接管服务支撑。

6、银河麒麟高级服务器操作系统南向兼容主流国内外整机、板卡、外设,北向支撑国内外主流数据库、中间件、服务端组件、商业软件以及开源软件。

K8S 安装

准备四台主机

主机名分别为qilin1、qilin2、qilin3、qilin4 ip为192.168.16.28、31、32、33

qilin1、2、3为master 4核8G 40G qilin4 为node 16核 64G 90Gb

1、初始化安装k8s集群的实验环境

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm

2、关闭selinux,所有k8s机器均操作

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#备注:修改selinux配置文件之后,重启linux机器,selinux配置才能永久生效,重启之后,登录到机器,执行如下命令:

getenforce

#如果显示Disabled说明selinux已经关闭

3、配置机器主机名

在192.168.16.28上执行如下:

hostnamectl set-hostname qilin1 && bash

在192.168.16.31上执行如下:

hostnamectl set-hostname qilin2 && bash

在192.168.16.32上执行如下:

hostnamectl set-hostname qilin3 && bash

在192.168.16.33上执行如下:

hostnamectl set-hostname qilin4 && bash

4、配置主机hosts文件,相互之间通过主机名互相访问

192.168.16.28 qilin1

192.168.16.31 qilin2

192.168.16.32 qilin3

192.168.16.33 qilin4

5、配置主机之间无密码登录

在qilin1上执行ssh-keygen #一路回车,不输入密码

ssh-copy-id qilin2、3、4

6、关闭交换分区swap,提升性能

Swap交换分区是一种在计算机中使用的虚拟内存技术。当物理内存不足以容纳当前运行的程序时,操作系统将会把一部分内存空间暂时转移到硬盘上,以便为当前程序提供运行所需的内存空间。这个过程就称为交换。交换分区

交换分区的使用可以有效避免程序因为内存不足而崩溃或运行缓慢的问题,但是硬盘的读写速度比内存要慢得多,因此交换分区的使用会对系统的性能产生一定的影响。

在 Kubernetes 运行过程中,需要频繁地使用内存和磁盘等系统资源。如果使用了交换分区,会导致 Kubernetes 的运行速度变慢,从而影响整个集群的性能。因此,在安装 Kubernetes 时,通常会建议关闭交换分区。

以一个类比的方式来说,就好像开车上高速,如果路况通畅,车速可以很快,但是如果遇到堵车,需要走应急车道,就会耽误时间。交换分区就像是道路上的堵车,会影响系统的运行速度和效率。因此,为了让 Kubernetes 运行更加高效,通常会建议关闭交换分区。

#临时关闭 swapoff -a

#永久关闭:注释swap挂载,给swap这行开头加注释 vim /etc/fstab

7、修改机器内核参数

modprobe br_netfilter

vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

sysctl -p /etc/sysctl.d/k8s.conf

8、关闭firewalld防火墙并关闭selinux

setenforce 0 && systemctl stop firewalld && systemctl disable firewalld

9、安装containerd

下载nerdctl https://github.com/containerd/nerdctl/releases full 类型二进制压缩包,该压缩包中包含了所有containerd相关的内容包括:Containerd、CNI、runc、BuildKit 等完整组件。

mkdir -p /root/kubeadm-boot/containerd

cd /root/kubeadm-boot/containerd

tar xzvf nerdctl-full-2.0.0-beta.5-linux-amd64.tar.gz -C /usr/local

创建软连接

ln -s /usr/local/bin/runc /usr/local/sbin/runc

mkdir -p /opt/cni/

ln -s /usr/local/libexec/cni/ /opt/cni/bin

设置开机自启并启动服务

systemctl daemon-reload

systemctl enable --now buildkit.service

systemctl enable --now containerd.service

systemctl enable --now stargz-snapshotter.service

查看服务状态

systemctl status buildkit.service

systemctl status containerd.service

systemctl status stargz-snapshotter.service

检查命令是否可用

containerd -v

nerdctl -v

runc -v

buildkitd -v

配置containerd

containerd config default > /root/kubeadm-boot/containerd/config.toml

编辑config.toml文件内容

root = "/data/containerd"

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

SystemdCgroup = true

镜像加速

[plugins."io.containerd.grpc.v1.cri".registry]

config_path = "/etc/containerd/certs.d"

mkdir -p /root/kubeadm-boot/containerd/certs.d/registry.k8s.io

cat > /root/kubeadm-boot/containerd/certs.d/registry.k8s.io/hosts.toml << EOF

server = "https://registry.k8s.io"

[host."https://k8s.m.daocloud.io"]

capabilities = ["pull", "resolve"]

EOF

cp -r /root/kubeadm-boot/containerd/certs.d/ /etc/containerd/

创建镜像存储位置 /data/containerd/

mkdir -p /data/containerd/

放置配置文件

mkdir -p /etc/containerd

cp /root/kubeadm-boot/containerd/config.toml /etc/containerd/

重启containerd

Systemctl restart containerd

验证加速效果

ctr -n k8s.io images pull --hosts-dir "/etc/containerd/certs.d" -k registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9

10、安装kubernetes

创建kubernetes YUM仓库

cd /etc/yum.repo.d/

cat <<EOF | sudo tee kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/

enabled=1

gpgcheck=1

gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key

exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni

EOF

yum clean all

yum makecache

下载k8s各种组件,最新版本为1.30.4

yum install kubelet kubeadm kubectl -y

生成默认配置:

kubeadm config print init-defaults > kubeadm-init.yaml

修改配置中的 localAPIEndpoint.advertiseAddress 为当前主机的IP

修改 nodeRegistration.name 节点名称为当前节点的名称,注意这里是主节点

配置pod子网,在networking中加入 podSubnet

文件内容如下

apiVersion: kubeadm.k8s.io/v1beta3

bootstrapTokens:

  • groups:

  • system:bootstrappers:kubeadm:default-node-token

token: abcdef.0123456789abcdef

ttl: 24h0m0s

usages:

  • signing

  • authentication

kind: InitConfiguration

localAPIEndpoint:

advertiseAddress: 192.168.16.28

bindPort: 6443

nodeRegistration:

criSocket: unix:///run/containerd/containerd.sock

imagePullPolicy: IfNotPresent

name: qilin1

taints: null


apiServer:

timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta3

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns: {}

etcd:

local:

dataDir: /var/lib/etcd

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

kind: ClusterConfiguration

kubernetesVersion: 1.30.4

networking:

dnsDomain: cluster.local

podSubnet: 10.244.0.0/16

serviceSubnet: 10.96.0.0/12

scheduler: {}


apiVersion: kubeproxy.config.k8s.io/v1alpha1

kind: KubeProxyConfiguration

mode: ipvs


apiVersion: kubelet.config.k8s.io/v1beta1

kind: KubeletConfiguration

cgroupDriver: system

初始化集群

kubeadm init --config kubeadm-init.yaml

根据提示操作

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown (id -u):(id -g) $HOME/.kube/config
出现这个,可通过这个命令加入集群

kubeadm join 192.168.16.28:6443 --token abcdef.0123456789abcdef \

--discovery-token-ca-cert-hash sha256:ffad36b26f845c62580bee79d5d6ddcc4618aaf9d52e5ac22ddadc8e1a109f4c

验证集群是否正常

kubectl get nodes #ready即为正常的

相关推荐
全能全知者22 分钟前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩4 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS6 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑6 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge7 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇7 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试9 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!15 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes