本文作者:丁辉
Rke1部署Kubernetes集群
节点名称 | IP | Kubernetes角色 |
---|---|---|
k8s-master-1,Rke管理 | 192.168.1.10 | controlplane,etcd,worker |
k8s-master-2 | 192.168.1.20 | controlplane,etcd,worker |
k8s-master-3 | 192.168.1.30 | controlplane,etcd,worker |
环境准备
!!!每次部署都写挺麻烦的索性都放在一个文件内了请查看 Kubernetes基础环境准备 ,请按照此文档初始化环境
所有节点执行
配置 SSH
1
sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding yes/g' /etc/ssh/sshd_config
重启 SSH
1
systemctl restart sshd
将用户添加到 docker 组
1
2groupadd docker
useradd -m docker -g docker使用其他用户
1
2useradd rke # 创建用户
usermod -aG docker rke 将rke用户加入docker组配置 docker 用户免密登录
1
2
3
4
5mkdir -p /home/docker/.ssh/
touch /home/docker/.ssh/authorized_keys
chmod 700 /home/docker/.ssh/
chown -R docker.docker /home/docker/.ssh/
chmod 600 /home/docker/.ssh/authorized_keys
Rke管理节点执行
生成密钥
1
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -q
查看主节点密钥
密钥需要到 RKE 初始化节点上获取,所有节点都是用此密钥
1
cat ~/.ssh/id_rsa.pub
所有节点执行
粘贴密钥内容到此文件内(提示:所有节点粘贴Rke管理节密钥)
1
vi /home/docker/.ssh/authorized_keys
验证是否可以免密登录
1
ssh docker@192.168.1.10
Docker安装
Docker安装
1
curl https://releases.rancher.com/install-docker/20.10.sh | sh
传递参数使用国内源
1
curl -fsSL https://releases.rancher.com/install-docker/20.10.sh | sh -s -- --mirror Aliyun
启动 Docker
1
2systemctl enable docker
systemctl start docker
安装并初始化Rke
下载 RKE 二进制文件,并添加到可执行路径下
1
wget https://github.com/rancher/rke/releases/download/v1.4.10/rke_linux-amd64
授权
1
chmod 777 rke_linux-amd64 && mv rke_linux-amd64 /usr/local/bin/rke
方法一 (不推荐怪麻烦的请看”方法二”)
如果
Number of Hosts
填的是多节点则会提示输入多次节点信息
1 | rke config --name cluster.yml |
1 | [+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: #默认回车 |
基础参数修改
1 | sed -i '/^ingress:$/,/^ provider:/ s/provider: ""/provider: "none"/' cluster.yml |
方法二
生成初始文件
1
rke config --empty --name cluster.yml
按需要修改 address 参数
多节点则写多个
address
并通过调整 role 指定节点属性1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20nodes:
- address: 192.168.1.10
port: "22"
internal_address: 192.168.1.10
role:
- controlplane #管理
- worker #计算
- etcd #etcd节点
hostname_override: ""
user: docker
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {}
taints: []
# 格式一样此处省略 20,30 节点配置 ...
services:
...基础参数修改
1
2
3
4
5
6
7
8
9
10sed -i 's/service_cluster_ip_range: ""/service_cluster_ip_range: 10.43.0.0\/16/' cluster.yml
sed -i 's/cluster_cidr: ""/cluster_cidr: 10.42.0.0\/16/' cluster.yml
sed -i 's/cluster_domain: ""/cluster_domain: cluster.local/' cluster.yml
sed -i 's/cluster_dns_server: ""/cluster_dns_server: 10.43.0.10/' cluster.yml
sed -i 's/plugin: ""/plugin: flannel/' cluster.yml
sed -i 's/strategy: ""/strategy: x509/' cluster.yml
sed -i 's/^\s*mode: ""$/ mode: rbac/' cluster.yml
sed -i '/^ingress:$/,/^ provider:/ s/provider: ""/provider: "none"/' cluster.yml
sed -i '/^[^ ]/ s/ssh_key_path: ""/ssh_key_path: ~\/.ssh\/id_rsa/g' cluster.yml
sed -i '0,/^\s*ssh_key_path: ""$/{s,^\s*ssh_key_path: ""$, ssh_key_path: ~/.ssh/id_rsa,}' cluster.yml
初始化 Kubernetes 集群
1 | rke up |
禁用 metrics-server 组件
1 sed -i '/^monitoring:$/,/^ provider:/ s/provider: ""/provider: "none"/' cluster.yml调整节点端口范围
默认端口范围:30000-32767
1 sed -i 's/service_node_port_range: ""/service_node_port_range: "10000-30000"/' cluster.yml关闭 Docker 版本检测
1 sed -i 's/ignore_docker_version: null/ignore_docker_version: true/' cluster.yml调整部署版本
- 查看当前 RKE 支持的Kubernetes版本
1 rke config --list-version --all
- 替换版本
1 sed -i 's/kubernetes_version: ""/kubernetes_version: "v1.24.17-rancher1-1"/' cluster.yml更新集群
1 rke up --update-only
安装 kubectl
下载 kubectl
1
curl -LO https://dl.k8s.io/release/v1.26.8/bin/linux/amd64/kubectl
授权
1
chmod 777 kubectl && mv kubectl /usr/local/bin/
添加 kubctl 文件
1
mkdir ~/.kube && cp kube_config_cluster.yml ~/.kube/config && chmod 600 ~/.kube/config
验证
1
kubectl get node
本文中没有禁用
monitoring
所以也可以使用kubectl top node
测试
卸载
卸载 RKE 集群
1
rke remove
清理残余容器
1
2for i in $(docker ps -a | grep rancher | awk '{print $1}');do docker rm -f $i;done
for i in $(docker ps -a | grep rke | awk '{print $1}');do docker rm -f $i;done清除 Docker 引擎的废弃资源和缓存
1
docker system prune --all
卸载挂载
1
mount | grep /var/lib/kubelet/pods/ | awk '{print $1}' | xargs umount -l
删除持久化目录
1
2rm -rf /var/lib/kubelet/
rm -rf /run/flannel/
备份和恢复
非常重要,他奶奶的吃大亏了
创建一次性快照
RKE 会将节点快照保存在
/opt/rke/etcd-snapshots
路径下
1 | rke etcd snapshot-save --config cluster.yml --name <快照名称> |
恢复集群
1 | rke etcd snapshot-restore --config cluster.yml --name <快照名称> |
恢复 Rke配置文件
准备依赖
jq
Centos
1 yum install jq -yUbuntu
1 apt install jq -y
恢复 Kubectl 配置文件
修改
--master-ip=
为任意 K8S Master节点IP1
curl -sfL https://gitee.com/offends/Kubernetes/raw/main/File/Shell/restore-rkestate-kubeconfig.sh | bash -s -- --master-ip=<K8S Master节点IP>
恢复 rkestate 状态文件
通过本地 kubectl 找回
1
kubectl get configmap -n kube-system full-cluster-state -o json | jq -r .data.\"full-cluster-state\" | jq -r . > cluster.rkestate
通过 master 节点找回
1
curl -sfL https://gitee.com/offends/Kubernetes/raw/main/File/Shell/restore-rkestate-config.sh | bash -s
I'm so cute. Please give me money.
- 本文链接: https://blog.offends.cn/Kubernetes/部署文档/Rancher/Rke1部署Kubernetes集群.html
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。