kubeadm部署kubernetes v1.28.0/v1.29.0(ubuntu安装)

一、kubernetes简介

 kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

​ kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
服务发现:服务可以通过自动发现的形式找到它所依赖的服务
负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
存储编排:可以根据容器自身的需求自动创建存储卷

Kubernetes 主要由以下几个核心组件组成:

etcd:保存了整个集群的状态;

kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;

kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

kube-scheduler:负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;

kubelet:负责维持容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;

Container runtime:负责镜像管理以及 Pod 和容器的真正运行(CRI),默认的容器运行时为 Docker;

kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。

二、环境准备


2.1 服务器要求
一台或多台安装linux服务器,此处使用vmware17安装虚拟服务器
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】,开启cpu虚拟化
需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点

软件版本备注
操作系统Ubuntu-23.04
kubernetes1.28.0
docker25.0.2
角色IP备注
k8s-master172.17.1.35master
k8s-node-1172.17.1.36node
k8s-node-1172.17.1.37node

2.3 服务器环境准备(所有节点)
1.主机名配置

# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname k8s-master

# 根据规划设置主机名【node01节点操作】
hostnamectl set-hostname k8s-node-1

# 根据规划设置主机名【node02节点操作】
hostnamectl set-hostname k8s-node-2

2.IP配置
略,各个系统IP配置都不一样,根据自己系统配置。

3.主机名与IP解析

cat >> /etc/hosts << EOF
172.17.1.35 k8s-master
172.17.1.36 k8s-node-1
172.17.1.37 k8s-node-2
EOF

4.关闭防火墙与SELINUX
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

5.时间同步配置


apt-get install chrony -y
systemctl start chrony && systemctl enable chrony && chronyc sources

6.配置内核路由转发及网桥过滤


cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
sysctl --system

# 加载br_netfilter模块
modprobe  br_netfilter
lsmod |grep  br_netfilter
7.配置ipvs转发


apt-get -y install ipset ipvsadm

# 配置ipvsadm模块加载方式
# 添加需要加载的模块
mkdir -p /etc/sysconfig/ipvsadm
cat > /etc/sysconfig/ipvsadm/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

# 授权、运行、检查是否加载
chmod 755 /etc/sysconfig/ipvsadm/ipvs.modules && bash /etc/sysconfig/ipvsadm/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

8.关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab  
swapoff -a 
grep swap /etc/fstab 

三、安装相关工具

安装docker、ci-dockerd、kubelet、kubeadm、kubectl(所有节点) 3.0 说明(与安装无关) (1)关于容器运行时接口(CRI)

官方文档:容器运行时 | Kubernetes

早期k8s使用docker-shim调用docker容器引擎,但docker-shim不符合CRI标准,每次k8s升级,都要重新适配,极其麻烦,Kubernetes v1.24移除docker-shim的支持,使用CRI shim。containerd是一个主流的容器引擎,内置CRI shim,与Docker相兼容,相比Docker轻量很多,目前较为成熟

配置下载源

这里用的是阿里云的源

安装kubelet kubeadm kubectl

apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl

安装docker

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
​
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
​
# 配置cgroup驱动及镜像下载加速器:
cat > /etc/docker/daemon.json << EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
   "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://dockerhub.azk8s.cn",
        "http://hub-mirror.c.163.com"
    ]
}
EOF
​
systemctl enable docker && systemctl start docker && systemctl status docker && docker info|grep systemd
3.2 安装cri-dockerd
参考:https://github.com/Mirantis/cri-dockerd
# 下载安装最新版的cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
tar xf cri-dockerd-0.3.8.amd64.tgz 
mv cri-dockerd/cri-dockerd  /usr/bin/
rm -rf  cri-dockerd  cri-dockerd-0.3.8.amd64.tgz
​
# 配置启动项
cat > /etc/systemd/system/cri-docker.service<<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
# ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://
# 指定用作 Pod 的基础容器的容器镜像(“pause 镜像”)
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd:// 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
# 说明:--pod-infra-container-image根据kubeadm config images list列出的配置镜像pause镜像配置。
​
cat > /etc/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
​
systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker

安装cri-dockerd

# 下载安装最新版的cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8.amd64.tgz
tar xf cri-dockerd-0.3.8.amd64.tgz 
mv cri-dockerd/cri-dockerd  /usr/bin/
rm -rf  cri-dockerd  cri-dockerd-0.3.8.amd64.tgz
​
# 配置启动项
cat > /etc/systemd/system/cri-docker.service<<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
# ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://
# 指定用作 Pod 的基础容器的容器镜像(“pause 镜像”)
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd:// 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
# 说明:--pod-infra-container-image根据kubeadm config images list列出的配置镜像pause镜像配置。
​
cat > /etc/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
​
systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker && systemctl status cri-docker
# 配置 cgroup 驱动与docker一致
cp /etc/sysconfig/kubelet{,.bak}
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF
systemctl enable kubelet
​
# 安装自动补全工具(可选)
apt-get install bash-completion -y 
source /usr/share/bash-completion/bash_completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
source  ~/.bashrc   
​
​
# 查看配置镜像
# 强烈建议提前pull镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
​
# 拉取配置镜像
kubeadm config images pull  --image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock

四、部署k8s master

# 初始化集群
kubeadm init \
--apiserver-advertise-address 172.17.1.35  \
--kubernetes-version v1.28.0 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
说明:
​
–apiserver-advertise-address 集群通告地址,node节点连接master的地址,如果是高可用,需要配置VIP的地址。这里是单master架构,默认master地址即可。
–kubernetes-version K8s版本,与上面安装的一致
–pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
–cri-socket 指定cri-dockerd接口,如果是containerd则使用–cri-socket unix:///run/containerd/containerd.sock
​
如果初始化一直超时,请检查/etc/systemd/system/cri-docker.service文件pause镜像是否与docker images的镜像一致。
# 创建配置目录
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
​
# 默认初始化生成token有效期是24小时,所以我们用自己的生成不过期的token,node节点加入需要用到
kubeadm token create --ttl 0  --print-join-command
# 生成结果如下:
kubeadm join 172.17.1.35:6443 --token pgpqgc.7wdq2kxij7thbegu --discovery-token-ca-cert-hash sha256:26b02bb33defc828b16885d15fba098febcda2bc02002196cf513530d6af6802
​
# 1、查看token
# kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
9vtcrz.xct33esabs8zchqn   23h         2024-04-27T17:36:54Z   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
tldne2.j4wyhwy6nlyop6tk   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
​
# 2、重新生成token
# 默认初始化生成token有效期是24小时,所以我们用自己的生成不过期的token,node节点加入需要用到
kubeadm token create --ttl 0  --print-join-command
​
# 3、使用已经生成的token
# 查找需要的toekn
# kubeadm token list
# 获取公钥的hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 拼接加入命令
kubeadm join 172.17.1.35:6443  --token [已经生成的token]     --discovery-token-ca-cert-hash sha256:[获取到的公钥hash值]  --cri-socket unix:///run/containerd/containerd.sock
​

五、部署k8s node 

node节点操作都一样。

kubeadm join 172.17.1.35:6443 \
--token pgpqgc.7wdq2kxij7thbegu \
--discovery-token-ca-cert-hash sha256:26b02bb33defc828b16885d15fba098febcda2bc02002196cf513530d6af6802 \
--cri-socket=unix:///var/run/cri-dockerd.sock
说明:这命令在master节点使用kubeadm token create --ttl 0 --print-join-command生成的,添加节点需要指定cri-dockerd接口–cri-socket ,这里是使用cri-dockerd,如果是containerd则使用–cri-socket unix:///run/containerd/containerd.sock

六、部署容器网络(CNI)

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。由于docker镜像站点被封,所以要用本地镜像。

root@master:~# tar xf calico.tar.gz
root@master:~# ls calico
calico.yaml  images
root@master:~# cd images
root@master:~# cat > a.sh < EOF
#!/bin/bash
archive_dir="/root/calico/images"
for archive in "$archive_dir"/*.tar
do
  docker load -i "$archive"
done
EOF
root@master:~# kubectl apply -f calico.yaml
root@master:~# kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
k8s-node   Ready    <none>          58m     v1.28.10
master     Ready    control-plane   4d14h   v1.28.10
root@master:~# kubectl get pods -n kube-system
NAME                                     READY   STATUS    RESTARTS      AGE
calico-kube-controllers-77bd7c5b-2dvx2   1/1     Running   0             30m
calico-node-bncr5                        1/1     Running   0             30m
calico-node-zgw4t                        1/1     Running   0             30m
coredns-66f779496c-4cc5p                 1/1     Running   1 (69m ago)   4d14h
coredns-66f779496c-6qv76                 1/1     Running   1 (69m ago)   4d14h
etcd-master                              1/1     Running   3 (69m ago)   4d14h
kube-apiserver-master                    1/1     Running   4 (68m ago)   4d14h
kube-controller-manager-master           1/1     Running   3 (69m ago)   4d14h
kube-proxy-6xl84                         1/1     Running   3 (69m ago)   4d14h
kube-proxy-vswx7                         1/1     Running   0             58m
kube-scheduler-master                    1/1     Running   3 (69m ago)   4d14h
root@user:~# sudo apt install -y curl gpg build-essential Reading package lists... Done Building dependency tree... Done Reading state information... Done build-essential is already the newest version (12.9ubuntu3). curl is already the newest version (7.81.0-1ubuntu1.20). gpg is already the newest version (2.2.27-3ubuntu2.3). gpg set to manually installed. The following packages were automatically installed and are no longer required: bridge-utils containerd pigz ubuntu-fan Use &#39;sudo apt autoremove&#39; to remove them. 0 upgraded, 0 newly installed, 0 to remove and 104 not upgraded. root@user:~# gpg --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 gpg: key 3804BB82D39DC0E3: "Michal Papis (RVM signing) <mpapis@gmail.com>" not changed gpg: Total number processed: 1 gpg: unchanged: 1 root@user:~# curl -sSL https://get.rvm.io | bash -s stable curl: (6) Could not resolve host: api.github.com curl: (6) Could not resolve host: api.github.com curl: (6) Could not resolve host: api.github.com curl: (6) Could not resolve host: api.github.com WARN: ...the preceeding error with code 6 occurred while fetching https://api.github.com/repos/rvm/rvm/tags Downloading https://github.com/rvm/rvm/archive/1.29.12.tar.gz curl: (7) Failed to connect to github.com port 443 after 6029 ms: Connection refused Could not download &#39;https://github.com/rvm/rvm/archive/1.29.12.tar.gz&#39;. curl returned status &#39;7&#39;. Downloading https://bitbucket.org/mpapis/rvm/get/1.29.12.tar.gz Downloading https://bitbucket.org/mpapis/rvm/downloads/1.29.12.tar.gz.asc gpg: Signature made Fri 15 Jan 2021 06:46:26 PM UTC gpg: using RSA key 7D2BAF1CF37B13E2069D6956105BD0E739499BDB gpg: Can&#39;t check signature: No public key GPG signature verification failed for &#39;/usr/local/rvm/archives/rvm-1.29.12.tgz&#39; - &#39;https://bitbucket.org/mpapis/rvm/downloads/1.29.12.tar.gz.asc&#39;! Try to install GPG v2 and then fetch the public key: gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB or if it fails: command curl -sSL https://rvm.io/mpapis.asc | gpg --import - command curl -sSL https://rvm.io/pkuczynski.asc | gpg --import - In case of further problems with validation please refer to https://rvm.io/rvm/security root@user:~# source /etc/profile.d/rvm.sh -bash: /etc/profile.d/rvm.sh: No such file or directory root@user:~# echo "source /etc/profile.d/rvm.sh" >> ~/.bashrc root@user:~# source /usr/local/rvm/scripts/rvm -bash: /usr/local/rvm/scripts/rvm: No such file or directory root@user:~# echo "source /usr/local/rvm/scripts/rvm" >> ~/.bashrc root@user:~# rvm install 3.1.0 Command &#39;rvm&#39; not found, but there are 19 similar ones. root@user:~#
最新发布
07-08
<think>我们正在解决用户遇到的RVM安装问题,特别是GPG验证失败和网络连接问题,以及环境变量配置问题。根据引用[1]和[2],我们知道RVM安装成功后会显示"Thanks for installing RVM",并且需要通过`source`命令来启动RVM。引用[5]提到在安装Redis时遇到Ruby版本过低的问题,这进一步说明正确安装Ruby版本的重要性。 步骤分解: 1. 解决GPG验证失败:在安装RVM之前,需要导入正确的密钥。 2. 解决网络连接问题:使用国内镜像源加速下载。 3. 安装RVM:通过安全的脚本安装。 4. 配置环境变量:确保RVM命令在终端中可用。 5. 安装指定Ruby版本(3.1.0)。 具体操作如下: ### 1. 安装GPG密钥(解决GPG验证失败) 引用[5]中提到GPG验证失败的问题,我们可以通过以下命令导入密钥: ```bash gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB ``` 如果遇到连接问题,可以尝试使用备用服务器: ```bash gpg --keyserver hkp://pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB ``` ### 2. 使用国内镜像加速RVM安装(解决网络问题) 使用国内镜像可以显著提高下载速度,避免网络连接问题。我们可以使用Ruby China的镜像: ```bash curl -sSL https://gems.ruby-china.com/mirror/rvm | bash -s stable ``` 或者,如果遇到镜像问题,也可以使用官方源(但可能较慢): ```bash curl -sSL https://get.rvm.io | bash -s stable ``` ### 3. 激活RVM环境 安装完成后,根据引用[1]和[2],需要执行`source`命令来激活RVM: ```bash source /etc/profile.d/rvm.sh ``` 为了永久生效,将以下命令添加到bash配置文件中: ```bash echo "source /etc/profile.d/rvm.sh" >> ~/.bashrc ``` 注意:如果RVM安装到其他路径(如`/usr/local/rvm/scripts/rvm`),则使用对应路径(引用[1]和[5]中提到的路径不同,可能是安装方式不同导致)。 ### 4. 配置Ruby安装镜像(可选但推荐) 为了加快Ruby的下载速度,配置国内镜像源: ```bash echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > ~/.rvm/user/db ``` ### 5. 安装Ruby 3.1.0 现在可以安装指定版本的Ruby: ```bash rvm install 3.1.0 ``` 如果遇到编译依赖问题,可能需要安装一些开发库(引用[5]中提到的): ```bash sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev ``` ### 6. 设置默认Ruby版本 ```bash rvm use 3.1.0 --default ``` ### 7. 验证安装 ```bash ruby -v # 应该输出:ruby 3.1.0p... rvm -v # 输出RVM版本 ``` ### 常见问题解决 - **问题:RVM命令未找到** 检查是否激活了RVM脚本,如果安装路径不同,可能需要手动指定。例如,如果RVM安装在`/usr/local/rvm`,则使用: ```bash source /usr/local/rvm/scripts/rvm ``` - **问题:GPG验证失败** 确保密钥服务器可访问,或者尝试使用不同的密钥服务器(如`hkp://ipv4.pool.sks-keyservers.net`)。 - **问题:网络连接超时** 使用国内镜像,并确保网络设置正确。 ### 引用说明 [^1] 提到安装成功后使用`source`命令激活RVM并查看版本。 [^2] 指出当RVM未安装时会出现`command not found`错误。 [^5] 提到在安装Redis时遇到的Ruby版本问题,以及可能出现的路径问题。 通过以上步骤,应该能够成功安装RVM和Ruby 3.1.0,并解决GPG验证和网络问题。 §§相关问题§§ 1. RVM 和 rbenv 在管理多个 Ruby 版本时有哪些主要区别? 2. 如何配置 Oxidized 来备份不同厂商的网络设备配置? 3. Ruby 3.1 版本引入了哪些新特性或重要变更? 4.Ubuntu 和 CentOS 上安装 RVM 的步骤有何不同?</think>### 解决 RVM 安装中的 GPG 验证失败和网络问题 #### 1. **修复 GPG 密钥验证失败** ```bash # 更新密钥服务器配置 gpgconf --kill all gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB # 备用方案:使用 MIT 密钥服务器 gpg --keyserver hkp://pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 ``` #### 2. **解决网络连接问题** ```bash # 使用国内镜像源安装 RVM curl -sSL https://gems.ruby-china.com/mirror/rvm | bash -s stable # 配置 Ruby 下载镜像 echo "ruby_url=https://cache.ruby-china.com/pub/ruby" >> ~/.rvm/user/db ``` #### 3. **正确加载 RVM 环境** ```bash # 手动加载 RVM(临时生效) source /usr/local/rvm/scripts/rvm # 或 source $HOME/.rvm/scripts/rvm # 永久生效配置(三选一) echo "source $HOME/.rvm/scripts/rvm" >> ~/.bashrc # 用户级 echo "source /usr/local/rvm/scripts/rvm" >> /etc/profile # 系统级(需 sudo) echo "[[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\"" >> ~/.bashrc ``` #### 4. **验证环境加载** ```bash # 检查 RVM 路径 type rvm | head -n1 # 正确输出:rvm is a function rvm -v # 应显示:rvm 1.x.x ``` #### 5. **安装 Ruby 3.1.0** ```bash # 安装编译依赖 sudo apt install -y libssl-dev libreadline-dev zlib1g-dev libgdbm-dev libncurses5-dev # 使用源码编译安装 rvm install 3.1.0 --disable-binary # 设为默认版本 rvm use 3.1.0 --default ``` #### 6. **故障排查指南** | 问题现象 | 解决方案 | |---------|---------| | `gpg: keyserver receive failed` | 更换密钥服务器:`hkp://ipv4.pool.sks-keyservers.net` | | `Downloading https://... timeout` | 修改 `~/.rvm/user/db` 添加 `ruby_url=https://mirror.sjtu.edu.cn/ruby` | | `rvm: command not found` | 检查加载路径:`ls -l /usr/local/rvm/scripts/rvm ~/.rvm/scripts/rvm` | | `Error running &#39;__rvm_make -j8&#39;` | 安装完整开发工具链:`sudo apt install build-essential` | > 关键点:通过国内镜像解决网络问题[^3],使用 `--disable-binary` 避免预编译包验证失败[^5],环境变量加载是激活 RVM 的核心步骤[^1][^2] #### 7. **验证安装** ```bash ruby -v # 输出:ruby 3.1.0p... rvm list # 应显示:=* ruby-3.1.0 [ x86_64 ] ``` > 注意:若使用非 bash shell(如 zsh),需在对应配置文件(`~/.zshrc`)中添加环境加载命令[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值