RKE是一款经过CNCF认证的开源Kubernetes发行版,可以在Docker容器内运行。它通过删除大部分主机依赖项,并为部署、升级和回滚提供一个稳定的路径,从而解决了Kubernetes最常见的安装复杂性问题。
准备工作
1、允许tcp转发
vim /etc/ssh/sshd_config
AllowTcpForwarding yes
2、开放 2379、2380、6443、10250等端口
3、关闭iptables、firewalld等防火墙
4、如果安装了selinux请关闭
vim /etc/selinux/config
selinux=disabled
安装(不要使用root用户安装)
1、下载rke并重命名
mv rke_linux-amd64 rke
GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distribution that runs entirely within containers.2、将rke改为可执行文件并移动到/usr/local/bin
chmod +x rke
sudo mv rke /usr/local/bin/
3、注意不要安错版本,这里我选择rke版本为 v1.4.3,k8s版本为 v1.24.10-rancher4-1,如果选择v1.4.4默认k8s版本为v1.25,而目前最新版rancher不支持v1.25,如果后续想安装rancher的朋友们不要使用v1.4.4
rke --version #查看rke版本
rke config --list-version --all #查看支持的k8s版本
4、docker安装(注意请不要用snap安装,会有兼容性问题,目前默认docker版本兼容)
sudo apt update
sudo apt install docker.io
5、将后续需要的k8s和docker用户加入docker组以便能够执行docker命令,我直接将默认用户ubuntu加入了docker组,此时应重新连接ssh以便ubuntu用户也能执行docker命令
usermod -aG docker ubuntu #将ubuntu添加到docker组中
docker ps #重新连接ssh后输入,查看是否普通用户具有docker执行权限
6、生成 cluster.yml文件,按照提示生成即可
rke config --name cluster.yml
生成部分代码如下:
nodes:
- address: 192.168.94.128
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: lz
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {}
taints: []
- address: 192.168.94.130
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: lz
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {}
taints: []
- address: 192.168.94.129
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: lz
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {}
taints: []
请注意几个点:ssh Address建议写内网地址;公私钥对建议提前建好,并将公钥内容粘贴到 authorized_keys中;docker image 如果不想用默认k8s版本记得在第三步获取的支持版本中选择
7、初始化k8s集群
rke up #请在cluster.yml目录下执行该命令
常见报错
1、端口无法连接
解决方案:telnet如果不通请检查防火墙配置,包括云服务器的云端防火墙;
2、无法连接某台服务器
解决方案:检查要连接的服务器的authorized_keys中是否有cluster.yml中设置ssh_key对应的公钥
3、2379、2380问题
把所有节点上的docker0网络,flannel网络,calico网络删掉,停掉docker服务并重启服务器
ifconfig docker0 down
ip link delete docker0
systemctl stop docker.socket
systemctl stop docker.service
reboot
连接
k8s安装成功后,会生成kube_config_cluster.yml文件,该文件用于连接该k8s,可以选择输入kubectl命令时指定该文件或者直接将文件改为config,我是直接修改为config方便后续使用
mv ~/kube_config_cluster.yml ~/.kube/config
自行下载helm和kubectl,并放到/usr/local/bin目录下,同时给予可执行权限,并检查是否连接成功
kubectl get nodes #如下所示为成功
NAME STATUS ROLES AGE VERSION
10.0.8.7 Ready controlplane,etcd,worker 24h v1.24.10
10.0.8.8 Ready controlplane,etcd,worker 24h v1.24.10
10.0.8.9 Ready controlplane,etcd,worker 24h v1.24.10