Rancher搭建k8s集群

Rancher搭建k8s集群

tags:

  • K8s集群
  • Rancher

categories:

  • Rancher搭建

文章目录

  • Rancher搭建k8s集群
    • 第一节 docker中通过Rancher安装k8s集群
      • 1.1 虚拟机环境配置
      • 1.2 docker中安装Rancher
    • 第二节 通过Rancher安装高可用生产环境k8s集群
      • 2.1 环境配置和安装
      • 2.2 安装RKE和kubectl
      • 2.3 使用 RKE 安装 kubernetes
      • 2.4 设置环境变量
      • 2.5 安装和配置Helm
    • 第三节 清理Rancher创建的k8s集群

第一节 docker中通过Rancher安装k8s集群

1.1 虚拟机环境配置

  1. 安装centos7, 直接选择网络模式桥接模式复制本机的ip。(安装时设置主机名)
  2. 集群配置的说明
    • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
    • 集群中所有机器之间网络互通
    • 可以访问外网,需要拉取镜像(这个可以通过阿里镜像解决,及时配置外网速度也很慢。或者需要拉下来之后手动安装)
    • 禁止swap分区(不禁止会报错的)
  3. 初始环境配置(网络配置、主机名配置、yum源更新、时钟同步、内核参数配置、语言时区、关闭SELINUX、防火墙SSH参数配置)
# 自动配置脚本
curl -O http://pigx.vip/os7init.sh
sh os7init.sh hostname(自己的)

1.2 docker中安装Rancher

  1. 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
# 开机启动
cat <<EOF > /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": [
   		 "https://registry.cn-hangzhou.aliyuncs.com",
   		 "https://fz5yth0r.mirror.aliyuncs.com",
          "https://dockerhub.mirrors.nwafu.edu.cn/",
          "https://mirror.ccs.tencentyun.com",
          "https://docker.mirrors.ustc.edu.cn/",
          "https://reg-mirror.qiniu.com",
          "http://hub-mirror.c.163.com/",
          "https://registry.docker-cn.com"
    ]
}
EOF
systemctl enable docker && systemctl start docker
  1. 创建Rancher容器
# https://docs.rancher.cn/docs/rancher2/installation/other-installation-methods/single-node-docker/_index/
# rancher:v2.5.5
docker run -d --privileged --restart=unless-stopped   -p 80:80 -p 443:443   --privileged -e CATTLE_SYSTEM_CATALOG=bundled -e AUDIT_LEVEL=3 rancher/rancher:v2.5.9
# 加上自己的证书
# rancher的ssl证书文件名规则是,将rancher.tongfu.net.pem文件改成cert.pem,将rancher.tongfu.net.key文件改成key.pem。
docker run -d --privileged --restart=unless-stopped  -p 443:443 --privileged -e CATTLE_SYSTEM_CATALOG=bundled -e AUDIT_LEVEL=3 -v /root/rancher/ssl/:/etc/rancher/ssl/ --memory 4g --memory-swap -1  rancher/rancher:v2.5.9 --no-cacerts
# 一定要耐心等待 访问即可
https://192.168.0.109/ 

第二节 通过Rancher安装高可用生产环境k8s集群

2.1 环境配置和安装

hostnamectl set-hostname xxx

2.2 安装RKE和kubectl

  1. Rancher Kubernetes Engine(RKE)是一款轻量级Kubernetes安装程序,支持在裸机和虚拟化服务器上安装Kubernetes。
# 下载二进制文件1.14到1.16
https://github.com/rancher/rke/releases/tag/v1.0.0
# 下载二进制文件1.16到1.18
https://github.com/rancher/rke/releases/tag/v1.2.0
# 下载二进制文件最新
https://github.com/rancher/rke/releases/latest
  1. 下载安装。注意:此文件安装的k8s版本为v1.19.2
wget https://github.com/rancher/rke/releases/download/v1.2.0/rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/bin/
rke_linux-amd64 --version
  1. 安装kubectl, kubectl是一个CLI命令行工具,用于运行Kubernetes集群的命令。
# 下载
https://storage.googleapis.com/kubernetes-release/release/v1.19.0/kubernetes-client-linux-amd64.tar.gz
# 安装
tar zxvf kubernetes-client-linux-amd64.tar.gz -C /usr/src/
cp /usr/src/kubernetes/client/bin/kubectl /usr/bin/kubectl
chmod +x /usr/bin/kubectl
# 配置kubectl的shell补全 CentOS未安装的bash-completion软件包。
yum install bash-completion -y
# 可将kubectl自动补全添加到当前shell,要使kubectl自动补全命令自动加载
echo "source <(kubectl completion bash)" >> ~/.bashrc

2.3 使用 RKE 安装 kubernetes

  1. 目前有三台服务器用作集群,首先要确保我们主机能够通过 ssh 访问到另外两台主机并执行相关操作。
  2. 创建用户rancher。使用rke安装kubernetes时,不能以root用户执行。必须是一个普通用户才行
# 1. 在rancher1,rancher2,rancher3执行以下命令
useradd rancher
passwd rancher
# 授权docker权限 在rancher1,rancher2,rancher3执行以下命令
# 2. 将登陆用户develop加入到docker用户组中
gpasswd -a rancher docker
#更新用户组
newgrp docker
# 切换到rancher用户进行测试
su rancher
docker ps
# 3. 添加ssh信任,在rancher1,rancher2,rancher3执行以下命令
su rancher
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 4. 复制公钥 在rancher1,rancher2,rancher3上执行 注意:以rancher用户执行。
ssh-copy-id 192.168.0.109 
ssh-copy-id 192.168.0.111 
ssh-copy-id 192.168.0.113
# 测试ssh免密
ssh 192.168.0.109 
ssh 192.168.0.111 
ssh 192.168.0.113
cd ~
  1. 编写 rancher-cluster.yml 文件,这个文件没有明确配置rsa文件名,默认会使用 $HOME/.ssh/id_rsa 建立连接。在rancher-1上执行。注意:以rancher用户执行。
# vi rancher-cluster.yml
nodes:
  - address: 192.168.0.109
    internal_address: 192.168.0.109
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher01
  - address: 192.168.0.111
    internal_address: 192.168.0.111
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher02
  - address: 192.168.0.113
    internal_address: 192.168.0.113
    user: rancher
    role: [controlplane,worker,etcd]
    hostname_override: rancher03

services:
  etcd:
    backup_config:
        enabled: true
        interval_hours: 6
        retention: 60
  1. 备注:
    • address 公共域名或IP地址
    • user 可以运行docker命令的用户
    • role 分配给节点的Kubernetes角色列表
    • internal_address 内部集群通信的私有域名或IP地址
    • 开启了etcd的备份机制,每隔6小时备份一次,保存60天数据
  2. 运行 RKE 构建 kubernetes 集群, 在rancher-1上执行。注意:以rancher用户执行
rke_linux-amd64 up --config ./rancher-cluster.yml
# 如果报错 就重新执行以下上面
# WARN[0542] Failed to deploy addon execute job [rke-ingress-controller]: Failed to get job complete status for job rke-ingress-controller-deploy-job in namespace kube-system
rke_linux-amd64 up --config ./rancher-cluster.yml
  1. 没有报错的话,表示安装成功了。执行成功会在当前目录生成2个文件,分别是rancher-cluster.rkestate和kube_config_rancher-cluster.yml。
    • rancher-cluster.yml:RKE集群配置文件。
    • kube_config_rancher-cluster.yml:群集的Kubeconfig文件,此文件包含完全访问群集的凭据。
    • rancher-cluster.rkestate:Kubernetes群集状态文件,此文件包含完全访问群集的凭据。

2.4 设置环境变量

  1. 在rancher1上执行。注意:以rancher用户执行。
mkdir ~/.kube
cp kube_config_rancher-cluster.yml ~/.kube/config
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
# 查看node
kubectl get nodes
# 如果需要root用户执行kubectl,切换到root用户,执行以下命令
mkdir ~/.kube
cp /home/rancher/kube_config_rancher-cluster.yml ~/.kube/config
export KUBECONFIG=~/.kube/config
# 测试一下
kubectl get pods -A

2.5 安装和配置Helm

  1. Helm是Kubernetes首选的包管理工具。Helmcharts为Kubernetes YAML清单文档提供模板语法。使用Helm,可以创建可配置的部署,而不仅仅是使用静态文件。
  2. 配置Helm客户端访问权限,在rancher01上执行,下面提到的所有命令,都可以在root用户执行了。
# 在kube-system命名空间中创建ServiceAccount;创建ClusterRoleBinding以授予tiller帐户对集群的访问权限;helm初始化tiller服务
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
# 安装客户端和服务器端
wget https://get.helm.sh/helm-v2.16.6-linux-amd64.tar.gz
tar zxvf helm-v2.16.6-linux-amd64.tar.gz -C /usr/src/
cp /usr/src/linux-amd64/helm /usr/local/bin/
helm init --service-account tiller --skip-refresh --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.16.6
  1. Helm安装Rancher
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
# 配置SSL 注意:rancher默认使用https访问,因此,需要有一个公网的SSL才行。将证书上传到rancher-01创建secret
# 没有SSL 手动制作自签名证书 https://blog.zhenglin.work/ca/make_key.html
curl -O http://pigx.vip/key.sh
sh key.sh --ssl-domain=qnhyn.com --ssl-size=2048 --ssl-date=3650
kubectl create ns cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem
# 安装 --version 2.4.3 可以指定版本
helm install rancher-stable/rancher --name rancher --namespace cattle-system --set hostname=rancher.qnhyn.com --set ingress.tls.source=secret --set privateCA=true

https://www.codenong.com/cs106745791/
https://cloud.tencent.com/developer/article/1638170
https://www.bookstack.cn/read/rancher-2.4.4-zh/Rancher%E5%91%BD%E4%BB%A4%E8%A1%8C.md

第三节 清理Rancher创建的k8s集群

#删除所有容器
sudo docker rm -f $(sudo docker ps -qa)

#删除/var/etcd目录
sudo rm -rf /var/etcd

#删除/var/lib/kubelet/目录,删除前先卸载
for m in $(sudo tac /proc/mounts | sudo awk '{print $2}'|sudo grep /var/lib/kubelet);do
 sudo umount $m||true
done
sudo rm -rf /var/lib/kubelet/

#删除/var/lib/rancher/目录,删除前先卸载
for m in $(sudo tac /proc/mounts | sudo awk '{print $2}'|sudo grep /var/lib/rancher);do
 sudo umount $m||true
done
sudo rm -rf /var/lib/rancher/

#删除/run/kubernetes/ 目录
sudo rm -rf /run/kubernetes/

#删除所有的数据卷
sudo docker volume rm $(sudo docker volume ls -q)
rm -rf /etc/cni \
       /etc/kubernetes \
       /opt/cni \
       /opt/rke \
       /run/secrets/kubernetes.io \
       /run/calico \
       /run/flannel \
       /var/lib/calico \
       /var/lib/etcd \
       /var/lib/cni \
       /var/lib/kubelet \
       /var/lib/rancher/rke/log \
       /var/log/containers \
       /var/log/pods \
       /var/run/calico
rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
sudo systemctl restart containerd
sudo systemctl restart docker

#再次显示所有的容器和数据卷,确保没有残留
sudo docker ps -a
sudo docker volume ls

你可能感兴趣的:(spring,boot,java,后端)