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即为正常的